JOINed表上的TableAdapter UpdateCommand

时间:2015-01-02 14:21:06

标签: c# .net datagridview tableadapter updatecommand

假设我有一个从TableAdapter加载的DataGridView,其内容来自2个JOINed表,所以表C是:

SELECT A.*, B.name LEFT JOIN B ON B.id = A.b_id

我知道,向导没有为此生成UpdateCommand。但是,如果表的数据几乎完全来自表A,并且表B仅被加入以提供表A中由id引用的数据的名称,那么我是否可以提供我自己的UpdateCommand,如果用户更改,则更新表A. DataGridView中的值?

也就是说,我想将表C的UpdateCommand设置为:

UPDATE A SET value = [[new value]] WHERE id = [[current item]]

如果情况变得更糟,我可以创建一个对话框,让用户输入新值并以此方式执行。看起来像上面那样做起来会简单得多。这种方法有用吗?

1 个答案:

答案 0 :(得分:1)

您可以在DataAdapter的范围内完全按照自己的意愿行事。您可以找到a good walkthrough on MSDN

如果没有看到您的代码,您的适配器的设置可能如下所示:

var dataAdapter = new SqlDataAdapter(
    "SELECT A.*, B.name FROM A LEFT JOIN B ON B.id = A.b_id", sqlConn);

var dataAdapter.UpdateCommand = new SqlCommand(
    "UPDATE A SET value = @Value WHERE id = @Id", sqlConn);

// Define the parameters to be used in the update command.
dataAdapter.UpdateCommand.Parameters.Add(
    "@Value", SqlDbType.NVarChar, 100, "Value_Column_Name");

dataAdapter.UpdateCommand.Parameters.Add(
    new SqlParameter("@Id", SqlDbType.Int)
    {
        SourceColumn = "Id_Column_Name"
    });