重复执行时报错:连接未关闭。 返回

SqlSugar 老数据
4 1866
该叫什么 东汉 发布于2021/5/17
悬赏:5 飞吻

重复执行:

db.Ado.ExecuteCommand("update tableA set Status=2 where Id =100");

有时会报错:

there is already an open DataReader associated with this connection which must be closed first.


db(SqlSugarClient)初化代码:

var db = new SqlSugarClient(new ConnectionConfig

            {

                ConfigId = "default",//用于多库识别

                ConnectionString = conStr,//连接符字串

                DbType = DbType.MySql,

                IsAutoCloseConnection = true,

                InitKeyType = InitKeyType.Attribute,//从特性读取主键自增信息

            })



热忱回答4

  • https://www.donet5.com/Home/Doc?typeId=1224  基本上线程安全引起的

    0 回复
  • 东汉 东汉 VIP0
    2021/5/18

    @fate stay night:如果我能保证不同线程是用不同SqlSugarClient实例,是不是就不会有问题?.net有一种简单的写法可以实现不同线程不同实例:

            public class DbHelper

            {

                //每个线程一个实例

                public static ThreadLocal<SqlSugarClient> ThreadDbInstance = new ThreadLocal<SqlSugarClient>(

                    () => new SqlSugarClient(new ConnectionConfig

                    {

                        ConfigId = "default",//用于多库识别

                        ConnectionString = S.GetDbConnectionString(null),//连接符字串

                        DbType = DbType.MySql,

                        IsAutoCloseConnection = true,

                        //IsShardSameThread = true,//经测试,不同线程,返回的实例还是同一个

                        InitKeyType = InitKeyType.Attribute

                    }

                    ));

                /// <summary>

                /// 获取当前线程的SqlSugarClient实例

                /// </summary>

                public static SqlSugarClient Db

                {

                    get { return ThreadDbInstance.Value; }

                }

            }


    使用时就是:

    DbHelper.Db.Ado.ExecuteCommand("update tableA set Status=2 where Id =100");

    -----

    这样可以吗?


    另外IsShardSameThread = true,//经测试,不同线程,返回的实例还是同一个。IsShardSameThread 属性是干什么的?

    0 回复
  • public void 方法名(){

      var db= new SqlSugarClient(new ConnectionConfig);

       db.xxxx

    }

    写成这样去测试如果可以,那么就自个找原因

    0 回复
  • IsShardSameThread 这玩意儿不要用

    0 回复