C# 多线程 操作mysql问题

司马卓 2015-05-18 01:58:11

lock (_lockReader)
{
Console.WriteLine("addSearchDev----------");
string sql = "insert into searchDev(sn,ip,port,mask,gateway,mac,devType,devName,webPort,dns) values("
+ "'" + dev.sn + "',"
+ "'" + dev.ip + "',"
+ " " + dev.port + ","
+ "'" + dev.mask + "',"
+ "'" + dev.gateway + "',"
+ "'" + dev.mac + "',"
+ " " + dev.devType + ","
+ "'" + dev.devName + "',"
+ " " + dev.webPort + ","
+ "'" + dev.dns + "'"
+ ")";
using (MySqlCommand csqld = new MySqlCommand(sql, con))
//MySqlCommand csqld = new MySqlCommand(sql, con); csqld.CommandTimeout = 60;
{
int result = 0;
//lock (_lock)
{
Console.WriteLine(csqld.CommandText);
try
{
result = csqld.ExecuteNonQuery();
}
catch (Exception ex)
{
string exx = ex.Message;
}
//csqld.Cancel();
csqld.Dispose();
Console.WriteLine("e---addSearchDev-------------------");
}
if (result == 1)
{
return true;
}
else
{
return false;
}
}
}

以上代码运行在一个线程里面。
偶尔报异常 未将对象引用到实例,很诡异。请大家帮忙看下那里问题。数据库连接以及其他线程的对数据库的操作无问题。
catch (Exception ex)
{
string exx = ex.Message;
}
也是偶尔报错。
...全文
384 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
司马卓 2015-05-18
  • 打赏
  • 举报
回复
System.NullReferenceException: 未将对象引用设置到对象的实例。 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
司马卓 2015-05-18
  • 打赏
  • 举报
回复
问题补充: con是单例出来的MySqlConnection连接对象。此段程序是windows服务程序的一个片段,服务程序用来对web服务器的数据进行维护。多线程的操作故用了lock。不定时的会报出异常。至于为什么报异常无从下手哈。
司马卓 2015-05-18
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
还有,为啥要加lock,什么作用? mysql有连接池,本来就允许多线程同时访问的.
这是web服务器的一个后台监控程序。lock是为了一些流程的需要。没有使用mysql的连接池。偶尔会出现错误的情况,加这么一句也是为了断点方便调试。奇怪的是,偶尔出现未将对象引用到实例,MySqlException还捕获不到异常。
Poopaye 2015-05-18
  • 打赏
  • 举报
回复
这是个猜猜看的问题吗?
於黾 2015-05-18
  • 打赏
  • 举报
回复
还有,为啥要加lock,什么作用? mysql有连接池,本来就允许多线程同时访问的.
於黾 2015-05-18
  • 打赏
  • 举报
回复
ex.Message -> ex.ToString(); 不要把异常的详细信息隐藏掉,报出来,你才能知道到底怎么了

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧