2017-02-28 53 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具有指定值的行的详细信息。请记住,将密码保存为纯文本不会是安全的选项,请使用适当的加密方式以确保安全。