1数据库有个temp表。字段id,name,other
2在程序中有这样一个datatable如下
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dr;
foreach (string item in CheckStates)
 {
 dr = dt.NewRow();
 dr["userid"] = "id";
 dr["name"] = "true";
 dr["other"] = item.ToString();
 dt.Rows.Add(dr);
 }
dt.AcceptChanges();
ds.Tables.Add(dt);数据可能比较多。我希望能一次性的回填到数据库中(有没有batch方法)
DataTable 和DataSet 都行。
                                               

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4018/4018933.xml?temp=.3535578
      

  2.   

    给段VB的代码你
     Public Sub SaveChanges()
            Dim table As DataTable = CType(DataGrid.DataSource, DataTable)
            Dim changedRow As New ArrayList
            Dim row As DataRow
            For Each row In table.Rows
                If row.RowState <> DataRowState.Unchanged Then
                    changedRow.Add(row)
                End If
                If changedRow.Count = 0 Then
                    Return
                End If
            Next
            conn.Open()
            Dim str As String
            str = "SELECT *,* FROM *"返回数据库的结构
            Dim adapter As New SqlDataAdapter(str, conn)
            Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter)
            adapter.UpdateCommand = builder.GetUpdateCommand
            Dim rows() As DataRow = CType(changedRow.ToArray(GetType(DataRow)), DataRow())
            adapter.Update(rows)
            conn.Close()
            adapter.Dispose()
        End Sub
      

  3.   


    用SqlCommandBuilder 实现:public int UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
    {
    try
    {
    SqlConnection  conn = new SqlConnection(strConnection));
            
    SqlDataAdapter myAdapter = new SqlDataAdapter();
    SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection)this.conn);
    myAdapter.SelectCommand = myCommand;
    SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
    myAdapter.Update(ds,strTblName);

    return 0;
    }
    catch(BusinessException errBU)
    {
    //this.conn.Close();
    throw errBU;
    }
    catch(Exception err)
    {
    //this.conn.Close();
    throw new BusinessException(err);
    }
    }功能:  1.可以实现你对DataSet在UI层做任意操作后,直接丢给这个方法,这个方法就可以自动把你的修改更新到数据库中
            2.只能更新一个表,不能更新关联的表,访问两次数据库,效率有些慢
    注意问题:  表中必须有主键,且更新的表中字段不能有image类型的
      

  4.   

    有没有更好的办法。楼上的办法试了update时候出错了。private void SavePage()
    {DataSet ds = new DataSet();
    DataTable dt = createtable();
    DataRow dr;
    foreach (string item in CheckStates)
    {
    dr = dt.NewRow();
    dr["userid"] = "id";
    dr["PageState"] = true;
    dr["elementValue"] = item.ToString();
    dr["element"] = pageelement.gridviewCheck;
    dr["Step"] = 1;
    dt.Rows.Add(dr);
    }
    dt.AcceptChanges();
    int aa=dt.Rows.Count;
    ds.Tables.Add(dt);UpdateByDataSet(ds,"StepLimitCondition", "server=192.168.2.155;User ID=sa;Password=victor;database=gkw;Connection Reset=FALSE");
    }private DataTable createtable()
    {
    DataTable dt = new DataTable("StepLimitCondition");
    DataColumn column;
    column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    // column.AllowDBNull = false;
    // column.DefaultValue = 25;
    column.Caption = "id";
    column.Unique = true;
    column.ColumnName = "id";
    dt.Columns.Add(column);column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");column.Caption = "userid";
    column.ColumnName = "userid";
    dt.Columns.Add(column);column = new DataColumn();
    column.DataType = System.Type.GetType("System.Boolean");
    column.Caption = "PageState";
    column.ColumnName = "PageState";
    dt.Columns.Add(column);column = new DataColumn();
    column.DataType = System.Type.GetType("System.String");
    column.Caption = "elementValue";
    column.ColumnName = "elementValue";
    dt.Columns.Add(column);column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.Caption = "element";
    column.ColumnName = "element";
    dt.Columns.Add(column);column = new DataColumn();
    column.DataType = System.Type.GetType("System.Int32");
    column.Caption = "Step";
    column.ColumnName = "Step";
    dt.Columns.Add(column);return dt;
    }
      

  5.   

    可能是我的table有问题。还有就是自增长id我在这里没有办法得到。
      

  6.   

    自增长id通过触发器还有sequence应该可以办到吧。
    那个代码错误你贴出错误描述信息