【问题标题】:How to call a DB2 stored procedure using Visual Basic?如何使用 Visual Basic 调用 DB2 存储过程?
【发布时间】:2016-04-06 23:47:52
【问题描述】:

我正在尝试从 DB2 数据库调用 Visual Basic 中的存储过程。我想将变量的输入作为我的 Visual Basic 代码中的参数发送并获取输出并将它们放入我的 VB 代码中的变量中。这是我的存储过程代码:

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

在我的 VB 代码中,我正在导入 IBM.Data.DB2,这是我目前拥有的代码:

    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

我不知道从那里去哪里。

【问题讨论】:

  • 从这里走?尝试添加cmd.Execute。此外,VB 与 VBA 不同。后者主要在 MS Office 产品中运行。请相应地标记。
  • 首先添加你的参数 param = new sqlparameter("p_vendor_name", ) param.direction = Input cmd.parameters.add(param),等等,改变输出参数的方向

标签: database vb.net stored-procedures db2


【解决方案1】:

从那里你会做这样的事情:

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()

然后,您可以使用该数据阅读器逐行读取查询的结果集。你可以这样做:

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

或者你可以这样做:

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

在第二种情况下,Read 在没有更多数据要读取时返回False,因此,如果没有行,则不会发生任何事情,因为您永远不会进入循环。

【讨论】:

    猜你喜欢
    • 2011-03-08
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多