C# 读取数据库多次访问出错,求教怎么加锁或者其他方法

adrianEvin 2013-03-28 09:54:58
不管是Datareader 还是通过DataAdapter存储到dataset
多次执行就会出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

这是一个服务器 通过socket 接收消息。创建线程去执行数据库操作.
感觉这个线程在执行Datareader还没有操作完成,又来一个新的线程去执行Datareader就会报错。
如果加锁怎么加啊 还有什么其他的好方法啊
public static AseDataReader GetReader(string safeSql)
{
using (AseCommand cmd = new AseCommand(safeSql, Connection))
{
AseDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
}


Connection 这个在属性器里面open了
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
三五月儿 2013-03-28
  • 打赏
  • 举报
回复
多线程操作数据库,冲突在所难免
最后一只恐龙 2013-03-28
  • 打赏
  • 举报
回复
如楼上所说,你的问题是Connection的问题。 如果要加锁,就用 lock { // 你要加锁的代码区 }
神马都能聊 2013-03-28
  • 打赏
  • 举报
回复
你的connection是类成员吧,改成临时变量,每次调用时初始化连接,打开,操作数据库,再断开,销毁连接。 类成员,多次并发访问时,多入口控制连接状态,将有可能造成冲突了。
md5e 2013-03-28
  • 打赏
  • 举报
回复
using( AseDataReader read= GetReader(string safeSql) ) { ... }
md5e 2013-03-28
  • 打赏
  • 举报
回复
应该是没有即时释放资源引起的
adrianEvin 2013-03-28
  • 打赏
  • 举报
回复
引用 3 楼 Ivy_zheng 的回复:
如楼上所说,你的问题是Connection的问题。 如果要加锁,就用 lock { // 你要加锁的代码区 }
我把Connection写在里面了 但是lock不行啊 这是静态方法 我写 lock(this) { } 和这个类的类名也不行 lock(classXXXX) { } 提示 是类型,但是此处当做变量来使用

110,526

社区成员

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

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

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