EXECを使用してストアドプロシージャを実行できます(C#でCommandType.StoredProcedure
を指定しない)結果を得ることができますか?クエリでストアドプロシージャを呼び出し、出力パラメータなしでC#で戻り値を取得する
私は、クエリ
DECLARE @R int
EXEC @R = proc p1, p2
、その後@Rをつかむが、成功せずにすることを実行しようとしました。
私が望まないのは、パラメータを追加し、ParameterDirection.ReturnValue
を使用して結果を得ることです。
私はどんな情報もありがとう。 Ty。
EDIT
一部の人々は、なぜ尋ねました。
私はストアドプロシージャを実行し、それが返すあらゆる種類の結果を得る小さなコンソールプログラムを作成する必要があります。このアプリケーションはデータベースのconnとspの名前の説明を含む.configファイルを受け取ります。
私はそれを普通のやり方でやっていますが、私は各パラメータの設定が必要です。あるいは、コールが通常のクエリフォーマットで指定されている場合、私はそれを自分で解析する必要があります。ユーザーはパラメータの詳細などを知る必要があります。
私はexecの方法を選んだのですがユーザーは、1つのキーの下で設定ファイルのストアドプロシージャとパラメータを指定できます。
<add key="Procedure" value="dbo.TEST 10,20"/>
とはあまり考えていません。そのようなプログラムで作業する人は、プログラミングのことを理解していない、彼らは引数としてテキストを入れる必要があることを知っている(つまり、暗黙の変換はミステリーです)
プログラムは一般的にinital設定存在していなくても、注入検査に関係するものであってもSPレベルに移行することができます。
実装OFCは些細次のようになります。
const string runFormat = "exec ('declare @r varchar (1024);EXEC @r={0}{1};select @r')";
public bool Run(string parameters, out string result) {
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmnd = new SqlCommand(String.Empty, con);
cmnd.CommandText = String.Format(runFormat, storedProcedure, parameters ?? String.Empty);
try {
con.Open();
result = (string)cmnd.ExecuteScalar();
}
catch (Exception e) {
result = e.Message;
return false;
}
return true;
}
あなたはあなたがしたくないことを言いましたが、あなたが何をしたいのかは分かりませんでした。パラメータを使用しないことで達成しようとしていることは何ですか? –
上記のEDITをご覧ください。 – majkinetor