0

我想我需要澄清一下 (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 中显示的字段的信息,但是如果我编辑该数据,适配器如何确切知道后端正在更新哪些记录?

我想我对不同的方法有点困惑,我需要一些指导。我想要一个可以显示单列(客户名称)的数据网格视图。我希望能够以另一种形式编辑客户记录,并在成功完成数据库操作后使用新信息刷新 DVG。

到今天为止,我已经度过了一个周末最好的部分,以找到一篇文章或博客或一些可以证明这一点的东西。列表形式范式。有人可以指出我正确的方向吗?非常感谢社区。

4

1 回答 1

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");
于 2013-03-20T21:42:36.267 回答