2015-12-08 60 views
0

嗨,我有麻煩做一個更新按鈕爲我的網站,我試過很多方法,但似乎無法推測出來。我希望用戶輸入他們希望更新的客戶端的ID號碼,然後根據他們希望更改的列填寫文本框。如何更新數據庫記錄VS12 C#

這裏是我的代碼:

private static OleDbConnection GetConnection() 
{ 
    String connString; 
    connString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Users\Wisal\Documents\Visual Studio 2012\WebSites\WebSite3\registration-Db.mdb"; 

    return new OleDbConnection(connString); 
} 

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    OleDbConnection cn = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:/Users/Wisal/Documents/Visual Studio 2012/WebSites/WebSite3\registration-Db.mdb"); 

    cn.Open(); 
    OleDbCommand cmd = new OleDbCommand("(Update client set id = " + txt_id.Text + " ,[name] ='" + txt_name.Text + " ,[password] ='" + txt_password.Text +" where id= '" + txt_id.Text + "",cn); 
    cmd.ExecuteNonQuery(); 
    cn.Close(); 
    }  
} 

我也曾經嘗試這樣做:「語法錯誤在聯合查詢」

private static OleDbConnection GetConnection() 
{ 
    String connString; 
    connString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Users\Wisal\Documents\Visual Studio 2012\WebSites\WebSite3\registration-Db.mdb"; 

    return new OleDbConnection(connString); 

} 

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    OleDbConnection myConnection = GetConnection(); 

    myConnection.Open(); 
    OleDbCommand cmd = new OleDbCommand("(Update client set id = " + txt_id.Text + " ,[name] ='" + txt_name.Text + " ,[password] ='" + txt_password.Text +" where id= '" + txt_id.Text + "",myConnection); 
    cmd.ExecuteNonQuery(); 
    myConnection.Close(); 
    } 
} 

有了這一個,我得到

我已經試過這也:

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    OleDbConnection myConnection = GetConnection(); 

    myConnection.Open(); 
    OleDbCommand cmd = new OleDbCommand("Update client set [name] = ? [password] = ? where id= ?", myConnection); 
    cmd.Parameters.AddWithValue("", txt_id.Text); 
    cmd.Parameters.AddWithValue("", txt_name.Text); 
    cmd.Parameters.AddWithValue("", txt_password.Text); 
    cmd.ExecuteNonQuery(); 
    myConnection.Close(); 
    } 

    } 
+0

你應該抓住任何異常拋出,但似乎你的SQL字符串缺少許多'(單引號)。 –

+0

您有幾個巨大的安全問題。您需要使用參數化查詢,並且密碼永遠不應以明文形式存儲在數據庫中(請改爲使用單向哈希值)。 – mason

+0

看看你的CommandText,這很可能是你的異常的原因。 – KiwiPiet

回答

2

我已經更新了你的代碼:

試試這一個圍繞一次性對象

private static OleDbConnection GetConnection() 
{ 
    var connString = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\Users\Wisal\Documents\Visual Studio 2012\WebSites\WebSite3\registration-Db.mdb"; 

    return new OleDbConnection(connString); 
} 

protected void clientUpdate_Click(object sender, EventArgs e) 
{ 
    using(var myConnection = GetConnection()) 
    { 
     myConnection.Open(); 
     // You should be using a parameterized query here 
     using (var cmd = new OleDbCommand("Update client set [name] = ?, [password] = ? where id = ?", myConnection)) 
     { 
      cmd.Parameters.AddWithValue("name", txt_name.Text); 
      cmd.Parameters.AddWithValue("password", txt_password.Text); 
      cmd.Parameters.AddWithValue("id", txt_id.Text); 

      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
  • 使用使用塊
  • 檢查你的SQL,無需更新ID如果那是你的主要關鍵並且要小心單引號。改用參數化查詢。
+0

[OLEDB參數化查詢(http://stackoverflow.com/questions/12048152/oledb-parameterized-query) – KiwiPiet

+0

我將編輯我的代碼,並告訴你我是如何做的,因爲我得到的錯誤我當我這樣做 –

0

你的單引號不匹配?

是您id int類型或字符串的領域?我認爲它是int類型的。並且您不需要更新id字段,因爲它與where子句中的值相同。稍微

OleDbCommand cmd = new OleDbCommand("Update client set [name] ='" + txt_name.Text + "' ,[password] ='" + txt_password.Text +"' where id= " + txt_id.Text,myConnection); 
+0

是的,做到了!感謝@Ricky –

+0

一旦信息已被更新時,我刷新頁面嗯GridView控件甚至不更新數據庫很奇怪。 –

+0

當我更新例如我更新的名稱列不是「密碼」,那麼密碼列數據將dissappear記錄。任何想法如何解決這個問題? @Ricky –