2

コードが以下に示すように、データベーステーブル(oracle 11)に行を挿入し、挿入された行の文字列値を返します。

using (OracleCommand cmd = con.CreateCommand()) {
    cmd.CommandText = "insert into foo values('foo','bar') returning idString into :lastIdParam";
    cmd.Parameters.Add(new OracleParameter("lastIdParam", OracleDbType.Varchar2), ParameterDirection.ReturnValue);
    cmd.ExecuteNonQuery();  // returning 1 (insert row successfully)

    var result = cmd.Parameters["lastIdParam"].Value.ToString();   // == String.Empty
}

デバッグすると、lastIdParam.Valueの値= Empty.String: ここに画像の説明を入力してください

私の問題は、return文字列をreturn-parameterに取得していないことですが、整数値(挿入されたIDのシーケンス番号など)を返す場合は機能します。キャストの問題?...?

ステートメントを直接実行する場合(または、次のようなことを行う場合)、idStringが入力されます。returning 'ABC' into :myOutputParameter

行を挿入した後に文字列を取得する方法はありますか?

4

2 に答える 2

3

パラメータのサイズを設定してみましたか?デフォルトのサイズは0です。

new OracleParameter("lastIdParam", OracleDbType.Varchar2, 128)
于 2012-12-21T16:18:51.347 に答える
0

これidStringは、テーブルの列名でない限り、コンテキストで値を持たない式です。したがって、空であると予想されます。以下の例のようにクエリを変更して、何が起こるかを確認できます。

cmd.CommandText = "insert into foo values('foo','bar') returning hereYouHaveToUseAColumnFromTheFooTable into :lastIdParam";
于 2012-12-21T16:22:07.967 に答える