我现在在做一个半成品OA系统,发现前面的人同时处理多张数据库的表时是这样的:
//插入合同信息;counts,返回的是最新插入的主键ID值
int counts = helper.AddNew(info);
string text = this.listvalue.Value.ToString();
if (text != "" && text != null)
{
text = text.Substring(0, this.listvalue.Value.ToString().Length - 1);
string[] text1 = text.Split('@');
//合同明细
List<Tb_HTMXInfo> list = new List<Tb_HTMXInfo>();
foreach (string str in text1)
{
//依次插入合同明细
Tb_HTMXInfo materId = new Tb_HTMXInfo();
string[] str2 = str.Split(',');
//物品名称
materId.Hm_HyType = str2[0].ToString();//行业类型ID
materId.Hm_CpName = str2[1].ToString(); 后面还有:
//如果合同和合同明细都插入成功,则提示操作成功
if (counts > 0 & result == true)
{
Response.Write("<script>alert('操作成功!');location.href='../main.aspx'</script>");
}
else
{
Response.Write("<script>alert('操作失败!')</script>");
}
我看到这代码很是来火,这事糊弄谁呢?尼玛多张表数据操作,居然不用事物处理!虽然我是菜鸟,但起码我不会这么做。我想把这个问题纠正过来,可是事务处理我用的不太熟悉,更别说改别人的代码。分布式事物处理?好像记得有个方法,是在数据访问层的方法里面创建一个事物对象,其它关联的地方去引用这个食物对象,但是我忘记了具体操作,求哪位高手帮个忙,给个具体的解决方案。正在头痛中...
//插入合同信息;counts,返回的是最新插入的主键ID值
int counts = helper.AddNew(info);
string text = this.listvalue.Value.ToString();
if (text != "" && text != null)
{
text = text.Substring(0, this.listvalue.Value.ToString().Length - 1);
string[] text1 = text.Split('@');
//合同明细
List<Tb_HTMXInfo> list = new List<Tb_HTMXInfo>();
foreach (string str in text1)
{
//依次插入合同明细
Tb_HTMXInfo materId = new Tb_HTMXInfo();
string[] str2 = str.Split(',');
//物品名称
materId.Hm_HyType = str2[0].ToString();//行业类型ID
materId.Hm_CpName = str2[1].ToString(); 后面还有:
//如果合同和合同明细都插入成功,则提示操作成功
if (counts > 0 & result == true)
{
Response.Write("<script>alert('操作成功!');location.href='../main.aspx'</script>");
}
else
{
Response.Write("<script>alert('操作失败!')</script>");
}
我看到这代码很是来火,这事糊弄谁呢?尼玛多张表数据操作,居然不用事物处理!虽然我是菜鸟,但起码我不会这么做。我想把这个问题纠正过来,可是事务处理我用的不太熟悉,更别说改别人的代码。分布式事物处理?好像记得有个方法,是在数据访问层的方法里面创建一个事物对象,其它关联的地方去引用这个食物对象,但是我忘记了具体操作,求哪位高手帮个忙,给个具体的解决方案。正在头痛中...
SqlConnection conn = new SqlConnection(“...”);
conn.Open();
//开启事务
SqlTransaction sqlTransaction = conn.BeginTransaction(); // 将事务应用于Command
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = conn;
sqlCommand.Transaction = sqlTransaction;
try{
...
//成功提交
sqlTransaction.Commit();
}catch (Exception)
{
//出错回滚
sqlTransaction.Rollback();
conn.Close();
conn.Dispose();
}
conn.Open();
//开启事务
SqlTransaction sqlTransaction = conn.BeginTransaction();
//将事务应用于Command
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = conn;
sqlCommand.Transaction = sqlTransaction;
try{
sqlCommand.CommandText="....";//要执行的SQL
sqlCommand.ExecNonQuery();
sqlCommand.CommandText = "...";//要执行的SQL2
....
//成功提交
sqlTransaction.Commit();
}catch (Exception)
{
//出错回滚
sqlTransaction.Rollback();
}
finally
{
conn.Close();
conn.Dispose();
}
这个方法是不是将SqlConnection conn = new SqlConnection(“...”);
conn.Open();
//开启事务
SqlTransaction sqlTransaction = conn.BeginTransaction(); // 将事务应用于Command
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = conn;
sqlCommand.Transaction = sqlTransaction;
这段代码全部应用到DAO的方法里面去?就是所有的方法都加这段代码?然后try{...//这里面写每个对象自己的增加方法?还是增加的SQl(合同、合同明细的增加SQL)都放到这里面?}
"1楼"的ado.net中的事务处理
在cs类访问数据访问类对象是可以的。
http://www.cnblogs.com/blsong/archive/2010/08/13/1798987.html