Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建事务并传递给多个类和方法_C#_Sql_Asp.net_Sql Server - Fatal编程技术网

C# 如何创建事务并传递给多个类和方法

C# 如何创建事务并传递给多个类和方法,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我有一个wcf web服务,它在来自客户端的每次调用中都被实例化 webservice为每个客户端创建一个事务,如下所示: coreDb = new CoreDb(PROJECT.CreateTransaction(), new FactorySqlCommand()); public static SqlTransaction CreateTransaction(this ICoreProject coreProj) { SqlConnection c

我有一个wcf web服务,它在来自客户端的每次调用中都被实例化

webservice为每个客户端创建一个事务,如下所示:

coreDb = new CoreDb(PROJECT.CreateTransaction(), new FactorySqlCommand());
public static SqlTransaction CreateTransaction(this ICoreProject coreProj)
        {
            SqlConnection conn = new SqlConnection(coreProj.dbStr);
            conn.Open();
            return conn.BeginTransaction();
        }
using (SqlCommand sql_command = factorySqlCommand.SqlCommand(query, transaction))
            {
                sql_command.Parameters.AddWithValue("@userId", user_id);
                if (!String.IsNullOrEmpty(query) && sql_command != null && transaction.Connection != null)
                {
                    sql_command.Connection.Open();
                    if (sql_command.Connection.State == System.Data.ConnectionState.Open)
                    {
                        using (SqlDataReader myReader = sql_command.ExecuteReader())
                        {
                            while (myReader.Read())
                            {
创建事务函数如下所示:

coreDb = new CoreDb(PROJECT.CreateTransaction(), new FactorySqlCommand());
public static SqlTransaction CreateTransaction(this ICoreProject coreProj)
        {
            SqlConnection conn = new SqlConnection(coreProj.dbStr);
            conn.Open();
            return conn.BeginTransaction();
        }
using (SqlCommand sql_command = factorySqlCommand.SqlCommand(query, transaction))
            {
                sql_command.Parameters.AddWithValue("@userId", user_id);
                if (!String.IsNullOrEmpty(query) && sql_command != null && transaction.Connection != null)
                {
                    sql_command.Connection.Open();
                    if (sql_command.Connection.State == System.Data.ConnectionState.Open)
                    {
                        using (SqlDataReader myReader = sql_command.ExecuteReader())
                        {
                            while (myReader.Read())
                            {
SQL命令工厂实现如下所示

public SqlCommand SqlCommand(string query,
        SqlTransaction transaction)
    {
        SqlCommand sql_command = new SqlCommand(query, transaction.Connection, transaction);
        sql_command.Transaction = transaction;
        sql_command.Connection = transaction.Connection;
        return sql_command;
    }
当我尝试在如下数据库函数中使用以下对象时:

coreDb = new CoreDb(PROJECT.CreateTransaction(), new FactorySqlCommand());
public static SqlTransaction CreateTransaction(this ICoreProject coreProj)
        {
            SqlConnection conn = new SqlConnection(coreProj.dbStr);
            conn.Open();
            return conn.BeginTransaction();
        }
using (SqlCommand sql_command = factorySqlCommand.SqlCommand(query, transaction))
            {
                sql_command.Parameters.AddWithValue("@userId", user_id);
                if (!String.IsNullOrEmpty(query) && sql_command != null && transaction.Connection != null)
                {
                    sql_command.Connection.Open();
                    if (sql_command.Connection.State == System.Data.ConnectionState.Open)
                    {
                        using (SqlDataReader myReader = sql_command.ExecuteReader())
                        {
                            while (myReader.Read())
                            {
我犯了一个奇怪的错误

连接已断开,无法恢复。连接 被服务器标记为不可恢复。没有人试图这样做 恢复连接

我的问题是,实例化一个类中的读写事务并将其传递给多个不同类的正确方法是什么?


请记住,每个函数调用都会附加SqlCommand对象,以便在将数据返回到请求的客户端之前可以调用所有SqlCommand。

在哪一行出现此错误?错误在第行:using(SqlDataReader myReader=sql_command.ExecuteReader())我想知道它是否与事务的作用域有关?对我来说,在执行查询之前,连接似乎已关闭,然后它表示无法恢复连接。奇怪的是,当我进入调试器时,我可以看到sql_命令连接状态为打开,并且在执行读取之前通过了检查