OLEDB,ODBC,Ntext和Nvarchar(最大值)

时间:2016-07-27 09:23:32

标签: vbscript asp-classic

据我所知,Microsoft在2011年决定弃用OLE DB,并且除了SQL Native Client V11之外不会发生新的驱动程序或维护。将来你应该使用基于ODBC的驱动程序 - http://weblogs.sqlteam.com/dang/archive/2011/09/04/rip-ole-db.aspx

最新的ODBC驱动程序是2016年7月25日发布的“用于SQL Server的Microsoft ODBC驱动程序13” - https://www.microsoft.com/en-us/download/details.aspx?id=50420

Native Client V9,10,11和Microsoft ODBC驱动程序SQL Server V11和13中的ODBC驱动程序都在与SQL服务器交互的经典ASP代码中工作(我使用的是SQL 2012),除了一个问题 - nText和Nvarchar(max )。

他们只是返回空白 - 我已经看到解决方案说你应该首先读入局部变量而不是直接寻址记录集,例如varStr = rs(“LargeText”),但这对我不起作用。还有其他提到使用get chunk等。

但我很高兴使用Native Client V9(Provider = SQLNCLI),它与这些数据类型完美配合。

所以,我的问题是:

有没有让ODBC驱动程序使用nText / Nvarchar(max)数据类型?

在OLEDB上使用ODBC有什么好处吗?

我是否需要在某个阶段升级到ODBC以便将来连接到SQL服务器,即SQL 2014/2016?

换句话说,我可以继续使用OLEDB吗?

好的,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]是SQL中的NVARCHAR(Max)字段。这不能使用本机客户端ODBC({SQL Server Native Client 11.0}),但将使用OLE DB(SQLNCLI11)。

2 个答案:

答案 0 :(得分:0)

您是否尝试使用driver={SQL Server};...?它适用于我但有问题。您需要读入局部变量,因为如果您再次尝试使用它,它将返回null。

请参阅以下代码:

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

答案 1 :(得分:0)

您可以将字段大小从varchar(MAX)更改为设置大小。如果无法更改数据库中的大小,则可以转换select语句,它将与ODBC驱动程序13一起使用。