如果从一个数据源得到的datatable,可以很方便地通过update()更新数据库,但是从一个已经有数据记录的dataTable怎么去更新数据库呢?

解决方案 »

  1.   

    那你就从那个DATATABLE里面取数据出来,然后一个个更新哦
      

  2.   

    如果这个表在数据库中已经存在的话

    con=new SqlConnection(sConStr); 
    SqlCommand cmd=new SqlCommand("Select * from systemlog Where id is null",con); 
    ad=new SqlDataAdapter(cmd); 
    SqlCommandBuilder bd=new SqlCommandBuilder(ad); 
    ad.InsertCommand=bd.GetInsertCommand(); 
    tb=new DataTable(); 
    ad.Fill(tb); 
    row=tb.NewRow(); 
    tb.Rows.Add(row); 
    row["UserName"]="aaa"; 
    row["Attemp_Login_Time"]=DateTime.Now; 
    ad.Update(tb); 
    tb.AcceptChanges(); 
      

  3.   

    enlihs:  这还需要一行行更新阿,是不是效率有点低阿?
      例子中只是加入一行,如果datatable中存在有删除或修改的记录呢?   另外:解释一下ad.InsertCommand=bd.GetInsertCommand(); 的含义
      

  4.   


    道理是一样的.还可以用sqldataadapter.update去更新.你只要把datatable的行状态搞对了就行.例如行状态是Added那你dataadapter.update就会去insert
    当然你的sqldataadapter要配置insert语句.
    或是可以用SqlCommandBuilder帮你生成sql语句.
      

  5.   

    遍历dt里的数据,自己再拼sql语句
    StringBuilder strTemp  = new StringBuilder();//存放插入数据
    StringBuilder bdUpdate = new StringBuilder();//存放更新数据
    //每行记录
    for(int j = 0;j < ds.Tables["dt名称"].Rows.Count; j++)
     {
            strTemp.Remove(0,strTemp.Length);
    bdUpdate.Remove(0,bdUpdate.Length);
            //列
    for(int s = 0; s < ds.Tables["dt名称"].Columns.Count; s++)
    {
                    //每列数据
        strTemp.Append(ByType(ds.Tables["dt名称"].Rows[j][s]));
        strTemp.Append(" ,");
                bdUpdate.Append(ds.Tables["dt名称"].Columns[s].ColumnName + "=" + ds.Tables["dt名称"].Rows[j][s]));
                bdUpdate.Append(" ,");
            }
            strTemp.Remove(strTemp.Length-1,1);
    bdUpdate.Remove(bdUpdate.Length-1,1);
    sqlServer = "update "+ 表名字段变量 +" set  " + bdUpdate.ToString()+" where pkid=" + 主键变量;
      

  6.   

    我没说一行一行更新,这个代码是我直接复制另一篇帖子里面的一些相关代码,不太全,前面就是操作datatable改变datatable,最后两句红色的表示让数据库中的表也接受这个改变
      

  7.   

    例如我可以这样foreach (DataRow dr in dt.Rows)
    {
       dr.SetAdded();//.net2.0中才有此方法
    }
    我可以遍历这个DataTable把他的行状态调整为Added,这样dataadapter.update(dt);就会去执行insert语句插入数据到表中了:)
      

  8.   

    这个问题应该是大家都经常遇到的阿,期待更好的解决办法:  也许我说的不太明白,我再重复一下:  假如myDataTable中记录中有新增的,删除的,修改的的记录,怎么根据这个myDataTable去更新某个数据库?
        (也就是myDataTable怎么和数据库建立上关系?如果用遍历一条条更新的话,效率是否低了点?)
      

  9.   


    我在4,7楼已经说的很明白了.仍然可以用sqldataadapter去更新.设置他的insert,update,delete命令.
    然后调用sqldataadapter.update()方法.此方法会根据你DataTable中的行状态来自动选择相应的语句去更新表另外:解释一下ad.InsertCommand=bd.GetInsertCommand(); 的含义
    ==============
    这个是利用SqlCommandBuilder 来生成insert的command.