2017-02-20 18 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; 
     } 

Это мой простой веб-метод для хранения времени входа пользователя в базу данных.Двойные данные в базе данных

Проблема заключается в том, что данные дважды сохраняются в базе данных. Например, я вхожу в систему, затем он возвращает успешное, но я проверил базу данных, там есть две одинаковые записи, сохраненные с теми же данными. Я запускаю с точкой останова, но нет никакого дублирования, код работает хорошо по строкам.

Любая идея? Спасибо заранее

+1

Почему вы используете 'SqlDataAdapter' и' ExecuteNonQuery' вместе для одной и той же команды? –

+0

Извините, что я новичок в этом, есть проблема, когда я использую оба? @ un-lucky – Alois

+0

@Alois да, вот почему вы получаете дублирование. '.ExecuteNonQuery()' запускает вставку один раз, а затем 'da1.Fill (ds);' снова запускает вставку. Вы делаете то же самое на своем выборе, кстати, вы выполняете как запросы, так и как незапросы, когда select - это запрос, а вставка - это запрос. – Andrew

ответ

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

Вы казнены как ваш выберите и вашу вставку дважды, причем выбрать это не имело значения, так много, но со вставкой он делает. Снимите .ExecuteNonQuery() с выбора и снимите SqlDataAdapter со вставки.

+0

Исправлено. Большое спасибо – Alois

+0

Если это решает вашу проблему Алоис, пожалуйста, примите ответ. – Andrew