Тип данных 0x23 является устаревшим большим объектом или большим объектом, но помечен как выходной параметр

Я пытаюсь получить varchar(max) выход param из stored procedure но я получаю ошибку выше, т.е. Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter когда я выполню SP в vb.net

Я пытался использовать 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

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 (длина) символов.

Другие вопросы по тегам