【问题标题】:Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter数据类型 0x23 是不推荐使用的大对象或 LOB,但被标记为输出参数
【发布时间】:2016-10-25 04:51:33
【问题描述】:

我正在尝试从stored procedure 接收varchar(max) 输出param,但是当我在vb.net 中执行SP 时出现上述错误,即Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter

我尝试过使用SQLNCLI11 连接字符串,没有运气 我试过设置Datatypecompatibility=80,没有运气

提前致谢。

这是我的代码:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles     Button1.Click
    Dim cmd As ADODB.Command
    Dim Rs As ADODB.Recordset
    Dim prm As ADODB.Parameter
    Dim db As New ADODB.Connection
    Dim PromoRejectDesc As String = ""

    db.ConnectionString = "Provider=SQLNCLI11;UID=user;Pwd=password;Database=POSData;Server=localhost;DataCompatibility=80;MARS Connection=True"

    db.Open()

    cmd = New ADODB.Command
    cmd.ActiveConnection = db
    cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
    cmd.CommandText = "DBO.proc_PromoRejectingFactors"

    prm = cmd.CreateParameter("@CustID", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput)
    prm.Value = 1050009326
    cmd.Parameters.Append(prm)
    prm = cmd.CreateParameter("@BranchID", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput)
    prm.Value = 101
    cmd.Parameters.Append(prm)
    prm = cmd.CreateParameter("@FulfillmentChannel", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput)
    prm.Value = 1
    cmd.Parameters.Append(prm)
    prm = cmd.CreateParameter("@Tender", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput)
    prm.Value = 0
    cmd.Parameters.Append(prm)

    prm = cmd.CreateParameter("@CreditCard", ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput)
    prm.Value = -1
    cmd.Parameters.Append(prm)

    prm = cmd.CreateParameter("@ExcludePromo", ADODB.DataTypeEnum.adVarChar, ADODB.ParameterDirectionEnum.adParamInput, 1000)
    prm.Value = ""
    cmd.Parameters.Append(prm)

    prm = cmd.CreateParameter("@PromoRejectDesc", ADODB.DataTypeEnum.adLongVarChar, ADODB.ParameterDirectionEnum.adParamOutput, 9999)
    cmd.Parameters.Append(prm)

    Rs = cmd.Execute
    If Rs.State = 1 Then
        PromoRejectDesc = prm.Value
        MsgBox(PromoRejectDesc)
    End If
End Sub

【问题讨论】:

    标签: stored-procedures adodb lob varcharmax


    【解决方案1】:

    好的,我的问题已经解决了。

    首先,我将 CursorLocation 设置为 adUseClient

    db.ConnectionString = "Provider=SQLNCLI11;UID=user;Pwd=password;Database=POSData;Server=localhost;DataCompatibility=80;MARS Connection=True"
    db.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    db.Open()
    

    然后,对于输出参数数据类型,我使用了 adBStr

    prm = cmd.CreateParameter("@PromoRejectDesc", ADODB.DataTypeEnum.adBSTR, ADODB.ParameterDirectionEnum.adParamOutput, 999999)
        cmd.Parameters.Append(prm)
    

    之后一切正常!

    顺便说一下,我收到了 18,255 个(长度)字符。

    【讨论】:

    • 我只需要adBSTR 就可以让我的工作。谢谢!
    猜你喜欢
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2020-07-10
    • 2020-08-02
    • 2021-04-17
    • 2017-08-08
    • 1970-01-01
    相关资源
    最近更新 更多