18

我有一个基于 NAnt 的脚本,我在连接到 SQL Server 2008 Express 的本地 PC 上运行,该脚本也在我的本地 PC 上运行,以使用 .sql 文件删除和重新创建数据库 - 这工作正常,在这里没问题。

当我在另一台 PC 上重新创建相同的设置时,问题就出现了,我的 NAnt 脚本中出现以下错误:

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

我在网上搜索,发现在一个论坛上有人建议我需要安装 Microsoft SQL Server Native Client,并从这个 URL 获得它。(不可否认,我只安装了本机客户端部分)

尽管它安装在我的第二台 PC 上,但脚本仍然给我同样的错误。有什么建议么?

4

2 回答 2

22

SQL Server 2008 的正确提供程序是SQLNCLI10.1.
对于 SQL Server 2012,这将是SQLNCLI11. (资源)

可悲的是,迁移到 2008 年并没有改变...

于 2009-09-30T15:57:22.697 回答
4

会不会是 x86/x64 的问题?如果有问题的工作站是 x64,并且您已经安装了 x64 版本的客户端,但是您尝试运行的应用程序位于 x86 空间中,那么您可能还需要该工作站上的 x86 版本的客户端。x86 应用程序只会检查提供程序的 x86 版本,如果没有,则会给出类似这样的错误。x64 版本可能足够聪明,可以检查任一版本,尽管您可能会遇到相同的情况。

ODBC 也会发生同样的情况 - x86 和 x64 数据源对其他类型的应用程序不可用 - 如果您希望在两个应用程序版本中都可以看到某些内容,则需要在每个版本的管理工具中创建一个 ODBC 源.

于 2009-09-30T20:54:12.590 回答