【问题标题】:OLEDB, ODBC, Ntext and Nvarchar(max)OLEDB、ODBC、Ntext 和 Nvarchar(最大)
【发布时间】:2016-07-27 09:23:31
【问题描述】:

我了解 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 日发布的“Microsoft ODBC Driver 13 for SQL Server” - https://www.microsoft.com/en-us/download/details.aspx?id=50420

来自 Native Client V9、10、11 和 Microsoft ODBC Driver 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)。

【问题讨论】:

  • 即使使用 SQL 2014/2016 或未来的 SQL 版本?
  • 如果通过 ODBC 的 Native Client 不适合您,您可能正在使用 wrong connection string
  • 我认为 Native Client 版本以包含 OLE DB 和 ODBC 版本的 SQL Native Client 11(SQL 2012 版本)结束,可用的最新驱动程序是“Microsoft ODBC Driver 13 for SQL Server”,它是仅限 ODBC。
  • 你试过使用Microsoft ODBC Driver 13 for SQL Server吗?我可以确认我也无法使用{SQL Server Native Client 11.0} 访问nvarchar(max)Sounds like it maybe a known issue,现在最好继续使用SQLNCLI11

标签: vbscript asp-classic


【解决方案1】:

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

请看下面的代码:

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

【讨论】:

  • 根据将成为 SQL Server 2000 和 7.0 的原生客户端驱动程序的连接字符串:connectionstrings.com/sql-server-2000。看起来您在 Visual Basic 应用程序中使用它?您使用的是哪个提供程序 ODBC 包?令人惊讶的是,使用该驱动程序字符串确实在使用 SQL 2012 作为后端并安装了本机客户端 V9、10 和 11 的 ASP 应用程序中运行。但在尝试访问 nvarchar(max) 字段方面与其他 ODBC 驱动程序没有什么不同。
  • 但我不需要安装任何 SQL 客户端,因为它将使用 odbc32.dll 中的 Windows ODBC 驱动程序。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多