1、用for语句执行更新操作 " UPDATE为何循环不执行会结束,不能进行第二次循环就直接跳出循环执行.Close()了?
2、在DataGridView中修改数据后,有什么更好的ACCESS数据库更新多行方法?
给出参考代码

解决方案 »

  1.   

     public static OleDbDataAdapter AdapterUpdate(string SelectString, DataTable tableName,string connectionString)
            {            OleDbDataAdapter Adapter = new OleDbDataAdapter();
                
                using (OleDbConnection connetion = new OleDbConnection(connectionString))
                {
                    Adapter.SelectCommand = new OleDbCommand(SelectString, connetion);                OleDbCommandBuilder builder = new OleDbCommandBuilder(Adapter);
                    Adapter.UpdateCommand = builder.GetUpdateCommand();
                   
                     Adapter.Update(tableName);
                     table.AcceptChanges();
                     return Adapter;
                   
                }
            }
    //调用
     DataTable table = (DataTable)dataGridView1.DataSource;
     AdapterUpdate(SelectSql, table,connectionString)//SelectSql为查询语句 connectionString //为数据库连接语句
      

  2.   

    不要用for循环去做,那样繁琐,直接用OleDbCommandBuilder ,它会自动根据DataGridView的数据源DataTable的行状态,更新数据库!试试楼上的
      

  3.   

    只要你绑定了DataTable,不管你是怎么操作,用上面的方法,在dataGridView1新添加行,会在数据库新加一行,修改会更新数据库存相应行
      

  4.   

    抱歉啊,是我没说清楚,我在界面上放了2个dataGridView,第一个用来显示内容不编辑,
    第二个用来调跨行的多行数据方便编辑并更新,且第二个DataTable重新组织并添加了指导文字的列,
    因此第二个DataTable就不同第一个DataTable,不知道这样你上面的代码还能行?DENQH的代码是否对更新数据库效率比较高,如果效率高,那么,像我这样不同的DataTable是否适用?
    还是我该采用什么样的方式才能用到你的代码,从而更高效,给个建议和说明该如何做.
      

  5.   

    第二个DataTable table2= table1.Clone();然后你加入数据,可以使用方面的方法。
      

  6.   

    微软让我有成就所以更依赖微软所开发的包括控件......
    待研究,目前急着马上投入使用,所以,还是按照FOR循环进行更新,速度还可以,已经找到自己语法错误,可以正常运行......
      

  7.   


    问题在于DataTable2!=DataTable1否则就可以,上面已经说过重新组织了DataTable2,也就是从原来的DataTable抽取需要编辑的列又添加了一个提示列,你这样拷贝的话我就不用重新组织DataTable2了,重新组织后DataTable2的列结构已经不和DataTable1等同了,上面方法还可以?
    不知道是否理解了?我还是对你说的有疑惑.我喜欢玩编程,得益于微软发展到现在越来越好用的缘故.
      

  8.   

    我是这样做抽取数据出来后绑定控件进行编辑的
    DataTable dt = myDataSet.Tables[0];
     foreach (DataRow row in dt.Rows)
     {
     string[] subitems = new string[Lies];
     object[] Han = row.ItemArray;
     
    subitems[0] = Han[6].ToString();
     subitems[1] = Han[7].ToString();
     subitems[2] = Han[1].ToString();
     subitems[3] = Han[2].ToString(); }
     
      

  9.   

    我是这样做抽取数据出来后绑定控件进行编辑的
    DataTable dt = myDataSet.Tables[0];
     foreach (DataRow row in dt.Rows)
     {
     string[] subitems = new string[Lies];
     object[] Han = row.ItemArray;
     
    subitems[0] = Han[6].ToString();
     subitems[1] = Han[7].ToString();
     subitems[2] = Han[1].ToString();
     subitems[3] = Han[2].ToString();
     }
    我直接有点不明白你上面的,转来转去,
    直接这样不好么?
    for(i=0;i<myDataSet.Tables[0].Rows.Count();i++)
    {
    string str0=myDataSet.Tables[0].Rows[i][1];
    string str1=myDataSet.Tables[0].Rows[i][7];
    .......}
      

  10.   

    今天使用上面代码确实很好很快,不过由于要处理的数据显示方式不同,所以要重新组织DataTable的,这就是你不明白的地方,比如要显示的数据里面有[6*6]还有[6*12]和[12*12]等不同的,在数据库里面只一个字段记录这个数值,在显示的时候要根据这个数值生成对应表格供修改数据,行和列的格还必须标出序号来人看了才明白修改的是哪个的,就提取这个字段值来形成,所以要重新组织DataTable然后绑定显示,而不是直接把表绑定显示出来修改的,不相同的,那么,这样如果还要使用上面代码就产生一个问题,如何能把重新组织的表修改后对应的值又用来修改到原来读出来表的DataTable里面去呢?有无这种方法?