この記事は公開から3年以上経過しています。
Microsoft SQLServerとADO.NET(C#)で、ストアドプロシージャのパラメータ出力を取得する方法。
ストアドプロシージャ
CREATE
OR ALTER PROCEDURE TESTPROC @IN_NUM INTEGER,
@OUT_NUM INTEGER OUTPUT,
@IN_TXT NVARCHAR(4000),
@OUT_TXT NVARCHAR(4000) OUTPUT AS
BEGIN
SET
@OUT_NUM = @IN_NUM * 2
SET
@OUT_TXT = N'"' + @IN_TXT + N'"'
END
動作検証用サンプルソースコード(C#)
internal sealed class Program
{
// 文字列型の出力パラメーターで受け取る最大文字数
private const int NVARCHAR_MAX = 4000;
private static void Main(string[] args)
{
using (var con = new SqlConnection("Server=localhost;Database=TestDB;Integrated Security=true;"))
{
// ストアドプロシージャ(出力パラメーターにはOUTPUTキーワードを付加)
var sql =
@"
TESTPROC
@IN_NUM,
@OUT_NUM OUTPUT,
@IN_TXT,
@OUT_TXT OUTPUT
";
con.Open();
using (var cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add(new SqlParameter("@IN_NUM", SqlDbType.Int) { Value = 2 });
cmd.Parameters.Add(new SqlParameter("@OUT_NUM", SqlDbType.Int) { Direction = ParameterDirection.Output });
cmd.Parameters.Add(new SqlParameter("@IN_TXT", SqlDbType.NVarChar) { Value = "TEST" });
// 文字列型出力パラメーター
cmd.Parameters.Add(new SqlParameter("@OUT_TXT", SqlDbType.NVarChar) { Direction = ParameterDirection.Output, Size = NVARCHAR_MAX });
cmd.ExecuteNonQuery();
Console.WriteLine($"OUT_NUM={cmd.Parameters["@OUT_NUM"].Value}, OUT_TXT={cmd.Parameters["@OUT_TXT"].Value}");
}
Console.ReadKey();
}
}
}
出力結果
OUT_NUM=4, OUT_TXT="TEST"
ストアドプロシージャTESTPROC
は第1パラメーターの数値を2倍した値を第2パラメーターに出力、第3パラメーターの文字列をダブルクォーテーションで括った値を第4パラメーターに出力します。
ポイントは、
- ストアドプロシージャ呼び出しの出力パラメーターに
OUTPUT
キーワードの付加が必要。 - 文字列型やバイナリ型を出力するパラメーターはSqlParameterのSizeプロパティに受け取る事ができる最大文字数やバイト数の設定が必要。
です。
参考ウェブサイトなど
Microsoft Docs
ストアド プロシージャからデータを返す
Microsoft Docs
SqlParameter.Size プロパティ
以上です。