2013-03-24 82 views
0

擱置鹽和散列辯論。如果你知道答案,請回復。已與其基礎RCW分離的COM對象無法使用?

我想創建一個方法,用戶輸入他們的憑據與日期和時間登錄和登出時自動記錄。

我有兩個問題

問題1 - 我創建了一個簡單的方法,只是登錄和註銷。當我包含日期和時間代碼時,我注意到這些地方記錄並存儲了所有用戶。我目前有兩個用戶。因此,如果一個用戶登錄日期和時間被記錄併爲其他用戶加蓋郵票。

問題2 - 第二個問題是,當主題標題顯示Update Update命令參數與Select相同時,出現錯誤消息。

如果有人可以幫助我,我會感激兩個問題。希望這只是一個小問題?如果省略日期和時間,我將不勝感激,如果有人可以幫助我的多登錄功能。

Access 2003〜兩張表。表1 - 命名LoginTable表2 - 命名LoginLogTable

LoginTable

字段名數據類型

UserName Text 
Password Text 

LoginLogTable 
FieldName  DataType 
UserNameID Text 
UserName  Text 
LoggedIn  Date/Time 
LoggedInTime Date/Time  



private void btnLogin_Click(object sender, EventArgs e) 
{ 
    using (var command = myCon.CreateCommand()) 
     { 
      command.CommandText = "select UserName, Password from LoginTable where WHERE STRCOMP(UserName, @UserName,0) = 0 AND STRCOMP(Password, @Password,0)=0"; 
      command.Parameters.AddWithValue("UserName", (txtUserName.Text)); 
      command.Parameters.AddWithValue("Password", (txtPassword.Text)); 
      myCon.Open(); 

      var reader = command.ExecuteReader(); 
      { 
       if (reader.HasRows) 
       { 
        MessageBox.Show("Login Successful"); 
        Form2 frm = new Form2(); 
        frm.Show(); 
        while (reader.Read()) 
        { 
         txtUserName.Text = reader["UserName"].ToString(); 
         txtPassword.Text = reader["Password"].ToString(); 
        } 

        OleDbCommand cmd = new OleDbCommand(); 
        cmd.Connection = myCon; 

        cmd.CommandText = "UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ?"; 
         cmd.Parameters.AddWithValue("@LoggedInDate", DateTime.Now.ToShortDateString()); 
        cmd.Parameters.AddWithValue("@LoggedInTime", DateTime.Now.ToString("HH:mm")); 
        cmd.ExecuteNonQuery(); 
        myCon.Close(); 

       } 
      else MessageBox.Show("Login Falied"); 
      } 

     } 
      myCon.Close(); 
      myCon.Close(); 

}

+0

出於好奇,你爲什麼要關閉連接3次? – 2013-03-24 19:01:28

+0

@M帕特爾它應該關閉兩次?不應該?我現在正在關注打開和關閉連接。 – bucketblast 2013-03-24 19:51:23

回答

1

您的update查詢中沒有任何條件,因此它將更新表中的所有記錄。添加條件以僅更新單個記錄。我不知道你在你的表格,但這樣的事情:

cmd.CommandText = "UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ? where UserName = ?"; 
cmd.Parameters.AddWithValue("LoggedInDate", DateTime.Now.ToShortDateString()); 
cmd.Parameters.AddWithValue("LoggedInTime", DateTime.Now.ToString("HH:mm")); 
cmd.Parameters.AddWithValue("UserName", txtUserName.Text); 

你應該關閉並執行第二命令之前處理第一數據讀取器和命令。

+0

謝謝。我有2個開放連接和3個關閉連接,所以沒有任何意義。整理出來。正如你所指出的,我忘了也包括where子句。 – bucketblast 2013-03-24 20:29:17

+0

爲了補充說明,我認爲你也應該在「使用」語句之間放置數據庫連接。這將確保您的連接也被關閉並處理,而不必在其上顯式調用Close()。 – 2013-03-24 21:40:22

0

我想你在LoginLogTable和更新表需要用戶名欄像這樣的東西

UPDATE [LoginLogTable] SET [LoggedInDate] = ?, [LoggedInTime] = ? WHERE UserName = 'YourUserName'. 

第二,我相信你在這裏不需要讀者。您可以使用ExecuteScalar來代替Reader。第二個命令無法運行,因爲Reader已打開狀態。

+0

謝謝你丹尼爾我忘了包括where子句。 – bucketblast 2013-03-24 20:30:04

相關問題