2016-04-06 11 views
0

Ich versuche, eine Speicherprozedur in Visual Basic von einer DB2-Datenbank aufzurufen. Ich möchte die Eingabe von einer Variablen als einen Parameter aus meinem Visual Basic-Code senden und die Ausgaben nehmen und sie in Variablen in meinem VB-Code einfügen. Hier ist mein Speicher-Prozedur-Code:Wie Sie eine gespeicherte DB2-Prozedur mit Visual Basic aufrufen?

CREATE PROCEDURE VendorPROCEDURE (IN p_vendor_name VARCHAR(50), 
           OUT p_name VARCHAR(25), 
           OUT p_company_name VARCHAR(50), 
           OUT p_address VARCHAR(25), 
           OUT p_csz VARCHAR(50), 
           OUT p_phone CHAR(13)) 
DYNAMIC RESULT SETS 1 
P1: BEGIN 
DECLARE v_name VARCHAR(25); 
DECLARE v_company_name VARCHAR(50); 
DECLARE v_address VARCHAR(25); 
DECLARE v_csz VARCHAR(50); 
DECLARE v_phone CHAR(13); 

SELECT RTRIM(REP_F_NAME || ' ' || REP_L_NAME), COMPANY_NAME, STREET, 
RTRIM(CITY || ', ' || STATE || ' ' || VENDOR.ZIP_CODE) AS CSZ, PHONE_NUM 
INTO v_name, v_company_name, v_address, v_csz, v_phone 
FROM SALES_REP, VENDOR, ZIP 
WHERE SALES_REP.REP_NUM = VENDOR.REP_NUM 
AND ZIP.ZIP_CODE = VENDOR.ZIP_CODE 
AND COMPANY_NAME = p_vendor_name; 

SET p_name = v_name; 
SET p_company_name = v_company_name; 
SET p_address = v_address; 
SET p_csz = v_csz; 
SET p_phone = v_phone; 

END P1 

In meinem VB-Code Ich bin IBM.Data.DB2 importieren und hier ist der Code, ich habe bisher:

Dim vendorName As String 
    vendorName = Vendor_ComboBox.Text 
    cmd = connectionstring.CreateCommand() 
    connectionstring.Open() 
    Dim trans As DB2Transaction = connectionstring.BeginTransaction() 
    cmd.Transaction() = trans 
    Dim reader As DB2DataReader 
    Dim procName As String = "VENDORPROCEDURE" 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = procName 

Ich bin nicht sicher, wo geh von dort.

+0

Gehen Sie von hier? Versuchen Sie, 'cmd.Execute' hinzuzufügen. Außerdem unterscheidet sich VB von VBA. Letzteres läuft hauptsächlich in MS Office-Produkten. Bitte markieren Sie entsprechend. – Parfait

+0

fügen Sie Ihre Parameter zuerst hinzu param = new sqlparameter ("p_vendor_name", ) param.direction = Geben Sie cmd.parameters.add (param) ein und ändern Sie die Richtung für Ausgabeparameter –

Antwort

0

Von dort würden Sie so etwas tun:

cmd.Parameters.Add("p_vendor_name", DB2DbType.VarChar, 50).Value = vendorName 
cmd.Parameters.Add("p_name", DB2DbType.VarChar, 25).Direction = ParameterDirection.Output 
'Etc.' 
reader = cmd.ExecuteReader() 

Sie können dann die Ergebnismenge der Abfrage Zeile für Zeile mit, dass die Daten-Lesegerät gelesen. Sie könnten dies tun:

If reader.HasRows Then 
    'Read the data here.' 
Else 
    'There is no data so act accordingly here.' 
End If 

oder Sie können dies nur tun:

While reader.Read() 
    'Get data from current row of reader by column name or ordinal here.' 
End While 

Im zweiten Fall, Read kehrt False, wenn es keine Daten mehr so ​​zu lesen, wenn es keine Zeilen, Es wird nichts passieren, da du nie in die Schleife kommst.