2016-05-30 7 views
2

Ich versuche herauszufinden, was mit meinem Code passiert und ich kann es nicht herausfinden. Ich versuche, eine DB abzufragen, um Informationen herauszufinden, wo ein Benutzer vorher eine Variable auswählte.Command.Parameters.Add funktioniert nicht? C#

Das Problem, das ich in renne, ist, dass es nie die @client durch den Wert in der Methode Parameters.AddWithValue ersetzt. Ich bin mir einfach nicht sicher, was ich falsch mache.

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(); 
     } 
    } 
} 

Bitte alle generischen Variablen ignorieren, ich bin neu in die Programmierung und ich versuche, das alles als Testlauf zu tun, bevor ich tatsächlich ein brauchbares Programm machen.

Antwort

4

die einfachen Anführungszeichen in die SQL-Zeichenfolge um den Parameter entfernen:

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

Während ich hier bin, I'm not a fan of .AddWithValue(), und es gibt eine Reihe weiterer Verbesserungen können Sie auch machen:

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

Entfernen Sie die Zitate aus dem zweiten Beispiel. –

+0

Hab es, danke :) –

1

Sie müssen Anführungszeichen entfernen '' aus Parameter @client:

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