2016-05-30 6 views
2

私のコードで何が起こっているのか把握しようとしていますが、私はそれを理解できません。私は、以前にユーザーが変数を選択した場所の情報を見つけるためにdbを照会しようとしています。Command.Parameters.Addが機能していませんか? C#

私が遭遇している問題は、@clientをParameters.AddWithValueメソッドの値に置き換えることはないということです。私は何が間違っているのか分かりません。

selClient = comboBox1.SelectedItem.ToString(); 
string cmdText = "Select [Tax EIN] From [TblClientInfo] Where [Client Name] = '@client';"; 

using (var conn = new SqlConnection("connection info")) 
{ 
    SqlCommand cmd2 = new SqlCommand(cmdText, conn); 
    { 
     cmd2.Parameters.AddWithValue("@client", selClient); 
     try 
     { 
      conn.Open(); 
      SqlDataReader rd = cmd2.ExecuteReader(); 
      while (rd.Read()) 
      { 
       MessageBox.Show(String.Format("{0}", rd[0])); 
      } 
      conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
} 

は、一般的な変数のすべてを無視してください、私はプログラミングに新たなんだと私は実際に使用可能なプログラムを作る前に、すべてのテストランとしてこれを実行しようとしています。

答えて

4

SQL文字列内のパラメータの周りの単一引用符を削除します。私がここにいる間、

string cmdText = "Select [Tax EIN] From [TblClientInfo] Where [Client Name] = @client;"; 

I'm not a fan of .AddWithValue()、そしてあなたにも作ることができ、他の多くの改良があります。

selClient = comboBox1.SelectedItem.ToString(); 
string cmdText = "Select [Tax EIN] From [TblClientInfo] Where [Client Name] = @client;"; 

//whenever I see a "cmd2", I wonder about "cmd1"... 
// that you probably can and should get this into a single call into the database 
using (var conn = new SqlConnection("connection info")) 
using (var cmd2 = new SqlCommand(cmdText, conn)) 
{ 
    //guessing a parameter type/length here. Use exact type from your DB. 
    cmd2.Parameters.Add("@client", SqlDbType.NVarChar,50).Value = selClient; 
    conn.Open(); 

    // I prefer my try/catch block to happen up at least one level 
    // Code at that level is usually better positioned to react to the exceptions 

    var rd = cmd2.ExecuteReader(); 
    while (rd.Read()) 
    { 
     MessageBox.Show(rd[0].ToString()); 
    } 
    //The main point of a using block with SqlConnection is that is safely closes the connection for you 
} 
は、
+0

2番目の例の引用符を削除します。 –

+0

ありがとうございました:) –

1

あなたは、パラメータ@clientから引用符''を削除する必要があります。

string cmdText = "Select [Tax EIN] From [TblClientInfo] Where [Client Name] = @client;"; 
関連する問題