Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用新的MSOLEDBSQL连接到SQL Server 2019_Sql_Sql Server_Oledb_Sql Server 2019 - Fatal编程技术网

无法使用新的MSOLEDBSQL连接到SQL Server 2019

无法使用新的MSOLEDBSQL连接到SQL Server 2019,sql,sql-server,oledb,sql-server-2019,Sql,Sql Server,Oledb,Sql Server 2019,我正在将我的应用程序转换为使用SQL Server本机客户端11.0中的MSOLEDBSQL 我已将连接字符串从“Driver={SQL Server Native Client 11.0}”更改为“Provider=MSOLEDBSQL”,以及UID、PWD、服务器、数据库参数 但我无法连接到数据库,在使用SQL\u Driver\u COMPLETE时收到“[Microsoft][ODBC Driver Manager]对话框失败”错误消息 IM008 Dialog failed T

我正在将我的应用程序转换为使用SQL Server本机客户端11.0中的MSOLEDBSQL

我已将连接字符串从“Driver={SQL Server Native Client 11.0}”更改为“Provider=MSOLEDBSQL”,以及UID、PWD、服务器、数据库参数

但我无法连接到数据库,在使用SQL\u Driver\u COMPLETE时收到“[Microsoft][ODBC Driver Manager]对话框失败”错误消息

IM008   Dialog failed   The driver attempted to display its login dialog box and failed.

WindowHandle was a null pointer, and DriverCompletion was not SQL_DRIVER_NO_PROMPT.
类似地,当使用SQL\u驱动程序\u NOPROMPT时,它会抛出一个错误“[Microsoft][ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序”

调用SQLDriverConnect()会返回上述错误

我已经下载并安装了,可以在system32文件夹中看到二进制文件

根据MS文档,注册表设置将作为安装的一部分进行

All appropriate registry settings for the OLE DB Driver for SQL Server are made as part of the installation process. 
  • 为了使用MSOLEDBSQL驱动程序,我们应该进行任何额外的注册表配置或其他设置吗

  • 当我使用上面提到的Driver关键字时,它适用于本机客户端。但如果我使用“Provider=SQLNCLI11”,它就会失败。有什么想法吗

  • 我怀疑问题与加载驱动程序有关

    如果有人能帮助解决这个问题,我们将不胜感激


    提前感谢。

    根据错误提示,您是通过ODBC而不是OLE DB连接的。虽然可以使用Microsoft ODBC驱动程序包装OLE DB驱动程序,但不需要这样做,因为SQL Server也有一个,这是推荐的方法。使用OLE DB并连接
    MSOLEDBSQL
    驱动程序,或者使用ODBC并连接
    {ODBC driver 17 for SQL Server}
    。感谢您的回复Jeroen。您能否建议如何确认是否未拾取OLE DB驱动程序并选择ODBC。如何使用OLEDB驱动程序。我们是否需要对系统注册表或配置进行任何更改?如果您使用的是ODBC,那么您使用的是ODBC。如果您使用的是OLE DB,那么您将使用。这些是访问数据库的完全不同的API;大多数应用程序只支持其中一种。不能通过调整系统设置在图层之间进行更改。请为您正在使用的数据访问技术使用正确的驱动程序。@JeroenMostert可能需要实际检查OLE DB,以解决直接ODBC驱动程序无法正确处理的一些varchar(MAX)问题。我能够使用JSON等通过ODBC返回varchar(MAX)的新特性的唯一方法是通过
    Provider=MSDASQL;DRIVER={SQL Server}
    @CharlesOkwuagwu:假设您使用的是最新版本,驱动程序可能确实正确处理了它,但客户端软件没有准备好处理它。行为(正确地)将长度返回为“unlimited”,而以前的版本返回长度,这可能会导致其他问题。包装OLE DB驱动程序可能会“修复”这一问题,但会为没有底层支持的类型(如
    DATETIMEOFFSET
    )带来其他问题。根据错误提示,您是通过ODBC而不是OLE DB连接的。虽然可以使用Microsoft ODBC驱动程序包装OLE DB驱动程序,但不需要这样做,因为SQL Server也有一个,这是推荐的方法。使用OLE DB并连接
    MSOLEDBSQL
    驱动程序,或者使用ODBC并连接
    {ODBC driver 17 for SQL Server}
    。感谢您的回复Jeroen。您能否建议如何确认是否未拾取OLE DB驱动程序并选择ODBC。如何使用OLEDB驱动程序。我们是否需要对系统注册表或配置进行任何更改?如果您使用的是ODBC,那么您使用的是ODBC。如果您使用的是OLE DB,那么您将使用。这些是访问数据库的完全不同的API;大多数应用程序只支持其中一种。不能通过调整系统设置在图层之间进行更改。请为您正在使用的数据访问技术使用正确的驱动程序。@JeroenMostert可能需要实际检查OLE DB,以解决直接ODBC驱动程序无法正确处理的一些varchar(MAX)问题。我能够使用JSON等通过ODBC返回varchar(MAX)的新特性的唯一方法是通过
    Provider=MSDASQL;DRIVER={SQL Server}
    @CharlesOkwuagwu:假设您使用的是最新版本,驱动程序可能确实正确处理了它,但客户端软件没有准备好处理它。行为(正确地)将长度返回为“unlimited”,而以前的版本返回长度,这可能会导致其他问题。包装OLE DB驱动程序可能会“修复”这一问题,但会为没有底层支持的类型引入其他问题(如
    DATETIMEOFFSET
    )。
    All appropriate registry settings for the OLE DB Driver for SQL Server are made as part of the installation process.