数据库读写操作类,怎么封装事务?

时间:2022-09-04 20:02:03
数据库读写操作类,怎么封装事务?
如果是sql语句、存储过程,都可以封装,如下举sql语句的例子:

public bool ExecuteSql(string sql)
{
    bool result = false;
    
    conn...;
    cmd...;
    cmd.CommandText = sql;
    int i = Convert.ToInt32(cmd.ExecuteNonQuery());
    
    if(i == 1)
        result = true;
    
    return result;
}


请教大家,如果是一个事务,怎么样封装比较好?谢谢大家!

8 个解决方案

#1


不明白你的需求

要写事务可以直接在前台写.或是在后过程里是写

#2


你在执行一条语句的这一个方法中,这个方法创建了独立的connection、command,却说它要控制别的connection、command,这是非常自相矛盾的概念。

一条语句如果在事务中,那么你的ExecuteSql方法就应该以DBTransaction为参数(因为由此就可以找到DBConnection,所以不需要DBConnection参数)。

事务的概念是什么?是以单个语句的范畴来实现的吗?

#3


数据库读写操作类,怎么封装事务?

#4


你可以在执行存储过程或者程序以前,用tran.begin;然后在这中间的所有的数据库的操作都用同一个command,等所有的数据库都执行完成了,执行tran.commit;,前提是,你在数据库的操作中,不能进行commit提交,所有的提交都交给事务处理

#5


在初步设计软件之前,要把概念的父子关系搞清楚。如果父子关系搞反了,就会写出非常蹩脚的程序。

#6


可以考虑以下实现方式:
1.sql语句中begin tran.
2.Connection对象.BeginTransaction
3.TransactionScope(分布式事物用的较多)

#7


事物:执行多条命令,要么全部执行,要么全部执行。

#8


可能大家没有明白我的意思,我说清一点点。
现在我写了一个数据库读写操作类DBBase:

public Class DBBase
{
    string connectionString = "***";
    
    //操作sql语句
    public bool ExecuteSql(string sql)
    {
        bool result = false;

        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(sql,connection);
        connection.Open();
        int i = Convert.ToInt32(cmd.ExecuteNonQuery());
        if(i == 1)
            result = true;

        if(cmd != null)
        {
            cmd.Cancel();
            cmd.Dispose();
        }
        if(connection != null)
        {
            connection.Close();
            connection.Dispose();
        }

        return result;
    }
}

//调用DBBase
DBBase db = new DBBase();
string sql = "delete from tableUser where id = 1";
bool result = db.ExecuteSql();


如果参数是一条sql语句,可以直接调用DBBase的ExecuteSql方法。但如果是事务,添加一个操作事务的方法,这个方法应该怎么写?将什么作为参数传入?
不知道这回说清楚了没有?

#1


不明白你的需求

要写事务可以直接在前台写.或是在后过程里是写

#2


你在执行一条语句的这一个方法中,这个方法创建了独立的connection、command,却说它要控制别的connection、command,这是非常自相矛盾的概念。

一条语句如果在事务中,那么你的ExecuteSql方法就应该以DBTransaction为参数(因为由此就可以找到DBConnection,所以不需要DBConnection参数)。

事务的概念是什么?是以单个语句的范畴来实现的吗?

#3


数据库读写操作类,怎么封装事务?

#4


你可以在执行存储过程或者程序以前,用tran.begin;然后在这中间的所有的数据库的操作都用同一个command,等所有的数据库都执行完成了,执行tran.commit;,前提是,你在数据库的操作中,不能进行commit提交,所有的提交都交给事务处理

#5


在初步设计软件之前,要把概念的父子关系搞清楚。如果父子关系搞反了,就会写出非常蹩脚的程序。

#6


可以考虑以下实现方式:
1.sql语句中begin tran.
2.Connection对象.BeginTransaction
3.TransactionScope(分布式事物用的较多)

#7


事物:执行多条命令,要么全部执行,要么全部执行。

#8


可能大家没有明白我的意思,我说清一点点。
现在我写了一个数据库读写操作类DBBase:

public Class DBBase
{
    string connectionString = "***";
    
    //操作sql语句
    public bool ExecuteSql(string sql)
    {
        bool result = false;

        SqlConnection connection = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(sql,connection);
        connection.Open();
        int i = Convert.ToInt32(cmd.ExecuteNonQuery());
        if(i == 1)
            result = true;

        if(cmd != null)
        {
            cmd.Cancel();
            cmd.Dispose();
        }
        if(connection != null)
        {
            connection.Close();
            connection.Dispose();
        }

        return result;
    }
}

//调用DBBase
DBBase db = new DBBase();
string sql = "delete from tableUser where id = 1";
bool result = db.ExecuteSql();


如果参数是一条sql语句,可以直接调用DBBase的ExecuteSql方法。但如果是事务,添加一个操作事务的方法,这个方法应该怎么写?将什么作为参数传入?
不知道这回说清楚了没有?