【发布时间】:2013-02-21 14:59:25
【问题描述】:
我在 C# WinForm 上有一个 dataGridView、textBoxFirstName、buttonSelect 和 buttonUpdate。我的问题末尾有代码。
当我单击 buttonSelect 按钮时,选择结果到 dataGridView 和 textBoxFirstName 没有问题。当我从 dataGridView 中选择不同的记录时,textBoxFirstName 也会自动更新。
当我从 dataGridView 更改“FirstName”字段并单击 buttonUpdate 时,FirstName 字段被保存到数据库中没有问题。
但是当我从 textBoxFirstName 更改“FirstName”时,当我单击 buttonUpdate 时,数据不会保存到数据库中。
当从 textBoxFirstName 进行更改并单击 buttonUpdate 时,如何将 FirstName 字段保存到数据库中?
谢谢。
public partial class Form1 : Form
{
private const string connectionString = "Server=localhost;Database=AdventureWorks2008R2;Trusted_Connection=True";
private SqlConnection con;
private SqlDataAdapter dataAdapter;
public Form1()
{
InitializeComponent();
con = new SqlConnection(connectionString);
}
private void FillGrid(string sqlCommand)
{
dataAdapter = new SqlDataAdapter(sqlCommand, con);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataTable dataTable = new DataTable();
dataAdapter.Fill(dataTable);
dataGridView.DataSource = dataTable;
textBoxFirstName.DataBindings.Clear();
textBoxFirstName.DataBindings.Add("Text", dataTable, "FirstName");
}
private void buttonSelect_Click(object sender, EventArgs e)
{
FillGrid("SELECT TOP 100 * FROM Person.Person");
}
private void buttonUpdate_Click(object sender, EventArgs e)
{
dataAdapter.Update((DataTable)dataGridView.DataSource);
}
}
【问题讨论】:
-
使用参数化查询来避免 SQL 注入。 xkcd.com/327
-
@Ravi 但他没有在查询中使用任何参数
-
@AndreyGordeev 他使用内联 SELECT TOP 100 * FROM Person.Person。在 sql 中使用 * 成本更高
-
谢谢。此代码是简要说明问题的示例。对于此示例,安全性和性能并不那么重要。
-
@jack85,检查您在文本框中所做的更改是否影响
dataTable