3

我将我们的 ASP 代码切换为使用 SQL Native Client,以便我们可以连接到具有故障转移伙伴的镜像数据库,因为您只能在 SQL Native Client 中提供故障转移伙伴参数。当我运行一个返回带有 Driver={SQL Server} 的 nvarchar(max) 列的过程时,一切正常。当我使用 Driver={SQL Server Native Client 10.0} 运行返回小列的 procs 时,它工作正常。只有当我尝试运行一个在使用 Driver={SQL Server Native Client 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 状态。

4

3 回答 3

2

就我而言,要保存的数据(字符串)大于指定的 nvarchr()。增加字段大小解决了这个问题

于 2013-01-11T23:37:44.230 回答
1

我找到了。我不得不使用

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

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

于 2012-05-02T16:19:58.573 回答
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  

希望这会有所帮助。

于 2013-11-27T09:59:30.767 回答