2016-07-27 2 views
5

Я понимаю, что Microsoft решила еще в 2011 году отказаться от OLE DB и что никаких новых драйверов или обслуживания не произойдет за пределами собственного клиента V11 VX. В будущем вы должны использовать ODBC драйверов на основе - http://weblogs.sqlteam.com/dang/archive/2011/09/04/rip-ole-db.aspxOLEDB, ODBC, Ntext и Nvarchar (макс.)

Последняя версия драйвера ODBC является 'Microsoft ODBC Driver 13 для SQL Server' выпуска 25 июля 2016 года - https://www.microsoft.com/en-us/download/details.aspx?id=50420

драйверы ODBC от Native Client V9,10,11 и драйвер Microsoft ODBC SQL Server V11 и 13 все работают в классическом ASP-коде, взаимодействующем с SQL-сервером (я использую SQL 2012), за исключением одной проблемы - nText и Nvarchar (max).

Они просто возвращают пустое - я видел решения, в которых вы должны сначала прочитать локальную переменную, а не обращаться к набору записей непосредственно, например. varStr = rs ("LargeText"), но это не работает для меня. И есть другие упоминания об использовании get chunk и т. Д.

Но я довольно счастливо использую собственный клиент V9 (Provider = SQLNCLI), который отлично работает с этими типами данных.

Итак, мои вопросы:

Есть в любом случае, чтобы получить ODBC драйверов, работающих с NTEXT/NVARCHAR (макс) типов данных?

Есть ли какая-либо польза от использования ODBC над OLEDB?

Должен ли я наращивать до ODBC на каком-то этапе, чтобы подключиться к SQL-серверу в будущем, то есть SQL 2014/2016?

Другими словами, могу ли я просто продолжать использовать OLEDB в будущем?


OK, Lankymart - Я хотел бы использовать что-то вроде этого:

Set oConn = Server.CreateObject("ADODB.Connection") 
oConn.Open "Driver={SQL Server Native Client 11.0};Server=*Yourserver*;Database=*YourDatabase*;User ID=*YourUserid*;Password=*YourPassword*;" 
'oConn.Open "Provider=SQLNCLI11;Server=*YourServer*; Database=*YourDatabase*;User ID=*YourUserID*;Password=*YourPassword*;" 
set view=oConn.Execute("SELECT [PText] FROM [TextTest]") 
ttext=view("PText") 
response.write(ttext) 
view.Close 
set view = Nothing 
oConn.Close 
set oConn = Nothing 

Где [PText] является NVARCHAR (Макс) поле в SQL. Это не работает с использованием собственного клиента ODBC ({SQL Server Native Client 11.0}), но будет работать с использованием OLE DB (SQLNCLI11).

+0

Даже с SQL 2014/2016 или будущими выпусками SQL? –

+0

Возможно, вы используете [неправильную строку подключения] (http://www.connectionstrings.com/sql-server-native-client-11-0-odbc-driver/), если Native Client через ODBC не работает для вас , – Lankymart

+0

https://msdn.microsoft.com/en-us/library/ms131267(v=sql.110).aspx – Lankymart

ответ

0

Вы пытались использовать driver={SQL Server};...? Это работает для меня, но с проблемой. Вам нужно прочитать локальную переменную, потому что если вы попытаетесь использовать ее снова, она вернет значение null.

Смотрите ниже код:

Print rs!varcharmaxVariable 'Returns ok 
Print rs!varcharmaxVariable 'Returns null 
... 
+0

В соответствии со строками подключения, которые были бы предварительным драйвером клиента для SQL Server 2000 и 7.0: http://www.connectionstrings.com/sql-server-2000/. Похоже, вы используете это в приложении Visual Basic? Какой пакет ODBC поставщика вы используете? Удивительно, но использование этой строки драйвера выполняется в приложении ASP с использованием SQL 2012 в качестве бэкэнд с установленными V9,10 и 11 с собственными клиентами. Но не отличается от других драйверов ODBC в отношении попыток доступа к полям nvarchar (max). –

+0

Да, он работает в приложении VB или в классическом ASP. –

+0

Но мне не нужно устанавливать какой-либо SQL-клиент, так как он будет использовать драйвер ODBC Windows в файле odbc32.dll. –

0

Вы можете изменить размер поля от VARCHAR (MAX) до заданного размера. Если вы не можете изменить размер базы данных, вы можете сделать свой выбор, и он будет работать с драйвером ODBC 13.

Смежные вопросы