我有一个使用 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 具有正确的字符串值:
我在调试器中迈出了一步,看到了这一点。值(value)没了。请注意,字段“_Account”仍然完好无损(它定义为 varchar(100)):
最佳答案
您遇到的问题是 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/