sql-server - 无法使用 ADODB 从 varchar(max) 读取数据

标签 sql-server vb.net adodb varcharmax

我有一个使用 ADODB 执行存储过程并将结果作为记录集读取的方法。一切都工作正常,直到我将输出字段之一从 varchar(2000) 更改为 varchar(max) (SQL2008)。现在我无法从该字段读取数据。奇怪的是,运行执行后,数据立即在调试器中可见,但是单步调试器会使数据消失。

这是代码:

Public Function sproc_RptEAComment(ByVal accountName As String, ByVal contractName As String,
                                            ByVal acctType As String, ByVal asOfDate As DateTime,
                                            ByVal sessionID As String, ByVal clin As String,
                                            ByVal dollarDisplay As String) As List(Of sproc_RptEAComment_Row) Implements ISprocRepository.sproc_RptEAComment
    Try

        Dim cmd = New Command()
        cmd.ActiveConnection = Connection
        cmd.CommandType = CommandTypeEnum.adCmdStoredProc
        cmd.CommandText = "sproc_RptEAComment"

        ADOUtilities.AddParamToSproc(cmd, "@ChargeNum", accountName)
        ADOUtilities.AddParamToSproc(cmd, "@Contract", contractName)
        ADOUtilities.AddParamToSproc(cmd, "@EmployeeName", "")
        ADOUtilities.AddParamToSproc(cmd, "@Org", acctType)
        ADOUtilities.AddParamToSproc(cmd, "@HoursVal", "TRUE")
        ADOUtilities.AddParamToSproc(cmd, "@Sort", "1")
        ADOUtilities.AddParamToSproc(cmd, "@Employer", "")
        ADOUtilities.AddParamToSproc(cmd, "@Type", "1")
        ADOUtilities.AddParamToSproc(cmd, "@FromD", asOfDate.ToShortDateString())
        ADOUtilities.AddParamToSproc(cmd, "@ToD", asOfDate.AddMonths(-5).ToShortDateString()) 
        ADOUtilities.AddParamToSproc(cmd, "@SessionID", sessionID)
        ADOUtilities.AddParamToSproc(cmd, "@Clin", clin)
        ADOUtilities.AddParamToSproc(cmd, "@RptDisplay", "")
        ADOUtilities.AddParamToSproc(cmd, "@Parm_DT", dollarDisplay)

        Dim lst = New List(Of sproc_RptEAComment_Row)
        Dim rs = cmd.Execute()
        While Not (rs.EOF)
            Dim newEntity = New sproc_RptEAComment_Row(rs)
            lst.Add(newEntity)
            rs.MoveNext()
        End While
        Return lst

    Catch ex As Exception
        MsgLogger.Err(ex)
        Return Nothing
    End Try
End Function

如果我在执行后立即查看调试器,我会看到这一点。请注意,字段 EacJustCom 具有正确的字符串值: enter image description here

我在调试器中迈出了一步,看到了这一点。值(value)没了。请注意,字段“_Account”仍然完好无损(它定义为 varchar(100)): enter image description here

最佳答案

您遇到的问题是 varchar(max) 最多可以容纳 2 GB 的数据。

在过去的 Visual Basic 和 DAO 时代,有一个方法调用 GetChunk() 来从二进制字段读取数据位,并调用 AppendChunk() 来写入位。使用二进制或文本文件流在客户端将数据重新组合在一起。

“在 Field 对象上使用 GetChunk 方法来检索其部分或全部长二进制或字符数据。”

请参阅MSDN引用。

这些字段的处理方式必须与常规记录集不同。将它们从您的记录集中排除。

查看这篇文章 Who is afraid of the big bad blob

由于开发环境如此之多,比如 xxx、ADO 或 ADO.NET,因此很难在没有更多信息的情况下指出您的特定问题。

如果这有帮助,请给我回信......

关于sql-server - 无法使用 ADODB 从 varchar(max) 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659969/

相关文章:

sql - 如何向 SQL Server 中已存在的列添加非空值?

c# - Log4Net 不写入数据库

vb.net - openxml Word 文档中的文本中心对齐

sql - 粘贴较大的多行字符串(大约1500行)后,Visual Studio 2010崩溃

vba - Azure PostgreSQL 的 SSL 连接字符串 - 正确的语法

PHP Adodb Active Record SQL 注入(inject)

sql-server - SQL Server,总是四舍五入

sql - 使用从列到两列的递归查询

vb.net - Lazy(Of T) 使用/初始化

stream - 如何在对象ADODB.Stream中写入空行?