2017-05-13 12 views
2

C#でストアドプロシージャを使用して、SQL Serverテーブルからデータを取得したいとします。私はパラメータとして渡す予定のIDで都市を印刷したいが、C#のストアドプロシージャのようなパラメータを使用する正しい構文は分からない。C#:どのようにSQL Serverのストアドプロシージャのパラメータを使用するには?

これは私が使用しているC#のコードです:

string connString = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; 

using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 

    SqlCommand command = new SqlCommand("SP_GetCityByID where id = 2", conn); 
    command.CommandType = CommandType.StoredProcedure; 

    SqlParameter param = command.Parameters.Add("@ID", SqlDbType.Int); 
    param.Direction = ParameterDirection.Input; 

    command.ExecuteNonQuery(); 

    Console.WriteLine(param.Value); 
} 
+0

サイドノートを:あなたは** **あなたのストアドプロシージャのための 'sp_'接頭辞を使用しないでください。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

答えて

2
SqlCommand command = new SqlCommand("SP_GetCityByID ", conn); 

をストアドプロシージャを呼び出すときは、where条件を入れてはいけません。 where条件はストアドプロシージャの本体内にある必要があります。これは、ストアテーブルプロシージャに渡すパラメータ@IDで市のテーブルのid列を比較する必要があります。第二に、最後に書いたExecuteNonQuery機能はあなたの目的を果たさないでしょう。パラメータ@IDとテーブルの形で都市名を一致リターンを受け入れ、私はあなたのストアドプロシージャを想定しています

String cityName= command.ExecuteScalar(); 

ExecuteScalar機能の代わりとして下記を使用してください。

+0

ok私はExecuteScalarについて聞いて覚えていますが、私はそれが何のために使われたか記憶していません。私はちょっと私がどこでストアドプロシージャと呼ばれるパラメータを置くことは知っていませんが、どこで私はパラメータを呼び出しますか?次のような記述が必要です。 "id = 2" – Dolev

+0

where条件を記述する場所はストアドプロシージャ内です。そして、 'id = 2'と書くべきではありません。なぜなら、それは常に同じ結果を返すからです。代わりに 'where id = @ ID'と書いてください。 –

+0

ExecuteScalarは、データベースからの単一の値の結果を取得するために使用されます。あなたのストアドプロシージャ内で@IDパラメータ –

0

は、以下のようにパラメータを提供します。

string connString = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     conn.Open(); 
     SqlCommand command = new SqlCommand("SP_GetCityByID", conn); 
     command.CommandType = CommandType.StoredProcedure; 
     SqlParameter param = command.Parameters.Add("@ID", SqlDbType.Int).Value = 2; 
     //param.Direction = ParameterDirection.Input; 
     command.ExecuteNonQuery(); 
     Console.WriteLine(param.Value); 

    } 
+0

は機能しません。ビジュアルスタジオ私はあなたが示唆したような値を入力すると私は赤いエラーをスロー – Dolev

関連する問題