C# SQL Server、Datagrid:从中选择,更新所有表中的字段
我想更新sql server中在rowchanged事件中具有datagrid特定字段的所有表 我还考虑过使用父键和子键,但至少有两个值决定了项的唯一性。除此之外,主工作表必须具有重复的值,只有一列可以识别它在从属表上的位置 即 项目>项目位置(项目可以是spit和物理分布) 或者,我考虑过使用commandbuilder,但我想不出一种合乎逻辑的方法来使用它 然而,我不确定这句话会怎么说。。 我的想法是: 这还必须包括主表上的所有值C# SQL Server、Datagrid:从中选择,更新所有表中的字段,c#,sql,sql-server,datagridview,C#,Sql,Sql Server,Datagridview,我想更新sql server中在rowchanged事件中具有datagrid特定字段的所有表 我还考虑过使用父键和子键,但至少有两个值决定了项的唯一性。除此之外,主工作表必须具有重复的值,只有一列可以识别它在从属表上的位置 即 项目>项目位置(项目可以是spit和物理分布) 或者,我考虑过使用commandbuilder,但我想不出一种合乎逻辑的方法来使用它 然而,我不确定这句话会怎么说。。 我的想法是: 这还必须包括主表上的所有值 UPDATE "alltables" SET " + iOn
UPDATE "alltables" SET " + iOne + "," + iTwo + " WHERE column1="previous entry"
我是如何接近它的:
private void button1_Click_1(object sender, EventArgs e)
{
string iOne = dgMasterGridView.SelectedRows[0].Cells[1].Value + string.Empty;
string iTwo = dgMasterGridView.SelectedRows[0].Cells[2].Value + string.Empty;
string iThree = dgMasterGridView.SelectedRows[0].Cells[3].Value + string.Empty;
string slaveiOne = dgSlave1GridView.SelectedRows[0].Cells[1].Value + string.Empty;
string slaveiTwo = dgSlave1GridView.SelectedRows[0].Cells[2].Value + string.Empty;
string slaveiThree = dgSlave1GridView.SelectedRows[0].Cells[3].Value + string.Empty;
try
{
using (SqlConnection con = new SqlConnection(Connection.MTRDataBaseConn))
{
con.Open();
SqlCommand cmd = new SqlCommand();
// ??????????????? UPDATE STATEMENT ???????????????
cmd.CommandText = "UPDATE "alltables" SET " + iOne + "," + iTwo + " WHERE column1="previous entry";
cmd.Connection = con;
cmd.Parameters.AddWithValue("@Item1", iOne);
cmd.Parameters.AddWithValue("@Item2", iTwo);
cmd.Parameters.AddWithValue("@Item3", iThree);
cmd.ExecuteNonQuery();
MessageBox.Show("Information has been submitted");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
您可以通过以下两种方式完成: 1-通过一个逐个更新表的存储过程,您需要将新值作为参数发送 2-通过.net代码如果您的表有一个数据集,您可以使用.Update()使用SQLDataAdapter
本次更新;我在代码中使用此函数,使用带有begin transaction、commit和roolback on error.的数据适配器更新多个数据集。。希望这能帮助你
public bool Update_DS(ArrayList strTableName, ArrayList objSqlDataAdapter, ArrayList objDataSet)
{
bool ErrorOccured = false;
try
{
_LastException = null;
objSqlTransaction = objSqlConnection.BeginTransaction();
for (int i = 0; i < objSqlDataAdapter.Count; i++)
{
SqlDataAdapter objDATemp = (SqlDataAdapter)objSqlDataAdapter[i];
//objDATemp.SelectCommand = new SqlCommandBuilder(objDATemp).getse();
objDATemp.SelectCommand.Transaction = objSqlTransaction;
objDATemp.SelectCommand.Connection = objSqlConnection;
objDATemp.UpdateCommand = new SqlCommandBuilder(objDATemp).GetUpdateCommand();
objDATemp.UpdateCommand.Transaction = objSqlTransaction;
objDATemp.UpdateCommand.Connection = objSqlConnection;
objDATemp.InsertCommand = new SqlCommandBuilder(objDATemp).GetInsertCommand();
objDATemp.InsertCommand.Transaction = objSqlTransaction;
objDATemp.InsertCommand.Connection = objSqlConnection;
objDATemp.DeleteCommand = new SqlCommandBuilder(objDATemp).GetDeleteCommand();
objDATemp.DeleteCommand.Transaction = objSqlTransaction;
objDATemp.DeleteCommand.Connection = objSqlConnection;
objDATemp.Update((DataSet)objDataSet[i], strTableName[i].ToString());
}
return true;
}
catch (Exception ex)
{
_LastException = ex;
ErrorOccured = true;
//OnError(ex);
return false;
}
finally
{
if (ErrorOccured)
objSqlTransaction.Rollback();
else
objSqlTransaction.Commit();
if (objSqlCommand != null)
{
objSqlCommand.Dispose();
objSqlCommand = null;
}
}
}
public bool Update_DS(ArrayList strTableName、ArrayList objSqlDataAdapter、ArrayList objDataSet)
{
bool errorOccursed=false;
尝试
{
_LastException=null;
objSqlTransaction=objSqlConnection.BeginTransaction();
for(int i=0;i
在一条update语句中只能更新一个表。如果你想更新多个表,你必须写多个update语句。稍微绕道,但你可能想看看这篇文章@ZoharPeled Ok,唯一的问题是,用户可以创建额外的从属表和输入信息。如何在所有表中运行一个与单个语句一起运行的循环?“alltables”是一个可以在代码中动态更改以枚举所有表的变量。您需要使用schema命令..Update()从数据库中获取所有制表符名称;不会跨所有表中匹配的所有字段更新,对吗?谢谢!!这很有帮助。