使用VB返回执行Sybase SQL存储过程

时间:2013-10-01 13:20:10

标签: sql vb.net stored-procedures sybase

我正在尝试使用Sybase作为后端与应用程序集成。应用程序有一个存储过程,用于返回下一个主键:

declare @key int
execute @key = GetNextPrimary('quotehdr')
select @key

如果我从SQL Interactive @key执行上述操作,则返回值。现在我需要执行存储过程并从VB获取返回的值。最初我认为必须有一种方法可以通过将SQL命令重新格式化为单行语句来执行存储过程,但是在阅读其他帖子之后很明显我需要使用CommandType.StoredProcedure方法但是我正在努力学习语法参数和获得响应:

    Try
        conn.Open()
        cmd.Connection = conn
        cmd.CommandText = "GetNextPrimary"
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@key", "quotehdr")
        Dim lrd As Odbc.OdbcDataReader = cmd.ExecuteReader()
        While lrd.Read()
            QuoteHdrRef = Convert.ToString(lrd(0))
        End While
    Catch ex As Exception
        'MessageBox.Show("Failed to connect to data source")
    Finally
        conn.Close()
    End Try

任何人都可以给我和指针

提前致谢 文斯

2 个答案:

答案 0 :(得分:0)

如果存储过程中包含您问题中的文字,则无需传递任何参数 @Key是变量的内部声明,它不是参数 它由DataReader返回为具有单列的单行表 只需删除添加参数的行即可。

不要以这种方式吞下例外。如果您不打算对异常执行某些操作,则删除Catch或(出于调试目的)只显示ex.Message属性

答案 1 :(得分:0)

原来GetNextPrimary是一个函数。所以使用一个过程(getnextprimaryproc)来调用函数:

ALTER PROCEDURE "DBA"."getnextprimaryproc"(in tablename varchar(128),out ll_primary integer)
begin
ll_primary=call "dba".getnextprimary(tablename)
end

然后在VB中使用以下内容来调用

cmd.Connection = conn
cmd = New Odbc.OdbcCommand("{ call getnextprimaryproc (?, ?)}", conn)
Dim param As Odbc.OdbcParameter = cmd.Parameters.Add("@tablename", Odbc.OdbcType.VarChar)
param.Value = "quotehdr"
param = cmd.Parameters.Add("@ll_primary", Odbc.OdbcType.Int)
param.Direction = ParameterDirection.Output
conn.Open()
cmd.ExecuteNonQuery()
QuoteHdrRef = cmd.Parameters(1).Value