2017-02-20 5 views
0
[WebMethod] 
    public string Login(string Username, string Password) 
    { 
     String result; 
     SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Nicole Wong\Desktop\Inari Tracking System\Inari Tracking System\App_Data\Database1.mdf;Integrated Security=True;User Instance=True"); 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("SELECT Username, Password from UserData where Username = @Username AND Password = @Password", con); 
     cmd.Parameters.AddWithValue("@UserName", Username); 
     cmd.Parameters.AddWithValue("@Password", Password); 
     cmd.ExecuteNonQuery(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     // Create an instance of DataSet. 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     if (ds.Tables[0].Rows.Count> 0) 
     { 
      DateTime dt = DateTime.Now; 
      SqlCommand cmd1 = new SqlCommand("INSERT INTO ActivityLog (CreateOn, CreateBy) VALUES (@CreateOn,@CreateBy)", con); 
      cmd1.Parameters.AddWithValue("@CreateOn", dt); 
      cmd1.Parameters.AddWithValue("@CreateBy", Username); 
      cmd1.ExecuteNonQuery(); 
      SqlDataAdapter da1 = new SqlDataAdapter(cmd1); 
      // Create an instance of DataSet. 
      DataSet ds1 = new DataSet(); 
      da1.Fill(ds); 
      con.Close(); 

      result = "Successful"; 
      return result; 
     } 
     else 
     { 
      result = "Fail"; 
      return result; 
     } 

Dies ist meine einfache Web-Methode, um Benutzer Login-Zeit in der Datenbank zu speichern.Doppelte Daten in der Datenbank

Das Problem ist, dass die Daten zweimal in der Datenbank gespeichert werden. Zum Beispiel logge ich mich in das System ein und es wird erfolgreich zurückgegeben, aber ich habe die Datenbank überprüft, da zwei gleiche Datensätze mit den gleichen Daten gespeichert sind. Ich laufe mit Breakpoint, aber es gibt keine Doppelung, der Code läuft Zeile für Zeile schön.

Irgendeine Idee? Vielen Dank im Voraus

+1

Warum verwenden Sie 'SqlDataAdapter' und' ExecuteNonQuery' zusammen für einen Befehl? –

+0

Es tut mir leid, ich bin neu, gibt es ein Problem, während ich beide benutze? @ un-lucky – Alois

+0

@Alois ja, das ist, warum du Verdoppelung bekommen. Die '.ExecuteNonQuery()' führt die Einfügung einmal und dann die 'da1.Fill (ds);' führt die Einfügung erneut aus. Sie tun dasselbe auf Ihrer Auswahl, Sie führen sowohl als Abfragen als auch als Nichtabfragen aus, wenn select eine Abfrage ist und das Einfügen eine Nichtabfrage ist. – Andrew

Antwort

0
public string Login(string Username, string Password) 
{ 
    String result; 
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Nicole Wong\Desktop\Inari Tracking System\Inari Tracking System\App_Data\Database1.mdf;Integrated Security=True;User Instance=True"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("SELECT Username, Password from UserData where Username = @Username AND Password = @Password", con); 
    cmd.Parameters.AddWithValue("@UserName", Username); 
    cmd.Parameters.AddWithValue("@Password", Password); 
    //This us pretty much useless on a select, SELECT is a query, not a NonQuery 
    //cmd.ExecuteNonQuery(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    // Create an instance of DataSet. 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    if (ds.Tables[0].Rows.Count> 0) 
    { 
     DateTime dt = DateTime.Now; 
     SqlCommand cmd1 = new SqlCommand("INSERT INTO ActivityLog (CreateOn, CreateBy) VALUES (@CreateOn,@CreateBy)", con); 
     cmd1.Parameters.AddWithValue("@CreateOn", dt); 
     cmd1.Parameters.AddWithValue("@CreateBy", Username); 
     cmd1.ExecuteNonQuery(); 
     //Don't use the DataAdapter and try to fill a dataset from an insert, all this insert will return is @@ROWCOUNT 
     //SqlDataAdapter da1 = new SqlDataAdapter(cmd1); 
     // Create an instance of DataSet. 
     //DataSet ds1 = new DataSet(); 
     //da1.Fill(ds); 
     con.Close(); 

     result = "Successful"; 
     return result; 
    } 
    else 
    { 
     result = "Fail"; 
     return result; 
    } 

Sie ausgeführt sowohl Ihre Auswahl und Ihren Einsatz zweimal, mit der Auswahl es nicht viel aus so tat, aber mit dem Einsatz es tut. Entfernen Sie die .ExecuteNonQuery() von der Auswahl und entfernen Sie die SqlDataAdapter aus dem Einsatz.

+0

Es wurde behoben. Vielen Dank – Alois

+0

Wenn dies Ihr Problem Alois löst, bitte akzeptieren Sie die Antwort. – Andrew

Verwandte Themen