2009-09-26 14 views
18

Tôi có tập lệnh dựa trên NAnt mà tôi chạy trên máy tính cục bộ kết nối với SQL Server 2008 Express cũng chạy trên máy tính cục bộ của mình để thả và tạo lại cơ sở dữ liệu. sql tập tin - điều này hoạt động tốt, không có vấn đề ở đây.Nhà cung cấp 'SQLNCLI' không được đăng ký trên máy cục bộ

vấn đề này được đưa ra khi tôi đã tái tạo cùng thiết lập trên máy tính khác, tôi nhận được lỗi trong kịch bản Nant của tôi nói rằng:

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() 

Tôi đã tìm kiếm trên mạng và đã phát hiện ra rằng trong một diễn đàn nó đã được đề xuất rằng tôi cần cài đặt Microsoft SQL Server Native Client và got it from this URL. (Phải thừa nhận rằng, tôi chỉ cài đặt phần Native Client)

Mặc dù cài đặt này được cài đặt trên PC thứ hai của tôi, tập lệnh vẫn cho tôi lỗi tương tự. Bất kỳ đề xuất?

+0

Đã hoạt động ... Bạn đã thử khởi động lại máy chưa? –

+1

Bất kỳ lý do cụ thể nào tại sao bạn sử dụng nhà cung cấp OleDB từ .Net? Sử dụng nhà cung cấp SqlClient, nó không yêu cầu bất kỳ trình điều khiển được cài đặt, tất cả mọi thứ tàu với. –

+0

Ông có thể chỉ muốn sự linh hoạt của văn bản cho một cái gì đó khác hơn là SQL Server nếu cần thiết. – SqlRyan

Trả lời

21

Nhà cung cấp chính xác cho SQL Server 2008 là SQLNCLI10.1.
Đối với SQL Server 2012, có thể là SQLNCLI11. (source)

Đáng buồn thay, sự di cư đến năm 2008 đã không nhận sự thay đổi ...

+0

Bạn đã đúng! Chuỗi kết nối cần thiết để tham chiếu đến SQLNCL10 và không phải là SQLNCLI mà tôi có trong kịch bản lệnh. Đẹp nhất. –

+1

Brett, bạn đã nói SQLNCL10 thay vì SQLNCLI10 đúng. Có lẽ là lỗi đánh máy, nhưng tôi đã cắt và dán nó :-( –

+0

Đã chỉnh sửa để xóa sạch một chút. Tôi không thể tìm thấy danh sách nhà cung cấp có thẩm quyền. Một số người trên internet đề xuất ** 'SQLNCLI11.1' ** cũng hoạt động cho năm 2012. – Kobi

4

Nó có thể là một vấn đề với x86/x64? Nếu trạm làm việc được đề cập là x64 và bạn đã cài đặt phiên bản x64 của máy khách, nhưng ứng dụng bạn đang cố gắng chạy trong không gian x86, bạn có thể cần phiên bản x86 của máy khách trên máy trạm đó. Một ứng dụng x86 sẽ chỉ kiểm tra phiên bản x86 của nhà cung cấp, và không thấy phiên bản nào, sẽ đưa ra lỗi như thế này. Phiên bản x64 có lẽ đủ thông minh để kiểm tra phiên bản, mặc dù có thể bạn sẽ có cùng một tình huống. Điều này cũng xảy ra với ODBC - x86 và x64 nguồn dữ liệu không có sẵn cho các loại khác của ứng dụng - nếu bạn muốn một cái gì đó để được nhìn thấy từ cả hai xây dựng các ứng dụng, bạn sẽ cần phải tạo một nguồn ODBC trong mỗi công cụ quản trị của từng phiên bản.

+0

Máy tính cá nhân là các máy 64bit, vì vậy bạn có thể đang ở một nơi nào đó ... Tôi sẽ phải điều tra thêm! –