我正在尝试使用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
任何人都可以给我和指针
提前致谢 文斯
答案 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