2012-03-19 10 views
0

Googleで多くの検索をしましたが、SQL Serverに接続してパラメータを必要としないストアドプロシージャからデータを取得できる形式を見つけることができませんでした2つのテーブルのデータストアドプロシージャの形式

私が望むのは、ストアドプロシージャからデータを取得し、データを簡単に取得できるものに保存することです。

私のストアドプロシージャは、今、私は、ストアドプロシージャを呼び出して使用することを行います方法がわからない、私は2つの列を取得するように、私は

If (Column1 < 7) 
    Then Get Column2 and calculate a email address (by stripping off things from that column and get the data I want...) and send an email. 

をチェックする必要があり、

ALTER PROCEDURE [dbo].[GetTablesData] 
AS 
    SELECT TableA.Column1, TableB.Column2 
    FROM TableA TableA 
    INNER JOIN TableB TableB 
    ON TableA.ID = TableB.ID AND TableA.ID2 = TableB .ID2 

ですそれはIF else文で、私は古いコードを見ました。彼らはXSD(Dataset)を使っていますが、オンラインでもそのコンセプトは得られませんでした。

+0

だからあなたのようなもので終わるだろう。 Cheers –

+0

関連:http://stackoverflow.com/questions/1260952/how-to-execute-a-stored-procedure-from-c-sharp-program –

答えて

1

あなたがリーダーを取得するためにExecuteReaderを使用することができます()は、ExecuteNonQueryを行うことができますリーダーなどを使用する必要はありません。リーダは、結果セット内のすべての行を繰り返し処理します。最初の行を取得するには、Read()を1回呼び出します。

Read()がtrueを返す場合は、read["column1"]のような列にアクセスできます。列のタイプはSqlTypes.SqlInt32で、intにキャストすることができます。asを使用します。ただ、ストアドプロシージャを介してデータを取得するために、どこでそれを格納し、それを取得する方法をどのように知らない私は、すべてのIF/ELSE文のコードを実行でき

using (var con = new SqlConnection("...connection string here...")) 
{ 
    var com = con.CreateCommand(); 
    com.CommandText = "GetTablesData"; 
    com.CommandType = CommandType.StoredProcedure; 
    con.Open(): 
    using (var read = cmd.ExecuteReader()) 
    { 
     if (!read.Read()) 
      throw new Exception("No rows returned!")l 

     if (read["Column1"] as int < 7) 
     { 
      var col2 = read["Column2"] as string; 
      // Do stuff with col2 
     } 
    } 
} 
2

あなたはこのようSqlCommandExecuteReader()方法を使用することができます。

SqlConnection sqlConnection1 = new SqlConnection("Your Connection String"); 
SqlCommand cmd = new SqlCommand(); 
SqlDataReader reader; 

cmd.CommandText = "GetTablesData"; //StoredProcedureName 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Connection = sqlConnection1; 

sqlConnection1.Open(); 

reader = cmd.ExecuteReader(); 

DataTable myData = new DataTable(); 
myData.Load(reader); 

sqlConnection1.Close(); 

あなたは、そのインデクサーを使用してDataTableのから値を取得することができます。以下のように、

foreach(var dr in myData) 
{ 
    Debug.WriteLine("By Column Name:" + dr["ColumnName"]); 
    Debug.WriteLine("By Column Index:" + dr[0]); 
    Debug.WriteLine("------Next Row-------"); 
} 

具体的には...

if(Convert.ToInt32(dr["Column1"]) < 7) 
{ 
    //Do required operation 
} 
+0

このDataTableでIf文をどのように使用することができますか? 、歓声 –

+0

遅れて申し訳ありません...私は答えを更新しました。 – NaveenBhat

1

は、あなたが、私はそれを行うには3種類の方法、Knvnでリーダーを使用する例が含まれている保存されprocsのからデータを取り戻すことができるいくつかの方法があります彼の答えを複製する必要がないので、私はここにそれを含めませんでした。

私はこれらがVBであり、C#を使用していることは知っていますが、変換は簡単で、同じように動作します。

これにより、データが戻され、データテーブルに格納されます。

Dim dt As New DataTable 

    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

    Dim cmd As New SqlCommand 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "spNameHere" 

    cmd.Connection = conn 

    Using da As New SqlDataAdapter(cmd) 
    conn.Open() 
    da.Fill(dt) 
    conn.Close() 
    End Using 

あなただけのこれまでの結果を返すでしょう手順を持っている場合は、スカラーとして、それを実行し、そのような変数にstreight結果を割り当てることができます:

Dim names As String = String.Empty 

    Dim ds As New DataTable 

    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

    Dim cmd As New SqlCommand 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "spNameHere" 

    cmd.Connection = conn 

    conn.Open() 

    names = cmd.ExecuteScalar() 

    conn.Close() 

次に第三の例何も返さないSQLを実行する場合です。このような状況で、あなただけの

Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString()) 

    Dim cmd As New SqlCommand 

    cmd.CommandType = CommandType.StoredProcedure 
    cmd.CommandText = "spNameHere" 

    cmd.Connection = conn 

    conn.Open() 
    cmd.ExecuteNonQuery() 
    conn.Close()