2017-02-28 88 views
0

我想更新用戶輸入的文本框值datagrid/sql表的選定行。可以使用下面的代碼進行更新,但輸入到第一個文本框textBox1的值將輸入到每一行/列中。 Imgur的datagridview的更新後的專輯:按鈕來更新SQL datagridview數據不正確地更新行

private void button2_Click(object sender, EventArgs e) 
    { 
     SqlConnection connectiont = new SqlConnection("Data Source=DESKTOP-P3JSE1C;Initial Catalog=logins;Integrated Security=True"); 
      { 
       connectiont.Open(); 
       SqlCommand update = new SqlCommand("UPDATE dbo.logins SET site = @site, username = @username, pword = @pword, email = @email", connectiont); 
        update.Parameters.AddWithValue("@site", textBox1.Text); 
        update.Parameters.AddWithValue("@username", textBox1.Text); 
        update.Parameters.AddWithValue("@pword", textBox1.Text); 
        update.Parameters.AddWithValue("@email", textBox1.Text); 
        update.ExecuteNonQuery(); 

    } 



      clear();//method to clear textboxes on the form w/ datagridview 

    } 

enter image description here

+3

您沒有** WHERE **子句。你打算更新整個桌子嗎? - 我希望不是。 – GurV

+0

此外,我希望這只是一個例子,當你使用'textBox1.Text'的所有因素,除非你添加一個ID列或任何,然後即使使用WHERE子句,你仍然會更新與'textBox1.Text' –

+0

[從使用SQL Server的SELECT更新]的可能重複(http://stackoverflow.com/questions/2334712/update-from-select-using-sql-server) – Usman

回答

1

只更新特定行,你必須指定一些條件,以確定在表中的行(主鍵將是最好的選擇在這裏)。您可以使用WHERE子句來指定這些條件。讓我假設你想更新某個特定站點的用戶名密碼和其他詳細信息,因此這裏的條件將是站點列中的值。在這種情況下,查詢將被修改,如下所示:

SqlCommand update = new SqlCommand("UPDATE dbo.logins SET username = @username, pword = @pword, email = @email WHERE site = @site", connectiont); 

update.Parameters.AddWithValue("@username", textBox1.Text); 
update.Parameters.AddWithValue("@pword", textBox1.Text); 
update.Parameters.AddWithValue("@email", textBox1.Text); 
update.Parameters.AddWithValue("@site", textBox1.Text); 

update.ExecuteNonQuery(); 

現在的代碼將更新其網站coulms具有指定值的行的詳細信息。請記住,將密碼保存爲純文本不會是安全的選項,請使用適當的加密方式以確保安全。