0

Ich entwickle eine Datenbankanwendung in C# .NET und SQL Server 2012. Einige meiner SQL-Anweisungen funktionieren nicht ordnungsgemäß. Wenn ich den Code ausführe, gibt es keinen Fehler. Aber wenn ich versuche, etwas zu löschen oder einen Datensatz zu aktualisieren, mache ich das nicht. Der Code liegt unter:SQL-Abfragebefehl funktioniert nicht, gibt aber keinen Fehler SQL Server

public void updateFinalTable() 
    { 
     DialogResult result = MessageBox.Show("Please make sure no fields are empty or they will get changed. \n\t\t Do you want to continue?", 
     "Important Note", 
     MessageBoxButtons.YesNo); 
     if (result == DialogResult.Yes) 
     { 
      try 
      { 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString); 

       con.Open(); 
       SqlCommand cmd = new SqlCommand("UPDATE fianlTable SET AccountNumber='" + textBox1.Text + "', Date='" + dateTimePicker1.Value.ToString("MM/dd/yyyy") + "', CustomerName='" + textBox3.Text + "' , Debit='" + txtDebit.Text + "', Credit='" + txtCredit.Text + "', Balance='" + txtBalance.Text + "' WHERE Id LIKE '" + textBox4.Text + "' ", con); 
       cmd.ExecuteNonQuery(); 
       this.fianlTableBindingSource.AddNew(); 
       DataTable dt = new DataTable(); 
       SqlDataAdapter sda = new SqlDataAdapter("select * from fianlTable WHERE (UserName LIKE '" + LoginSession.UserID + "')", con); 

       sda.Fill(dt); 
       dataGridView1.DataSource = dt; 
       refresh(); 
       con.Close(); 

       MessageBox.Show("Record Updated Successfully!"); 

      catch (Exception) 
      { 
       MessageBox.Show("Record Could Not be updated...! "); 
      } 
     } 
    } 

Ähnlich ist der Fall mit dem Löschvorgang. Beide Codes geben keinen Fehler, aber innerhalb der Datenbank wird keine Änderung beobachtet.

+0

Vielleicht funktioniert die Abfrage gut, nur nicht "trifft" die Zeile - dies könnte durch eine falsche ID in der Abfrage verursacht werden? Ich kann nicht helfen, aber merke ein Leerzeichen am Ende des Quey: 'textBox4.Text + ''" '- hast du versucht, es zu entfernen? – Andersnk

+5

[SQL-Injection-Warnung] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - Sie sollten ** nicht ** Ihre SQL-Anweisungen verketten - verwenden ** parametrisierte Abfragen ** statt SQL Injection –

+0

zu vermeiden, da Ihre WHERE die Abfragen auf keine Datensätze auswirken. Debuggen Sie Ihre Anwendung und extrahieren Sie das erstellte T-SQL, bevor es an den Server übergeben wird. Führen Sie dann das SQL in SSMS manuell aus, um zu beweisen, dass es keine Datensätze betrifft und Sie Ihren Fehler in der SQL sehen, die von Ihrem Code erzeugt wird. Sie sollten sowieso parametrisierte Procs verwenden, IMO. –

Antwort

1

Sie haben Like in Ihrem wo-Zustand statt = verwendet. So sollte der Code wie folgt sein -

SqlCommand cmd = new SqlCommand("UPDATE fianlTable SET AccountNumber='" + textBox1.Text + "', Date='" + 
dateTimePicker1.Value.ToString("MM/dd/yyyy") + "', CustomerName='" + 
textBox3.Text + "' , Debit='" + txtDebit.Text + "', Credit='" + 
txtCredit.Text + "', Balance='" + txtBalance.Text + 
"' WHERE Id = '" + textBox4.Text + "' ", con); 

ACHTUNG Diese Art der Abfrage möglicherweise zu SQL Injection führen. Sie gehen besser mit parametrisierten Abfragen, wie folgt -

string qry = = "UPDATE fianlTable SET AccountNumber = @accnt, CustomerName = @cname Where ID = @id)"; 

SqlCommand cmd = new SqlCommand(qry, con); 
cmd.Parameters.AddWithValue("@accnt", textBox1.Text); 
cmd.Parameters.AddWithValue("@cname", textBox3.Text); 
cmd.Parameters.AddWithValue("@id", textBox4.Text); 
cmd.ExecuteNonQuery(); 
+0

Sie sollten auschecken [Können wir AddWithValue() bereits beenden?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-ready/) und hör auf '.AddWithValue()' - es kann zu unerwarteten und überraschenden Ergebnissen führen ... –