0

Sybase をバックエンドとして使用するアプリケーションと統合しようとしています。アプリケーションには、次の主キーを返すためのストアド プロシージャがあります。

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

上記を SQL Interactive から実行すると、@key に値が返されます。ここで、ストアド プロシージャを実行し、VB から戻り値を取得する必要があります。最初は、SQLコマンドを1行のステートメントに再フォーマットしてストアドプロシージャを実行する方法が必要だと思っていましたが、他の投稿を読んだ後、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

誰でも私とポインタを与えることができます

前もってありがとうヴィンス

4

2 に答える 2

0

質問に書かれたテキストがストアド プロシージャに含まれている場合は、パラメータを渡す必要はありません。
@Key変数の内部宣言であり、パラメーターではありません。
DataReader によって、1 つの列を持つ 1 つの行のテーブルとして返されます。
パラメータを追加する行を削除するだけで問題ありません。

そして、そのように例外を飲み込まないでください。例外で何かをする予定がない場合は、Catch を削除するか、(デバッグ目的で) ex.Message プロパティを表示するだけです。

于 2013-10-01T13:40:57.333 に答える
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
于 2013-10-08T15:26:27.383 に答える