2009-09-26 30 views
18

Mam skrypt oparty na NAnt, który uruchamiam na moim lokalnym komputerze PC, który łączy się z SQL Server 2008 Express, działający również na moim lokalnym komputerze, aby usunąć i ponownie utworzyć bazy danych za pomocą. pliki sql - działa to dobrze, bez problemu.Dostawca "SQLNCLI" nie jest zarejestrowany na komputerze lokalnym

Problem zaczyna się kiedy odtworzyli ten sam set-up na innym komputerze, pojawia się błąd w moim skrypcie NANT mówiąc, że:

System.InvalidOperationException: The 'SQLNCLI' provider is not registered on the local machine. 
    at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) 
    at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 
    at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.OleDb.OleDbConnection.Open() 
    at NAnt.Contrib.Util.SqlHelper..ctor(String connectionString, Boolean useTransaction) 
    at NAnt.Contrib.Tasks.SqlTask.ExecuteTask() 
    at NAnt.Core.Task.Execute() 
    at NAnt.Core.Target.Execute() 
    at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) 
    at NAnt.Core.Project.Execute() 
    at NAnt.Core.Project.Run() 

Szukałem w Internecie i okazało się, że na forum jest zasugerowano, że muszę zainstalować klienta natywnego Microsoft SQL Server i got it from this URL. (Wprawdzie zainstalowałem tylko część Native Client)

Pomimo tego, że jest zainstalowany na moim drugim komputerze, skrypt nadal daje mi ten sam błąd. Jakieś sugestie?

+0

Powinno zadziałało ... Czy próbowałeś ponownie uruchomić urządzenie? –

+1

Jakiś szczególny powód, dla którego korzystasz z dostawcy OleDB z .Net? Użyj dostawcy SqlClient, nie wymaga instalacji żadnego sterownika, wszystko jest dostarczane z .net. –

+0

Może on po prostu chcieć elastyczności pisania do czegoś innego niż SQL Server w razie potrzeby. – SqlRyan

Odpowiedz

21

Prawidłowym dostawcą dla SQL Server 2008 jest SQLNCLI10.1.
Dla programu SQL Server 2012 byłby to SQLNCLI11. (source)

Niestety, migracja do 2008 roku nie podnieść zmianę ...

+0

Miałeś rację! Ciąg połączenia potrzebny do odniesienia się do SQLNCL10, a nie do SQLNCLI, który miałem w skrypcie. Niezłe. –

+1

Brett, powiedziałeś raczej SQLNCL10 niż poprawny SQLNCLI10. Prawdopodobnie jest to literówka, ale ją wyciąłem i wkleiłem :-( –

+0

Zmieniono trochę, żeby trochę ją posprzątać Nie mogłem znaleźć wiarygodnej listy dostawców Niektórzy ludzie w internecie sugerują, że ** SQLNCLI11.1 ** działa również na rok 2012. – Kobi

4

może to być problem z x86/x64? Jeśli daną stacją roboczą jest x64 i zainstalowana jest wersja klienta x64, ale aplikacja, którą próbujesz uruchomić, znajduje się w przestrzeni x86, możesz potrzebować także wersji x86 klienta na tej stacji roboczej. Aplikacja x86 sprawdza tylko wersję x86 dostawcy, a widząc brak, spowoduje błąd podobny do tego. Wersja x64 jest prawdopodobnie wystarczająco inteligentna, by sprawdzić jedną z tych wersji, ale może będziesz miał tę samą sytuację.

To samo dzieje się z ODBC - źródła danych x86 i x64 nie są dostępne dla innego typu aplikacji - jeśli chcesz, aby coś było widoczne z obu wersji aplikacji, musisz utworzyć źródło ODBC w narzędzie administracyjne każdej wersji.

+0

Komputery to komputery 64-bitowe, więc możesz być na czymś ... Będę musiał zbadać dalej! –

Powiązane problemy