请问datagridview如何做到批量保存修改后的数据到数据库?
我现在的方法只能修改一条或是添加一条 保存一次 ,很不方便 所以想知道如何做到批量操作 
在网上搜到了几个代码 但测试下感觉效果不是很理想,会丢数据
请问大家工作中是如何处理的?希望给段代码学习下 50分感谢

解决方案 »

  1.   

    /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="sqlStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
            public static void ExecuteSqlTran(Hashtable sqlStringList)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        SqlCommand cmd = new SqlCommand();
                        try
                        {
                            //循环
                            foreach (DictionaryEntry myDE in sqlStringList)
                            {
                                string cmdText = myDE.Key.ToString();
                                SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
                                PrepareCommand(cmd, conn, trans, cmdText, CommandType.Text, cmdParms);
                                int val = cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
      

  2.   

    要放到SqlTransaction里,用循环加。
      

  3.   

        public  SqlDataAdapter daStlyeMaterial = new SqlDataAdapter();
        public  BindingSource bindingStlyeMaterial = new BindingSource();
        public  DataTable dtStlyeMaterial = new DataTable();
        public  SqlCommandBuilder builderMaterial = new SqlCommandBuilder();     private 给datagridview加数据源
         {
                    string str = "select * from table";
                    daStlyeMaterial = new SqlDataAdapter(str,[email protected]());
                    builderMaterial = new SqlCommandBuilder(daStlyeMaterial);
                    daStlyeMaterial.Fill(dtStlyeMaterial);
                    datagridview1.DataSource=dtStlyeMaterial;
          }    private void butn_ks_bc_Click(object sender, EventArgs e)
               {
               
                       bindingStlyeMaterial.EndEdit();
                       daStlyeMaterial.Update(dtStlyeMaterial);
                }
      

  4.   

    用SqlCommandBuilder试试, 应该能满足你的要求. SqlConnection thisConnection = new SqlConnection(
                   @"Data Source=HUI\SQLSERVER;Initial Catalog=Northwind;Integrated Security=True"); SqlDataAdapter thisAdapter = new SqlDataAdapter(
    "SELECT CustomerID, CompanyName FROM Customers", thisConnection);        //定义一个SqlCommandBuilder 
            SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); DataSet thisDataSet = new DataSet();
    thisAdapter.Fill(thisDataSet, "Customers");        //用thisDataSet.Tables["Customers"]填充datagridview
    //更新datagridview的同时更新thisDataSet.Tables["Customers"]内的相应字段
            for(int i=0; i<9; i++)
    thisDataSet.Tables["Customers"].Rows[i]["CompanyName"] = "string"+i.ToString(); thisAdapter.Update(thisDataSet, "Customers");    //一次性提交更新 thisConnection.Close();
      

  5.   

      事务是一种比较常规做法,也可用DataAdapter + 强类型数据集实现,调用相关方法时最好lock()一下
      

  6.   

    先从DataGridView中取所有的数据到  DataTable dt 中 再 DataTable changedTalbe; 
    changedTalbe = dt.GetChanges(DataRowState.Unchanged); 
    changedTalbe 是没有发生变化的数据 //新增的 
    changedTalbe = dt.GetChanges(DataRowState.Added); 
    //修改的 
    changedTalbe = dt.GetChanges(DataRowState.Modified); 
    //删除的 
    changedTalbe = dt.GetChanges(DataRowState.Deleted); 
      

  7.   

    我 用的是这段代码 来批量增删改插 但却不明白其中的道理
        SqlConnection con = new SqlConnection("server='localhost';database='Work';user='sa';password='123'");
                SqlCommand cmd = new SqlCommand();
                cmd = con.CreateCommand();
                cmd.CommandText = "select * from Table_gongzi";
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                da.Update(ds.Tables[0]);
                dataGridView1.Update();
    我用下面的代码修改了上面的代码后 却实现不了功能 不知道为什么
    SqlConnection con = new SqlConnection("server='localhost';database='Work';user='sa';password='123'");
                SqlCommand cmd = new SqlCommand("select * from Table_gongzi",con);
               // cmd = con.CreateCommand();
                //cmd.CommandText = "select * from Table_gongzi";
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                da.Update(ds.Tables[0]);
                dataGridView1.Update();
      

  8.   

    如果你要使用SqlCommandBuilder的话,首先要求你的表有主键
    然后他会根据你提供的查询语句,生成插入,修改,删除语句
    再根据DataTable对应的数据行状态来调用对应的语句执行数据库操作
      

  9.   

    SqlCommand cmd 必须制定Command的模式,有几种selectCommand,updatecommand,insertcommand
      

  10.   

    哦 这个意思 谢谢 SqlCommandBuilder cb = new SqlCommandBuilder(da);定义的cb没有使用 不知道有什么用
      

  11.   

    如果你不定义 SqlCommandBuilder cb , 那么da.Update是执行不了的, 11楼已经回答了,  SqlCommandBuilder 会根据你提供的查询语句,生成插入,修改,删除语句, 再根据DataTable对应的数据行状态来调用对应的语句执行数据库操作.