我将数据库中的一个表填入了datatable中,
并且,
所有对这个表的操作如add,update,del,等等
这些操作的结果我都直接写入datatable,
现在我要将datatable 中的结果重新送入数据库,即更新原来的那些表,
但是因为开发中所有数据操作是封装的,
不能使用dataadapter,
请大家看看,
有没有别的法子来处理~用C#+ASP.NET
并且,
所有对这个表的操作如add,update,del,等等
这些操作的结果我都直接写入datatable,
现在我要将datatable 中的结果重新送入数据库,即更新原来的那些表,
但是因为开发中所有数据操作是封装的,
不能使用dataadapter,
请大家看看,
有没有别的法子来处理~用C#+ASP.NET
我瞎说一下,看合不合你口味
你可以用Command执行Update,Delete,Insert语句(当然也可以封装)实现这些功能?
然后再根据标记循环插入吧其它的我没有什么好办法了
另外可以通過SqlCommandBuilder來動態構造SqlDataAdapter﹐然后提交數據。
http://blog.csdn.net/chengking/archive/2005/08/26/465874.aspx
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'。”
请问代码流程哪里出错?这段代码我也不知道怎么写,因为类被别人封装了
推荐使用Microsoft的SQLHelper或者OracleHelper!
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;
}
}