2016-06-23 2 views
0

Je suis en train de recevoir une varchar(max) sortie param d'un stored procedure mais je reçois l'erreur ci-dessus, à savoir Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter quand j'exécute la SP dans vb.netType de données 0x23 est un objet grand dépréciée, ou LOB, mais est marqué comme paramètre de sortie

J'ai essayé d'utiliser la chaîne de connexion SQLNCLI11, pas de chance J'ai essayé la mise Datatypecompatibility=80, pas de chance

merci à l'avance.

voici mes 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 

Répondre

0

Ok, je l'ai résolu mon problème.

D'abord, j'ai mis 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() 

Ensuite, pour le paramètre de sortie type de données, je l'ai utilisé adBSTR

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

Tout fonctionne bien après ça! Par ailleurs, je reçois 18 255 caractères (longueur).