2016-07-27 24 views
5

Ich verstehe, dass Microsoft 2011 beschlossen hat, OLE DB abzulehnen und dass keine neuen Treiber oder Wartung über SQL Native Client V11 hinaus auftreten würde. In Zukunft sollten Sie ODBC-basierte Treiber verwenden - http://weblogs.sqlteam.com/dang/archive/2011/09/04/rip-ole-db.aspxOLEDB, ODBC, Ntext und Nvarchar (max)

Die neuesten ODBC-Treiber 'Microsoft ODBC-Treiber 13 für SQL Server' Veröffentlichung am 25. Juli 2016 sein - https://www.microsoft.com/en-us/download/details.aspx?id=50420

ODBC-Treiber von Native Client V9,10,11 und der Microsoft ODBC-Treiber SQL Server V11 und 13 arbeiten alle im klassischen ASP-Code, der mit dem SQL-Server interagiert (ich verwende SQL 2012), mit Ausnahme eines Problems - nText und Nvarchar (max).

Sie geben nur leer zurück - ich habe Lösungen gesehen, die sagen, dass Sie zuerst in eine lokale Variable lesen sollten, anstatt das Recordset direkt anzusprechen, z. varStr = rs ("LargeText"), aber das funktioniert nicht für mich. Und es gibt andere Erwähnungen der Verwendung von Get Chunk usw.

Aber ich bin ziemlich glücklich mit Native Client V9 (Provider = SQLNCLI), die perfekt mit diesen Datentypen funktioniert.

Also, meine Fragen sind:

mit nText/Nvarchar (max) Datentypen Gibt es trotzdem zu ODBC-Treiber erhalten zu arbeiten?

Gibt es einen Vorteil für die Verwendung von ODBC über OLEDB?

Muss ich irgendwann zu ODBC upgraden, um sich in Zukunft mit SQL Server zu verbinden, d. H. SQL 2014/2016?

Mit anderen Worten, kann ich weiter mit OLEDB weitermachen?


OK, Lankymart - würde ich so etwas wie folgt verwenden:

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 

Wo [pText] ist ein NVARCHAR (Max) Feld in SQL. Dies funktioniert nicht mit dem nativen Client ODBC ({SQL Server Native Client 11.0}), funktioniert aber mit OLE DB (SQLNCLI11).

+0

Auch mit SQL 2014/2016 oder zukünftige SQL-Versionen? –

+0

Sie verwenden wahrscheinlich die [falsche Verbindungszeichenfolge] (http://www.connectionstrings.com/sql-server-native-client-11-0-odbc-driver/), wenn Native Client über ODBC nicht für Sie arbeitet . – Lankymart

+0

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

Antwort

0

Haben Sie versucht, driver={SQL Server};... zu verwenden? Es funktioniert für mich aber mit einem Problem. Sie müssen in eine lokale Variable einlesen, denn wenn Sie versuchen, sie erneut zu verwenden, wird null zurückgegeben.

Siehe den Code unten:

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

Nach Verbindungszeichenfolgen, die der Pre-native Client-Treiber für SQL Server 2000 und 7.0 wäre: http://www.connectionstrings.com/sql-server-2000/. Scheint, dass Sie das in einer Visual Basic-App verwenden? Welches Provider-ODBC-Paket verwenden Sie? Überraschenderweise wird die Verwendung dieser Treiberzeichenfolge in einer ASP-Anwendung ausgeführt, die SQL 2012 als Back-End mit den installierten systemeigenen Clients V9, 10 und 11 verwendet. Aber nicht anders als die anderen ODBC-Treiber in Bezug auf den Zugriff auf nvarchar (max) Felder. –

+0

Ja, es funktioniert in VB App oder Classic ASP. –

+0

Ich muss jedoch keinen SQL-Client installieren, da der Windows-ODBC-Treiber in odbc32.dll verwendet wird. –

0

Sie können die Feldgröße von varchar (MAX) auf eine festgelegte Größe ändern. Wenn Sie die Größe in der Datenbank nicht ändern können, können Sie Ihre SELECT-Anweisung umwandeln und es wird mit ODBC-Treiber 13 funktionieren.

Verwandte Themen