ASP.Net事务问题 菜鸟求高手解答 感激不尽

永远的小鱼 2010-04-03 10:20:58
我有2张表
1.MyUser表 (用户表)里面有
主键 ID int
姓名 Name String

2.MyInfo表 (信息表)里面有
主键 ID int
外键 UserId int //匹配上表MyUser中的ID 主外键关系

问题:
我用 SqlTransaction 事务处理 如 添加一个用户(User) 并填写用户信息(Info);
用事务的话 怎么做呢?

SqlPath = "(local);database=clip;uid=sa;pwd=123456;";
SqlConnecton conn = new SqlConnecton(SqlPath);
conn.open();
SqlTransaction Transaction = conn.BeginTransaction();
rollbak = conn.BeginTransaction();
comm = new SqlCommand();
comm.Connection = conn;
comm.Transaction = Transaction;
comm.ExecuteNonQuery();

String sql = "INSERT INTO MyUser (name) values('张三')";
comm.CommandText = sql;
comm.ExecuteNonQuery();//好像这里还没存到数据库 是脏数据? 不知道在怎么往下面写了 菜鸟 请指教啊。。
...全文
153 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenpk0912 2010-04-03
  • 打赏
  • 举报
回复

create proc adduser
as
declare @err=0 int
begin transaction
insert --用户表
set @err+=@@error;
if(@err>0)
rollback transaction
else
insert --用户信息
set @err+=@@error;
if(@err>0)
b transaction
else
commit transaction
go
这样的可以吗 用错误号
永远的小鱼 2010-04-03
  • 打赏
  • 举报
回复
7楼能给个详细代码么。。
sxy445566 2010-04-03
  • 打赏
  • 举报
回复
学习。。
天下在我心 2010-04-03
  • 打赏
  • 举报
回复
ExecuteReader()方法返回的是一个SqlDataRead对象,这个对象是只读只进的,一般用于读取数据时使用。取得这个对象后,执行一次 Read()方法,读取一行数据。
对于增删改操作时使用comm.ExecuteNonQuery()方法,返回一个INT值,就是受影响的行数,可以用一个int变量来接收它,是否大于0作为执行成功与否的判断。
wuyq11 2010-04-03
  • 打赏
  • 举报
回复
insert into
select @@identity
ExecuteScalar()获取值
再insert into
永远的小鱼 2010-04-03
  • 打赏
  • 举报
回复
4楼 你==我看看
永远的小鱼 2010-04-03
  • 打赏
  • 举报
回复
难道我写的太难了。。。这个源代码

public Boolean InsertGoodsMessage(GoodsMessage message)
{
Boolean boolean = false;
String sql = null;
SqlDataReader read =null;
try
{
conn = DbHelp.RerurnConn();
comm = new SqlCommand("",conn);

sql = String.Format("insert into GoodsInfo (classid,goodsname) values({0},'{1}')",message.GoodInfo.ClassInFo.ID,message.GoodInfo.Name);
comm.CommandText = sql;
read = comm.ExecuteReader();

String ids = read["id"].ToString();
sql = String.Format("Insert into GoodMessage (goodsid,factoryprice,price,unit,factoryid,state) values({0},{1},{2},'{3}',{4},{5})",read["id"].ToString(),message.FactoryPrice,message.Price,message.Unit,message.FactoryInfo.ID,Convert.ToInt32(message.State));
comm.CommandText = sql;
read = comm.ExecuteReader();

sql = String.Format("Insert into GoodCount (goodmessageid,mount) values({0},{1})",read["id"].ToString(),message.GoodCount.Count); //read["id"] read为空 可是语句并没问题
comm.CommandText = sql;
comm.ExecuteNonQuery();
boolean = true;
}
catch {}
finally
{
DbHelp.CloseSqlServer(conn,read);
}
return boolean;
}
天下在我心 2010-04-03
  • 打赏
  • 举报
回复
sqldataread你拿到需要用Read()方法才能读取数据,它是只读只进的。
SqlDataRead read = comm.ExecuteReader();
只有一条记录时。
read.Read();
string Id=read.GetString("ID");
多条记录,循环取值。
while(read.Read())
{
string Id=read.GetString("ID");
.......
}
vip__888 2010-04-03
  • 打赏
  • 举报
回复
返回影响的行数 来判断
永远的小鱼 2010-04-03
  • 打赏
  • 举报
回复
不是这个意思啊!

我要怎么获得comm.ExecuteNonQuery();没有返回结果 如果我拿

SqlDataRead read = comm.ExecuteReader();
read["ID"].ToString();//这里会报错?

正常的步骤是什么呢
天下在我心 2010-04-03
  • 打赏
  • 举报
回复
加上try catch finally这些,
执行的代码写在try块中,最后提交事务。
事务回滚的代码写在catch中,
finally块中关闭连接。

62,266

社区成员

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

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

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

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