Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server、Datagrid:从中选择,更新所有表中的字段_C#_Sql_Sql Server_Datagridview - Fatal编程技术网

C# SQL Server、Datagrid:从中选择,更新所有表中的字段

C# SQL Server、Datagrid:从中选择,更新所有表中的字段,c#,sql,sql-server,datagridview,C#,Sql,Sql Server,Datagridview,我想更新sql server中在rowchanged事件中具有datagrid特定字段的所有表 我还考虑过使用父键和子键,但至少有两个值决定了项的唯一性。除此之外,主工作表必须具有重复的值,只有一列可以识别它在从属表上的位置 即 项目>项目位置(项目可以是spit和物理分布) 或者,我考虑过使用commandbuilder,但我想不出一种合乎逻辑的方法来使用它 然而,我不确定这句话会怎么说。。 我的想法是: 这还必须包括主表上的所有值 UPDATE "alltables" SET " + iOn

我想更新sql server中在rowchanged事件中具有datagrid特定字段的所有表

我还考虑过使用父键和子键,但至少有两个值决定了项的唯一性。除此之外,主工作表必须具有重复的值,只有一列可以识别它在从属表上的位置

项目>项目位置(项目可以是spit和物理分布)

或者,我考虑过使用commandbuilder,但我想不出一种合乎逻辑的方法来使用它

然而,我不确定这句话会怎么说。。 我的想法是:

这还必须包括主表上的所有值

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()从数据库中获取所有制表符名称;不会跨所有表中匹配的所有字段更新,对吗?谢谢!!这很有帮助。