SqlTransaction 事物使用参数 SqlParameter 提交事物会不行? 20

stringSqlStr1=@"updateZtb_1setUserName=@UnamewhereId=@id";stringSqlStr2=@"updateZtb_2... string SqlStr1 = @"update Ztb_1 set UserName = @Uname where Id = @id";
string SqlStr2 = @"update Ztb_2 set Jifen = @jifen where Id = @aid";
string[] SqlStrZu = new string[2];
SqlStrZu[0] = SqlStr1;
SqlStrZu[1] = SqlStr2;

SqlParameter[] SqlPara = { new SqlParameter("@Uname", "李四"), new SqlParameter("@id", 1), new SqlParameter("@jifen", "132"), new SqlParameter("@aid", 2) };

ZhiXing(SqlStrZu, SqlPara); //执行这个方法

private void ZhiXing(string[] SqlStr ,SqlParameter[] SqlPara)
{
SqlConnection Con = Zdb.ReturnCon();
Con.Open();
SqlTransaction Tran = Con.BeginTransaction();

SqlCommand Cmd = new SqlCommand();
Cmd.Connection = Con;

foreach (SqlParameter Npara in SqlPara)
{
Cmd.Parameters.Add(Npara);
}

Cmd.Transaction = Tran;
try
{
foreach (string NsqlStr in SqlStr)
{
Cmd.CommandText = NsqlStr;
Cmd.ExecuteNonQuery();
}

Tran.Commit(); // 没起作用,我故意输入错了一个语句,但是还是有个执行成功了,更新了数据表Ztb_1,我的表Ztb_2没有id 2所以没被更新 ,但是不对啊,应该2个都成功才能执行,有错误应该回滚才是,但是没有回滚。希望有高手来解答一下,指点一下。
}
catch
{
Tran.Rollback();
}
finally
{
Con.Close();
}

}
展开
 我来答
孙中吕
2009-08-22 · 专注C/S架构开发框架技术研究
孙中吕
采纳数:435 获赞数:788

向TA提问 私信TA
展开全部
错在这里:
foreach (SqlParameter Npara in SqlPara)
{
Cmd.Parameters.Add(Npara);
}

Cmd.Parameters内有4个参数而下面的语句调用明显有问题

foreach (string NsqlStr in SqlStr)
{
Cmd.CommandText = NsqlStr;
Cmd.ExecuteNonQuery();
}
看你自己写的:
string SqlStr1 = @"update Ztb_1 set UserName = @Uname where Id = @id";
string SqlStr2 = @"update Ztb_2 set Jifen = @jifen where Id = @aid";

SqlStr1 只有2个参数,

SqlStr2 也只有2个参数,而Cmd.Parameters内有4个参数,能行吗>?

你改为下面的就ok了
string sqlAll= SqlStr1 +SqlStr2;
Cmd.CommandText = sqlAll;
Cmd.ExecuteNonQuery();
kaonilaomude1
2009-08-22 · TA获得超过1225个赞
知道小有建树答主
回答量:1316
采纳率:0%
帮助的人:0
展开全部
分给我`
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式