为什么数据提供程序或其他服务返回E_FAIL状态?SQL 本机客户端



我正在切换我们的ASP代码以使用SQL Native Client,以便我们可以连接到具有故障转移伙伴的镜像数据库,因为您只能在SQL Native Client中提供故障转移伙伴参数。 当我运行一个返回带有 Driver={SQL Server} 的 nvarchar(max) 列的 proc 时,一切正常。 当我运行使用 Driver={SQL Server 本机客户端 10.0} 返回小列的 procs 时,工作正常。 只有当我尝试在使用 Driver={SQL Server 本机客户端 10.0} 时运行返回 nvarchar(max) 列的 proc 时;我收到错误。 一旦我们点击,错误就会发生

rs.Open cmdTemplate

所以我什至不是指专栏。 像这样设置 conn 字符串:

if bUseSQLNative then
        connString = "Driver={SQL Server Native Client 10.0}; Network=DBMSSOCN; server=" & rs("SERVER_NAME") & "," & rs("PORT_NUM") & ";database=" & rs("DATABASE_NAME")
        connString = connString & ";uid=" & rs("USER_NAME") & ";pwd=" & UnProtectValueEx(ConnSaltForDBPwd(), rs("CONNECTION_NAME"), rs("PASSWORD"))
    else
        connString = "Driver={SQL Server}; Network=DBMSSOCN; server=" & rs("SERVER_NAME") & "," & rs("PORT_NUM") & ";database=" & rs("DATABASE_NAME")
        connString = connString & ";uid=" & rs("USER_NAME") & ";password=" & UnProtectValueEx(ConnSaltForDBPwd(), rs("CONNECTION_NAME"), rs("PASSWORD"))
    end if 
    connString = connString & ";"

并像这样打开:

set rs = server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 3
rs.CursorType = 3
rs.CacheSize = 50
on error resume next
    rs.Open cmdTemplate

错误是:Microsoft 光标引擎 (0x800A0001)数据提供程序或其他服务返回E_FAIL状态。

在我的例子中,要保存的数据(字符串)大于指定的 nvarchr()。增加字段大小解决了这个问题<</p>

div class="one_answers">

我找到了。 我不得不使用

connString = "Provider=SQLNCLI10; DataTypeCompatibility=80;... 

数据类型兼容性使 nvarchar max 等映射回 ado 可以处理的格式。 由于某种原因,该参数在 Driver={SQL Server Native Client 10.0}; 中不起作用,仅在 Provider=SQLNCLI10

希望这会有所帮助。

最新更新