
代码的功能很简单,启动几个线程,每个线程循环进行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)
}
}
}
}
MySqlHelp =>nuget Mysql.Data
一个半自动化的ORM框架,它的本质是在IDBConnnection上定义了一些扩展方法。
nuget Dapper
dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITYSQL获取刚插入的记录的自动增长列ID的值
CREATE TABLE [dbo].[MesTest](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Msg] [nvarchar](500) NULL
) ON [PRIMARY]
[TestMethod]
public void TestMethod1()
{
var sql = "INSERT INTO [MesTest] ([Msg]) VALUES('ss')SELECT @id=SCOPE_IDENTITY()"
using (var db = Database.DbService)
{
var p = new DynamicParameters()
p.Add("@ID", dbType: DbType.Int32, direction: ParameterDirection.Output)
var i = db.Execute(sql,p)
var i1 = p.Get<int>("@ID")
Assert.Inconclusive(i1.ToString())
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)