有个datatable是从数据库中查出来的,我的步骤是这样的:连接数据库,用一个SQL语句从库出查出数据并Fill到这个datatable中,然后跟数据库的连接就断开了接着我又对这个datatable做了增行,删行或是修改的任意操作现在的问题就是:我在做完增删改操作后想把这个datatable保存到数据库中,我不想自己手工生成SQL语句,想用SqlDataAdapter的update来更新这个我修改后的datatable到数据库中,有什么好的方法吗?

解决方案 »

  1.   

    建议你看一下MSDN
    参考http://www.cnblogs.com/ChangTan/archive/2011/12/27/2303901.html
      

  2.   

    public static SqlDataAdapter AdapterUpdate(string SelectString, DataTable table,string connectionString) { SqlDataAdapter Adapter =new SqlDataAdapter();using (SqlConnection connetion=new SqlConnection(connectionString)) { Adapter.SelectCommand =new SqlCommand(SelectString, connetion);SqlCommandBuilder builder =new SqlCommandBuilder(Adapter);Adapter.UpdateCommand = builder.GetUpdateCommand();Adapter.Update(table); table.AcceptChanges(); return Adapter;} }
    //调用
    string  SelectSql="select * from tablename";AdapterUpdate(SelectSql, table,connectionString)//SelectSql为查询语句 connectionString//为数据库连接语句
      

  3.   

    SqlCommandBuilder builder =new SqlCommandBuilder(Adapter);
    楼主可以看下这个类  SqlCommandBuilder 
      

  4.   

    这个头像好眼熟。
    SQL语句完全可以在SQL管理工具里面自动创建,然后通过正则过滤为所需形式,写个工具一劳永逸(我写过)。
    不要用SqlCommandBuilder,它生成的SQL语句出问题根本看不出原因,不利于分析问题。
      

  5.   

    其实使用实体类的话,更加方便,连SQL语句都不用写,当然,设计实体类本身是非常耗时且难度大的(使用现有的ORM框架的除外)
      

  6.   

    SqlCommandBuilder 的update 只能更新一张表 多表更新是不可以 的额
      

  7.   

    如果楼主用的是SQL Server数据库,并且DataTable与你需要输入的表有一一对应关系,那楼上的几位都复杂了参阅MSDN中的SqlBulkCopy
      

  8.   


    我现在用的就是这种方法,也能实现我的需求了,我用的是SQL Server数据库,每次也只会针对一个单表更新数据的。但是有个问题还希望各位帮分析一下:比如一个明细表,随着时间的积累,这个表中的数据量会变得很大,每次更新前还需要运行一次查询语句,会不会导致速度很慢吗?或者说是对性能有很大的影响?