2016-04-25 8 views
0

Hier ist der Code, den ich für das Ändern des Kennworts in meiner Website in C# geschrieben habe, aber es zeigt den Fehler in "ExecuteNonQuery()" Befehl .. und ich kann nicht aktualisieren die Datenbank mit neuen Passwort ... ich habe für die viele Lösung versucht, wie ich über die Berechtigung Authentifizierung in Windows überprüfen, um die „Datenbank“ Datei zu ändern .. -> Code-in Change.aspx.cs:Fehler in ExecuteNonQuery-Befehl in C#, kann Datenbank nicht aktualisieren

protected void Button1_Click(object sender, EventArgs e) 
{ 
    OleDbConnection conn = new OleDbConnection(); 
    string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Lenovo\Desktop\PlacementCell\PlacementCell\Database.mdb"; 
    conn = new OleDbConnection(connectionString); 
    conn.Open(); 

    string str1 = "select * from Student_Login where Password ='" + TextBox1.Text + "'"; 
    OleDbCommand cmd = new OleDbCommand(str1, conn); 
    OleDbDataReader dr = cmd.ExecuteReader(); 

    if (dr.Read()) 
    { 
     OleDbConnection con1 = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Lenovo\Desktop\PlacementCell\PlacementCell\Database.mdb"); 
     con1.Open(); 
     string str = "UPDATE Student_Login SET Password=" + TextBox3.Text + "where Password= " + TextBox1.Text; 
     using (OleDbCommand cmd1 = new OleDbCommand(str, con1)) 
     { 
      cmd1.ExecuteNonQuery(); 
     } 
     Label1.Visible = true; 
     con1.Close(); 
    } 
    else 
    { 
     Label3.Visible = true; 
    } 
    conn.Close(); 
} 

... error image

+0

fehlt ein Anführungszeichen am Ende Ihrer Update-Anweisung. Könnten Sie das bitte überprüfen? –

Antwort

0

Es scheint, dass es einige Syntaxprobleme in Ihrem vorhandenen Code gibt, s uch als Anführungszeichen um Ihre Parameterwerte fehlen, wenn Ihre Abfragen zu bauen und die Saiten wie die folgende Zeile verketten:

string str = "UPDATE Student_Login SET Password='" + TextBox3.Text + "' where Password= " + TextBox1.Text + "'"; 

Eine größere Ausgabe hier ist, dass Sie nicht mit SQL-Parametrierung werden, was zu Problemen führen kann, wie dies geschehen kann (und zu SQL Injection-Schwachstellen führen). Betrachten Sie den folgenden Code, der alle Ihre vorherigen Probleme lösen sollten und halten Sie geschützt gegen jede Injektion basierende Bösartigkeit:

// Create your connection 
using (var conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Lenovo\Desktop\PlacementCell\PlacementCell\Database.mdb")) 
{ 
    // Build your first query 
    var query = "SELECT * FROM Student_Login WHERE Password = @password"; 
    // Create a command to execute your query 
    using (var cmd = new OleDbCommand(query, conn)) 
    { 
      // Open your connection 
      conn.Open(); 
      // Add your parameter (prevents SQL Injection and syntax issues) 
      cmd.Parameters.AddWithValue("@password", TextBox1.Text); 

      // Execute your query into a reader 
      using (var dr = cmd.ExecuteReader()) 
      { 
        // Go through each row 
        while(dr.Read()) 
        { 
         // Build an update query 
         var updateQuery = "UPDATE Student_LogIn SET Password = @password WHERE Password = @oldPassword"; 
         // Build a new command to execute 
         using (var updateCmd = new OleDbCommand(updateQuery, conn)) 
         { 
          // Set a parameter and execute 
          updateCmd.Parameters.AddWithValue("@password", TextBox3.Text); 
          updateCmd.Parameters.AddWithValue("@oldPassword", TextBox1.Text); 
          // Execute your query 
          updateCmd.ExecuteNonQuery(); 
          Label1.Visible = true; 
         } 
        } 
      } 
    } 
} 

Sie können auch diese Version versuchen, die auf benannte Parameter nicht verlassen:

// Create your connection 
using (var conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Lenovo\Desktop\PlacementCell\PlacementCell\Database.mdb")) 
{ 
    // Build your first query 
    var query = "SELECT * FROM Student_Login WHERE Password = ?"; 
    // Create a command to execute your query 
    using (var cmd = new OleDbCommand(query, conn)) 
    { 
      // Open your connection 
      conn.Open(); 
      // Add your parameter (prevents SQL Injection and syntax issues) 
      cmd.Parameters.AddWithValue("@password", TextBox1.Text); 

      // Execute your query into a reader 
      using (var dr = cmd.ExecuteReader()) 
      { 
        // Go through each row 
        while(dr.Read()) 
        { 
         // Build an update query 
         var updateQuery = "UPDATE Student_LogIn SET Password = ? WHERE Password = ?"; 
         // Build a new command to execute 
         using (var updateCmd = new OleDbCommand(updateQuery, conn)) 
         { 
          // Set a parameter and execute 
          updateCmd.Parameters.AddWithValue("@password", TextBox3.Text); 
          updateCmd.Parameters.AddWithValue("@oldPassword", TextBox1.Text); 
          // Execute your query 
          updateCmd.ExecuteNonQuery(); 
          Label1.Visible = true; 
         } 
        } 
      } 
    } 
} 
+0

Ich habe das versucht..aber wieder gibt es denselben Fehler .. !! –

+0

Haben Sie den zweiten Ansatz verwendet, den ich erwähnt habe? String-Verkettung, wie Sie sie gerade verwenden, ist nie wirklich sicher und führt zu Problemen wie dem, mit dem Sie kämpfen. –

+0

Ich habe dies auch versucht ... aber es hat immer noch denselben Fehler .. –

0

können Sie noch einmal versuchen, diese ...

updateCmd.Parameters.Add ("@ password", SqlDbType.VarChar); updateCmd.Parameters ["@ password"]. Wert = TextBox3.Text;

updateCmd.Parameters.Add ("@ oldPassword", SqlDbType.VarChar); updateCmd.Parameters ["@oldPassword"]. Wert = TextBox1.Text;

Verwandte Themen