我将数据库中的一个表填入了datatable中,
并且,
所有对这个表的操作如add,update,del,等等
这些操作的结果我都直接写入datatable,
现在我要将datatable 中的结果重新送入数据库,即更新原来的那些表,
但是因为开发中所有数据操作是封装的,
不能使用dataadapter,
请大家看看,
有没有别的法子来处理~用C#+ASP.NET

解决方案 »

  1.   

    C#不用Sql语句?
    我瞎说一下,看合不合你口味
    你可以用Command执行Update,Delete,Insert语句(当然也可以封装)实现这些功能?
      

  2.   

    DataTable 中多加一个字段来标记记录是否被修改
    然后再根据标记循环插入吧其它的我没有什么好办法了
      

  3.   

    楼上的,不用这么麻烦,DATATABLE自已有属性来表示是否被修改
      

  4.   

    通過判斷DataTable中記錄的狀態﹐來使用Command。我也沒實現過﹐大概可以。
    另外可以通過SqlCommandBuilder來動態構造SqlDataAdapter﹐然后提交數據。
      

  5.   

    用SqlCommandBuilder 实现批量更新 :
    http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx
      

  6.   

    封装数据操作的类里就可以用dataadapter或者command对象否则就是SQL语句了
      

  7.   

    .Net提供dataset的update、acceptchanges等方法,但由于dataset本身离岸设计的特殊性,这样不是完全实时的。推荐用类似UpdateCommand.ExecuteNonQuery()之类的方法。
      

  8.   

    我还是提供一下代码片断吧:
    static DataSet ds=new DataSet();
    static IDbDataAdapter adapter=null;
    adapter=objDataHelper.CreateDataAdapte("sourTable","datasetTable","select * from A where address="+"gd");
    objDataHelper.ExecuteDataSet(ds,"datasetTable","select * from A where address="+"gd"); 
    ds.Tables[0].Rows.Add(newRow);
    objDataHelper.ExecuteUpdate(ds,adapter,true);  //true 为自动生成SQL语句
    错误提示为“SQLExecuteException: System.InvalidOperationException: 更新找不到 TableMapping['Table'] 或 DataTable 'Table'。”
    请问代码流程哪里出错?这段代码我也不知道怎么写,因为类被别人封装了
      

  9.   

    数据操作是封装的?那为什么不直接用DAL层的数据更新的相关类的方法了?
    推荐使用Microsoft的SQLHelper或者OracleHelper!
      

  10.   

    谁能给我一个利用Microsoft的SQLHelper示范?要求能够得到一个DataSet,然后修改某一行某一列的数据,再增加一行新数据,最后把它更新到数据库表?分不够再加
      

  11.   

    公司的数据组件和Microsoft的SQLHelper很相似,所以想找一个那样的例子
      

  12.   

    具体参考
    http://singlepine.cnblogs.com/articles/255374.htmlpublic static void UpdateTable(DataTable dt,string TableName,string KeyName)
    {
                foreach(DataRow dr in dt.Rows)
                {
                    updateRow(dr,TableName,KeyName);
                }
    }private static void  updateRow(DataRow dr,string TableName,string KeyName)
    {
                if (dr[KeyName]==DBNull.Value ) 
                {
                    throw new Exception(KeyName +"的值不能为空");
                }
                
                if (dr.RowState ==DataRowState.Deleted)
                {
                    deleteRow(dr,TableName,KeyName);
     
                }
                else if (dr.RowState ==DataRowState.Modified )
                {
                    midifyRow(dr,TableName,KeyName);
                }
                else if (dr.RowState ==DataRowState.Added  )
                {
                    insertRow(dr,TableName,KeyName);
                }
                else if (dr.RowState ==DataRowState.Unchanged )
                {
                    midifyRow(dr,TableName,KeyName);
                }           
    }private static void  midifyRow(DataRow dr,string TableName,string KeyName)
    {
                string UpdateSql            = "Update {0} set {1} {2}";
                string setSql="{0}= @{0}";
                string wherSql=" Where {0}=@{0}";
                StringBuilder setSb    = new StringBuilder();            SqlCommand sqlcom=new SqlCommand();
                DataTable dtb=dr.Table;
            
                for (int k=0; k<dr.Table.Columns.Count; ++k)
                {
                    System.Data.IDataParameter iparam=new  SqlParameter();
                    iparam.ParameterName    = "@"+ dtb.Columns[k].ColumnName;
                    iparam.DbType            = GetDbType(dtb.Columns[k].DataType);
                    iparam.Value            = dr[k];
                    sqlcom.Parameters .Add(iparam);                if (dtb.Columns[k].ColumnName==KeyName)
                    {
                        wherSql=string.Format(wherSql,KeyName);
                    }
                    else
                    {
                        setSb.Append(string.Format(setSql,dtb.Columns[k].ColumnName));    
                        setSb.Append(",");
                    }
                    
                }
                
                string setStr=setSb.ToString();
                setStr=setStr.Substring(0,setStr.Length -1); //trim ,
                
                string sql = string.Format(UpdateSql, TableName, setStr,wherSql);
                sqlcom.CommandText =sql;    
                try
                {
                    ExecCommand(sqlcom);
                }
                catch(Exception ex)
                {
                    throw ex;            
                }
    }
      

  13.   

    那是映射錯誤。你沒有為DataAdapter指定更新的表。
      

  14.   

    已解决。我通过MissingMappingAction指定了映射的表终于成功。谢谢大家!