多条数据插入多张表中

赢光小虾米 2008-11-07 07:59:51
多条数据插入到几张表的例子。
还要有事务处理。
能告诉我如何实现吗?
比如:
1.
2.
3.
4.
5.
6.
7.
8.
我把1.2.3.插入第一张表。
4.5.6.插入第二张表。
7.8.插入第三张表。如果分批插入。还必须保证数据插入同步。保证第一。二。三张合法插入才。如果有一个不能插入。则事务回滚。这个三张表都有主键。一张表中。主键是ornid.
第二表中。请主键是id.不过也有ornid.第三张表中主键是id.不过也有ornid。其实这三张表中都是由ornid关联的。
...全文
148 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赢光小虾米 2008-11-08
  • 打赏
  • 举报
回复
存储过程我不是很懂啊!我不太会写。哪位大侠能给个源码啊!感谢
lfzpf 2008-11-07
  • 打赏
  • 举报
回复
用存储过程,中间加上事务处理,最后用@@error 判断有没有出错 就可以了
antiking 2008-11-07
  • 打赏
  • 举报
回复
生成XML 用存储过程.
wy345642813 2008-11-07
  • 打赏
  • 举报
回复
什么数据库?Oracle有回闪机制
yagebu1983 2008-11-07
  • 打赏
  • 举报
回复
用存储过程!!
lovehongyun 2008-11-07
  • 打赏
  • 举报
回复
using(TransactionScope scope = new TransactionScope()) 
{
//你的insert操作.
//
scope.Complete();
}
phper2008 2008-11-07
  • 打赏
  • 举报
回复

//我自己的一个事务处理例子,你照着写把知道怎么样建立事务,怎么样回滚,怎么样抛出异常就可以了
//具体sql代码就是插入语句啊,你自己可以搞定的
public static int TranPdMainPlanEdit(ProductMainPlanInfo plan, DataTable dt, string act)
{
int returnValue = -1;
if (act == "add")
{
SqlConnection conn = SqlDataProvider.GetSqlConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
if(conn.State == ConnectionState.Closed)conn.Open();
SqlTransaction tran = conn.BeginTransaction();
cmd.Transaction = tran;
try
{
///是否重复插入
string sql = "select SheetNo from [tProductMainPlan] where SheetNo='"+plan.SheetNo+"'";
cmd.CommandText = sql;
string sn = cmd.ExecuteScalar() == null ? "" : cmd.ExecuteScalar().ToString();
if (sn == plan.SheetNo) { return 0; }

///插入主表
sql = "insert into [tProductMainPlan]([SheetNo],[PlanType],[PlanDate],[pNo],[TableMan],[RecordTime],[TotalMoney],[Memo]) values";
sql += "('" + plan.SheetNo + "'," + plan.PlanType + ",'"+ plan.PlanDate +"','"+ plan.PNO +"','"+ plan.TableMan +"',";
sql += "'"+plan.RecordTime.ToString()+"','"+ plan.TotalMoney.ToString() +"','"+ plan.Memo +"')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
CommonConfig.CreateSystemLog(plan.TableMan, "Table [tProductMainPlan] Insert", "添加一项经营计划,单号:"+plan.SheetNo+" 批号:"+plan.PNO+" 总金额:"+plan.TotalMoney.ToString());
cmd.CommandText = "select @@identity";
plan.SheetId = Int32.Parse(cmd.ExecuteScalar().ToString());

int addnum = 0;
for (int i = 0; i < dt.Rows.Count;i++ )
{
///插入副表
DataRow dr = dt.Rows[i];
sql = "insert into [tProductMainPlanDetail]([SheetID],[GoodsID],[GoodsCode],[GoodsName],[Model],[Spec],[Unit],[Price],[pNumber],[fNumber],[PNO],[Moneys]) values";
sql += "(" + plan.SheetId + ",'" + dr["GoodSID"].ToString() + "','" + dr["GoodsCode"].ToString() + "','" + dr["GoodsName"].ToString() + "',";
sql += "'" + dr["Model"].ToString() + "','" + dr["Spec"].ToString() + "','" + dr["Unit"].ToString() + "','" + dr["Price"].ToString() + "',";
sql += "'" + dr["pNumber"].ToString() + "','" + dr["fNumber"].ToString() + "','" + plan.PNO + "','" + dr["Moneys"].ToString() + "')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
addnum++;
}
CommonConfig.CreateSystemLog(plan.TableMan, "Table [tProductMainPlanDetail] Insert", "添加" + addnum.ToString() + "项经营计划详细信息,计划单号:" + plan.SheetNo);
tran.Commit();
returnValue = 1;
}
catch (Exception ex)
{
tran.Rollback();
returnValue = -1;
CommonConfig.CreateErrorLog("添加经营计划出错,单号:"+plan.SheetNo+" 详细信息 \n"+ex.Message);
}
finally
{
conn.Close();
}
}
}

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧