2016-06-23 4 views
0

Ich versuche, eine varchar(max) Ausgabe param von einem stored procedure zu erhalten, aber ich bin immer den Fehler oben, dh Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter, wenn ich die SP ausführen in vb.netDatentyp 0x23 ist ein veraltet großes Objekt oder LOB, sondern als Ausgangsparameter markiert

habe ich SQLNCLI11 Verbindungszeichenfolge versucht, mit, kein Glück ich versucht habe Einstellung Datatypecompatibility=80, kein Glück

dank im Voraus.

hier sind meine Codes:

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 

Antwort

0

Ok, ich habe mein Problem gelöst.

Zuerst habe ich gesetzt Cursor zu 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() 

Dann wird für den Ausgabeparameter Datentyp, habe ich AdBSTR

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

Alles funktioniert gut danach verwendet!

Übrigens erhalte ich 18.255 (Länge) Zeichen.

Verwandte Themen