2009-07-06 17 views
1

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; 
    }  
+1

あなたはあなたがしたくないことを言いましたが、あなたが何をしたいのかは分かりませんでした。パラメータを使用しないことで達成しようとしていることは何ですか? –

+0

上記のEDITをご覧ください。 – majkinetor

答えて

3

C#でこのクエリを実行し、これを試してください:

EXEC( '; EXECする@ R = 1,2のテスト@r選択@r INTを宣言')(おおよそ)救出するBLToolkit

+0

タイメイト、まさに私が必要なもの。スカラーを実行すると結果が得られます。 – majkinetor

2

それは外の世界の知識を持たないバッチ内で宣言されていますので、あなたが@Rのホールドを取得することはできません。

[SqlQuery("declare @r int; exec @r = proc @p1, @p2; return @r")] 
public abstract object ExecProc(int @p1, int @p2); 
関連する問題