dappermysql报错多个datareader

dappermysql报错多个datareader,第1张

启动几个线程,每个线程循环进行sql *** 作。

代码的功能很简单,启动几个线程,每个线程循环进行sql *** 作,打印输出,如果是只有一个线程的话怎么用都没有问题,但是两个或者超过两个线程就会一直有Datareader被占用的这个错误。可以用下面的代码:

publicpartialclassForm2:Form

{

privateDataBasePoolm_connpool=DataBasePool.getInstance()

privateMySqlConnectionm_conn

privateRandomm_random=newRandom()

publicForm2()

{

InitializeComponent()

}

privatevoidForm2_Load(objectsender,EventArgse)

{

ThreadPool.SetMaxThreads(50,50)

}

privatevoidbutton1_Click(objectsender,EventArgse)

{

for(inti=0i

{

stringtmpStr="【"+i.ToString()+"】"

ThreadPool.QueueUserWorkItem(newWaitCallback(ProcessRun),tmpStr)

//Thread.Sleep(100000)

}

}

privatestaticobjectobj=newobject()

privatevoidProcessRun(ObjectstateInfo)

{

m_conn=m_connpool.getConnection()

inti=m_random.Next(25000)

stringtmpStr=stateInfo.ToString()

while(true)

{

stringsql="selectlocfromtable_ipaddrwhereid='"+i+"'"

MySqlCommandcmd=newMySqlCommand(sql,m_conn)

try

{

strings=cmd.ExecuteScalar().ToString()

Console.WriteLine(tmpStr+"_"+s)

//lock(obj)

//{

//strings=cmd.ExecuteScalar().ToString()

//Console.WriteLine(tmpStr+"_"+s)

//}

//Thread.Sleep(10000)

}

catch(Exceptionex)

{

Console.WriteLine("error!"+ex.Message)

}

//m_connpool.closeConnection(m_conn)

}

}

}

}

NET Core 使用Dapper *** 作MySQL 数据库, .NET Core 使用Dapper。

目前官方没有出.NET Core MySQL 驱动,但是已经有第三方进行改动封装出.NET Core MySQL Connector 预览版。

Dapper 也已经出了 .NET Core 预览版。

Dapper dot net 是一个轻量型的ORM,但是性能很强大。

有了.NET Core MySQL Connector 我们可以直接使用ADO.NET *** 作数据库。

目前EF Core 暂时不支持MySQL, 本篇主要讲解使用Dapper *** 作 MySQL。

第三方 MySQL Connector: https://github.com/SapientGuardian/mysql-connector-net-netstandard

Dapper: https://github.com/StackExchange/dapper-dot-net

新建项目

新建一个.NET Core控制台应用程序 NETCoreMySQL

可以参考dapper源码,或者反编译一下dapper.dll,在dapper之上再封装一层拓展方法,正好最近我也在做这个,下面代码可以参考一下:

   using Dapper

   //封装的拓展类

    public static class DapperExtension

    {

        public static int CExecute(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)

        {

            var beginTime = DateTime.Now

            return  SqlMapper.Execute(cnn, sql, param, transaction, commandTimeout, commandType).ToLog(sql,param, beginTime)

        }

        public static int CExecute(this IDbConnection cnn, CommandDefinition command)

        {

            var beginTime = DateTime.Now

            return SqlMapper.Execute(cnn, command).ToLog(command.CommandText,command.Parameters,beginTime)

        }

        ……

        }

        

        //日志记录拓展方法

           private static T ToLog<T>(this T result, string sql, object param, DateTime beginTime, IDbConnection conn =null)

        {

            //日志记录要异步进行,防止日志记录时报错,影响业务流程

            Task.Run(()=> {

                var now = DateTime.Now

                var log = new LogModel()

                {

                    CreateTime = now,

                    SqlStr = sql,

                    ExcuteResult = result.ToJsonString(),

                    Timespan = (now - beginTime).TotalMilliseconds                    

                }

                if (param != null)

                {

                    foreach (var p in param.GetType().GetProperties())

                    {

                        log.SqlStr=log.SqlStr.Replace("@"+p.Name,p.GetValue(param).ToString())

                    }

                }

                //日志记录到MongoDB中

                MongoDbHelper.SetCollection(log, "Log_"+ now.ToString("yyyyMMdd"), "ExcuteLog")

            })

            return result

        } //调用示例:

        public int GetInfo(string sql, object param = null)

        {

             var connStr="...."//数据库连接字符串

            using (var conn = new MySqlConnection(connStr))

            {

                var result = conn.CExecute(sql, param)

                return result

            }

        }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7157410.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存