Вопрос по sql-server-2008, asp-classic, vbscript – Почему я получаю, что провайдер данных или другой сервис вернули статус E_FAIL? Собственный клиент SQL

2

Я переключаю наш ASP-код на использование собственного клиента SQL, чтобы мы могли подключаться к зеркальной базе данных с партнером по отказоустойчивости, поскольку параметры партнера по отказоустойчивости можно указать только в собственном клиенте SQL. Когда я запускаю процесс, который возвращает столбец nvarchar (max) с Driver = {SQL Server}, все работает нормально. Когда я запускаю проки, которые возвращают маленькие столбцы с Driver = {SQL Server Native Client 10.0}, это прекрасно работает. Это только когда я пытаюсь запустить процедуру, которая возвращает столбец nvarchar (max) при использовании Driver = {SQL Server Native Client 10.0}; что я получаю ошибку. Ошибка происходит, как только мы нажмем

<code>rs.Open cmdTemplate
</code>

Так что я даже не ссылаюсь на столбец. Установка строки conn так:

<code>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 & ";"
</code>

И открытие так:

<code>set rs = server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 3
rs.CursorType = 3
rs.CacheSize = 50

on error resume next
    rs.Open cmdTemplate
</code>

Ошибка: Microsoft Cursor Engine (0x800A0001) Поставщик данных или другой сервис вернул статус E_FAIL.

Это определенно связано. Если я добавлю приведение (SEND_TEXT как ntext) [SEND_TEXT] в сохраненный процесс, то он будет работать без ошибок. Так что-то с типами данных ADO, а ntext и nvarchar (max) выглядят по-разному? Brian White
Я обнаружил, что другие также сообщали об этой проблеме. Он не уникален для ASP classic. Похоже, что это ограничение поставщика или драйвера, которое также влияет на Visual Foxpro.bsslimited.com/articles/classic-asp-and-sql-server-2008 а такжеconnect.microsoft.com/SQLServer/feedback/details/467300/… HK1
social.msdn.microsoft.com/forums/en-US/sqldataaccess/thread/… - возможно связано? Но это были входные параметры. Это просто выбор столбца, который является nvarchar (max). Brian White

Ваш Ответ

3   ответа
2

которые нужно сохранить (строка), были больше указанного nvarchr (). Увеличение размера поля решило проблему

1

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

DataTypeCompatibility делает карту nvarchar max и т. Д. Обратно в форматы, которые может обрабатывать ado. И по какой-то причине этот параметр не вступает в силу с Driver = {Собственный клиент SQL Server 10.0}; только с Provider = SQLNCLI10

0

а затем создайте среду данных для подключения к базе данных и установите набор записей, который будет использоваться следующим образом:

 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  

Надеюсь, это поможет.

Похожие вопросы