【100分跪求】用Attribute实现操作数据库时的 事务处理 的解决方法

RubbyZK 2010-01-20 10:29:56
RT
例如如下代码

[Tran]
public void InsertData()
{
//向数据库中插入多条数据
......
}


希望每当调用此方法的时候,自动为事务处理的方式,跪求赐教,谢谢了。
...全文
208 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
100都没人接吗?
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaolukatie 的回复:]
自定义特性?
[/Quote]

是滴
xiaolukatie 2010-01-20
  • 打赏
  • 举报
回复
自定义特性?
reejayyang 2010-01-20
  • 打赏
  • 举报
回复
没明白Attribute是个什么东西 汗~
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
多谢楼上的大哥,这种方式我知道,不过却没有Attribute来的简洁(虽然性能不一定最佳),
具体自定义的Attribute如何控制方法的执行,我完全不会,所以想借此学习下。
足球中国 2010-01-20
  • 打赏
  • 举报
回复

/// <summary>
/// 执行多条sql语句
/// </summary>
/// <param name="has"></param>
public static void ExecuteSqlTranSortedList(SortHashTable SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
SqlCommand cmd = new SqlCommand();
try
{
ICollection keys = SQLStringList.Keys;
//将键集合转换为ArrayList类
ArrayList al = new ArrayList(keys);
foreach (object key in al)
{
string cmdText = key.ToString();
SqlParameter[] cmdParms = (SqlParameter[])SQLStringList[key];
PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();


}

trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
}
}
}


大多数都是用这种方式吧。代码生成器里就有。

你这种方式没研究过。要反射属性。感觉有点慢。
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
希望能贴段代码参考,谢谢
qqshenyunzcz 2010-01-20
  • 打赏
  • 举报
回复
这个和Attribute有什么关系吗?
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sp1234 的回复:]
引用楼主 rubbyzk 的回复:
希望每当调用此方法的时候,自动为事务处理的方式


谁调用它?怎么调?

你不贴明白具体的,“边沿”太大了,没法回。
[/Quote]

在具体的业务代码中,当需要操作数据时,例如批量插入的时候,就要调用操作数据库的方法,就是这种调用。当然操作数据库的方法是封装在一个类中的。

例如
public class DataAccessBase
{
//插入数据
public void InsertData()
{
....
}
......
}
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xujiaoxiang 的回复:]
使用Attribute+继承实现AOP

参见:http://www.cnblogs.com/over140/archive/2009/01/07/1371307.html
[/Quote]

谢谢你的资料,不错,很有指导性,还没完全看明白
  • 打赏
  • 举报
回复
[Quote=引用楼主 rubbyzk 的回复:]
希望每当调用此方法的时候,自动为事务处理的方式
[/Quote]

谁调用它?怎么调?

你不贴明白具体的,“边沿”太大了,没法回。
RubbyZK 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 patrickpan 的回复:]
根据你的意思,我这样想:
先定义一个特性类:
TranAttribute.cs
C# codepublicclass TranAttribute : Attribute
{public TranAttribute(bool isNeedTran)
{this.isNeedTran= isNeedTran;
}privatebool isNeedTran;publicbool IsNeedTran
{get {return isNeedTran; }
}publicstring DefaultValue {get;set; }
}
返回需要事物处理的SQL语句:
[Tran(true)]
public string GetSQL()
{
  //返回SQL语巨
  ......
  return sql;
}
特性要和反射结合,通过反射读取tran的IsNeedTran值,如果为true,就用事物执行.
[/Quote]

大哥,谢谢,和我所要求的有些差异,但是可以开辟另一种方式。
楼下的继续哈,希望大虾们不吝赐教
xujiaoxiang 2010-01-20
  • 打赏
  • 举报
回复
使用Attribute+继承实现AOP

参见:http://www.cnblogs.com/over140/archive/2009/01/07/1371307.html
patrickpan 2010-01-20
  • 打赏
  • 举报
回复
根据你的意思,我这样想:
先定义一个特性类:
TranAttribute.cs
[Code=C#]
public class TranAttribute : Attribute
{
public TranAttribute(bool isNeedTran)
{
this.isNeedTran = isNeedTran;
}

private bool isNeedTran;
public bool IsNeedTran
{
get { return isNeedTran; }
}

public string DefaultValue { get; set; }
}
[/Code]
返回需要事物处理的SQL语句:
[Tran(true)]
public string GetSQL()
{
//返回SQL语巨
......
return sql;
}
特性要和反射结合,通过反射读取tran的IsNeedTran值,如果为true,就用事物执行.

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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