JOINed 上的 TableAdapter UpdateCommand table
TableAdapter UpdateCommand on JOINed table
假设我有一个从 TableAdapter 加载的 DataGridView,其内容来自 2 JOINed tables,所以 Table C 是:
SELECT A.*, B.name LEFT JOIN B ON B.id = A.b_id
我知道向导没有为此生成 UpdateCommand。但是,如果table的数据几乎全部来自TableA,而TableB只是加入进来提供id在TableA中引用的数据名称,如果用户更改 DataGridView 中的值,我可以只提供自己的更新 Table A 的 UpdateCommand 吗?
也就是说,我想将 Table C 的 UpdateCommand 设置为:
UPDATE A SET value = [[new value]] WHERE id = [[current item]]
如果情况变得更糟,我可以制作一个对话框让用户输入他们的新值并按照这种方式进行。看起来像上面那样做会简单得多。这个方法行得通吗?
您可以在 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"
});
假设我有一个从 TableAdapter 加载的 DataGridView,其内容来自 2 JOINed tables,所以 Table C 是:
SELECT A.*, B.name LEFT JOIN B ON B.id = A.b_id
我知道向导没有为此生成 UpdateCommand。但是,如果table的数据几乎全部来自TableA,而TableB只是加入进来提供id在TableA中引用的数据名称,如果用户更改 DataGridView 中的值,我可以只提供自己的更新 Table A 的 UpdateCommand 吗?
也就是说,我想将 Table C 的 UpdateCommand 设置为:
UPDATE A SET value = [[new value]] WHERE id = [[current item]]
如果情况变得更糟,我可以制作一个对话框让用户输入他们的新值并按照这种方式进行。看起来像上面那样做会简单得多。这个方法行得通吗?
您可以在 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"
});