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

问题描述 投票:0回答:4

我将我们的 ASP 代码切换为使用 SQL Native Client,以便我们可以连接到具有故障转移伙伴的镜像数据库,因为您只能在 SQL Native Client 中提供故障转移伙伴参数。 当我运行一个返回 nvarchar(max) 列且 Driver={SQL Server} 的过程时,一切正常。 当我运行返回小列的过程时 Driver={SQL Server Native Client 10.0} 工作正常。 仅当我尝试运行一个在使用 Driver={SQL Server Native Client 10.0}; 时返回 nvarchar(max) 列的过程时才会出现此问题。我得到了错误。 一旦我们点击就会出现错误

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

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

sql-server-2008 asp-classic vbscript ado
4个回答
2
投票

在我的例子中,要保存的数据(字符串)大于指定的 nvarcr()。 增加字段大小解决了问题


1
投票

我找到了。 我不得不使用

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

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


0
投票

使用参考MSADO 6.1库,然后构建数据环境来连接数据库并建立要使用的记录集,如下所示:

 mydata = is a data environment with the connection to the database
 getItemRec = is the query or command inside the mydata
 myRecSet = is a Recordset Variable.

代码如下:

 myData.Commands("getItemRec").CommandText = "Select * from myTable"
 myData.getItemRec

 Set myRecSet = myData.rsgetItemRec

 With myRecSet       
      If .RecordCount <> 0 Then .MoveNext
      Do While .EOF = False
            ....
            ....
          .movenext
      Loop
 end With  

希望这会有所帮助。


0
投票

就我而言,将数据显式转换为“nvarchar”解决了问题。数据以阿拉伯语排序规则输入

© www.soinside.com 2019 - 2024. All rights reserved.