我想我需要澄清(My)SqlDataAdapter的工作原理。我有一个DGV用于显示MySQL表中的一列;但是当我需要编辑记录时,我需要大多数其他字段,而我在另一个winform中执行此操作。所以我想我需要一些最佳实践建议:
问题1:绑定到数据源时:我是否需要在表单中选择要编辑的所有字段?
string query = "SELECT * FROM cusdata";
cusAdapter = new MySqlDataAdapter(query,pppDB.sqlConn);
cusAdapter.Fill(mainSet,"cusdata");
dgv_cusData.DataSource = mainSet.Tables["cusdata"]
问题2:我在网上看到很多关于仅选择要在DGV中显示的字段的信息,但是如果我编辑该数据,那么适配器如何准确知道后端正在更新哪条记录??
我想我对不同的方法感到有点困惑,我需要一些指导。我想要一个datagridview,我可以在其中显示单个列(客户名称)。我希望能够以另一种形式编辑客户记录,并在成功完成数据库操作后使用新信息刷新DVG。
到今天为止,我已经给了一个周末最好的部分,找到一篇文章或博客,或者其他可以证明这一点的内容。列表形式范例。有人可以指点我正确的方向吗?非常感谢社区。 p>
答案 0 :(得分:1)
根据经验,您不应选择所有字段,而只选择您需要的字段
Select CustId, CustName, CustAddress, CustPhone from cusdata
这会影响表现。
编辑数据时,您可以使用以下代码:
string connectionString = "[Put your connection string here]";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("UPDATE cusdata SET CustName=@CustName, CustAddress=@CustAddress WHERE CustId=@CustId", conn))
{
cmd.Parameters.AddWithValue("@CustId", 1);
cmd.Parameters.AddWithValue("@CustName", "Name Input");
cmd.Parameters.AddWithValue("@CustAddress", "Address input");
int rows = cmd.ExecuteNonQuery();
//rows number of record got updated
}
}
这部分代码允许您指定要在表格中更新的字段和数据
cmd.Parameters.AddWithValue("@CustId", 1);
cmd.Parameters.AddWithValue("@CustName", "Name Input");
cmd.Parameters.AddWithValue("@CustAddress", "Address input");