2016-07-30 2 views
0

So abrufenC# + Datenbank - ein int als Abfrage aus einer Spalte zu Zeilendaten

Ich habe eine berechnete int Answer in meinem Programm.

In meiner Datenbank sind sechs Spalten. Die Säulen sind ValueID, A, B, C, D undE.

Wenn ich eine Taste drücken, ich möchte die Werte von A, B, C, D und E, wo Antwort ValueID Spiele, in einem Meldungsfeld angezeigt.

Was ich jetzt tue (möglicherweise dumm) unter:

public void button1_Click(object sender, EventArgs e) 
    { 
     int Answer; 
     if (radioButton3.Checked) 
     { 
      Answer = Grade3 + Addition + PTime; 
     } 
     else 
     { 
      Answer = Grade + Addition + PTime; 
     } 
     //MessageBox.Show("Answer is: " + Answer); 

     int Value = Answer; 
     try 
     { 
      SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB; AttachDbFilename =|DataDirectory|\dbiss.mdf; Integrated Security = True; Connect Timeout = 30"); 
      con.Open(); 
      //SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM DataISS WHERE ValueID = '" + Value + "'", con); 
      SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM " + 
          "DataISS WHERE ValueID = @value", con); 

      comm.Parameters.AddWithValue("@value", Value); 
      using (SqlDataReader reader = comm.ExecuteReader()) 
      { 
       if (reader.Read()) 
       { 
        MessageBox.Show(String.Format("{0}", reader["id"])); 
       } 
      } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Jede Hilfe wäre sehr geschätzt.

+0

comm.Parameters.AddWithValue (" '" + Value + "'" verbinden, "con"); Löschen Sie diese Zeile und versuchen Sie es erneut. –

Antwort

0

Unten ist die richtige Art und Weise der Zugabe von Parametern:

SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM " + 
           "DataISS WHERE ValueID = @value", con); 

comm.Parameters.AddWithValue("@value", Value); 

Einer der Überlastung von AddWithValue nimmt den Namen Parameter in der Abfrage verwendet und der Wert für diesen Parameter.

Wenn Sie immer noch keine Ergebnisse erhalten, müssen Sie die gleiche Abfrage mit Abfrage-Fenster in Visual Studio versuchen. Sie können dann das Problem identifizieren, das möglicherweise in einem falschen Value gesendet von der C# -Anwendung oder in der Art ist, wie Sie den lokalen Parameter Value berechnen, der als ein Parameter verwandt wird.

+0

Vielen Dank für Ihre Antwort. Ist der Fallunterschied zwischen Wert und @ Wert von Bedeutung? –

+0

Ich bekomme keine Ausgabe oder Fehler dabei? Was könnte falsch sein? Irgendwelche Ideen. –

+0

@ Dr.Viper Es ist bevorzugt. Aber nein, die API fügt @ bereits bei der Ausführung hinzu, wenn sie fehlt. Aber ich empfehle Ihnen, es für Klarheit zu halten. Führen Sie dieselbe Abfrage mit dem SQL-Abfragefenster aus, erhalten Sie das Ergebnis? – user3185569

0

Struktur Befehl wie unten

SqlCommand comm = new SqlCommand("select NC, Nodularity, UTS, Elongation, BHN from DataISS where [email protected]", con); 
comm.Parameters.Add("@ValueID", SqlDbType.Int).Value = Value; 
+0

Keine Ausgabe oder Fehler erhalten. Was könnte ich falsch machen? –

+0

, weil Sie nur ID in messageBox bekommen, indem Sie "reader [" id "]" –

+0

Tried reader [0] verwenden. durch Leser [4], Immer noch nichts. Die SQL-Abfrage gibt Skalarvariable nicht deklarierten Fehler für @Value zurück –

-1

Ich würde vorschlagen, "using" im Code verwenden, so ist es Verbindung selbst schließt. Zum Beispiel:

public static bool SomeMethod(int valueId) 
    { 
     bool result; 
     try 
     { 
      using (SqlConnection connection = new SqlConnection(DataConnection.MailForm)) 
      { 
       connection.Open(); 

       using (SqlCommand cmd = connection.CreateCommand()) 
       { 
        cmd.CommandText = @"SELECT COUNT(*) FROM Mails 
               WHERE ValueID= @valueId"; 

        cmd.Parameters.AddWithValue("@valueId", valueId); 
        int entryIdExist = Convert.ToInt32(cmd.ExecuteScalar()); 
        result = entryIdExist <= 0; 
       } 
      } 
     } 
     catch (Exception) 
     { 
      result = false; 
     } 

     return result; 
    } 

Use "@" vor der Zeichenfolge, auf diese Weise können Sie so viele Zeilen verwenden, ohne sie mit +

Verwandte Themen