问题描述
各位前辈好:我近日用C#写了个小窗口程序,功能是从log文件向access自动导入数据,并设置间隔一段时间自动运行。但是现在发现,程序起初可以正常实现导入功能,但是运行一段时间后就会停止,问题事件名称:CLR20r3,详细信息如下:问题签名01:readandsyncmonitoringdata.exe问题签名02:1.0.0.0问题签名03:54717fa3问题签名04:System.Data问题签名05:4.0.30319.18408问题签名06:52311175问题签名07:1b5c问题签名08:1a问题签名09:System.Data.OleDb.OleDbExceptionOS版本:6.1.7601.2.1.0.274.10区域设置ID:2052其他信息1:0a9e其他信息2:0a9e372d3b4ad19135b953a78882e789其他信息3:0a9e其他信息4:0a9e372d3b4ad19135b953a78882e789请问,这个问题该怎么下手呢?谢谢!
解决方案
解决方案二:
System.Data.OleDb.OleDbException看错误日志是数据库连接环节出问题了建议在数据库操作时增加操作日志以定位问题
解决方案三:
引用1楼xian_wwq的回复:
System.Data.OleDb.OleDbException看错误日志是数据库连接环节出问题了建议在数据库操作时增加操作日志以定位问题
你好,谢谢你的回复!后来我网络上查阅相关错误信息,有人说是因为对出现的异常没有处理,我就加了个trycatch块,之后就真没有出现这个问题,catch到的信息显示是有些数据被锁定。但我对此很不解,同一个log文件中的数据,怎么会有一两条被锁定呢?是因为读取的数据量太大呢?求助!!!同时我又发现了另一个问题:C#写的这个小窗口应用程序,在导入数据库的同时也可同步显示导入的数据内容,但是当一次读取的数据量大的时候,就发现数据不是按照文件中的顺序来读或写的,会跳来跳去。并且,有时读着读着就毫无征兆的自动退出了,加了catch也没用,直接被跳过了。请问这是不是说明窗口程序不适合读取大批量数据呢?非常感谢!
解决方案四:
有没有可能是重复数据?
解决方案五:
引用2楼leao007的回复:
Quote: 引用1楼xian_wwq的回复:
System.Data.OleDb.OleDbException看错误日志是数据库连接环节出问题了建议在数据库操作时增加操作日志以定位问题你好,谢谢你的回复!后来我网络上查阅相关错误信息,有人说是因为对出现的异常没有处理,我就加了个trycatch块,之后就真没有出现这个问题,catch到的信息显示是有些数据被锁定。但我对此很不解,同一个log文件中的数据,怎么会有一两条被锁定呢?是因为读取的数据量太大呢?求助!!!同时我又发现了另一个问题:C#写的这个小窗口应用程序,在导入数据库的同时也可同步显示导入的数据内容,但是当一次读取的数据量大的时候,就发现数据不是按照文件中的顺序来读或写的,会跳来跳去。并且,有时读着读着就毫无征兆的自动退出了,加了catch也没用,直接被跳过了。请问这是不是说明窗口程序不适合读取大批量数据呢?非常感谢!
个人感觉和数据量关联不大,还是代码写的有需要改进的地方写入操作有没有用到多线程?运行中突然退出还是有异常抛出了参照这个添加代码,再看看什么情况下会退出staticvoidMain(string[]args){AppDomain.CurrentDomain.UnhandledException+=newUnhandledExceptionEventHandler(CurrentDomain_UnhandledException);}staticvoidCurrentDomain_UnhandledException(objectsender,UnhandledExceptionEventArgse){Exceptionerror=(Exception)e.ExceptionObject;Console.WriteLine("MyHandlercaught:"+error.Message);}
解决方案六:
再次感谢!我是初学者,代码中没有用到多线程,只是用到了让进程定时休眠。主函数代码如下:staticvoidMain(string[]args){on=false;System.Threading.TimerthreadTimer=newSystem.Threading.Timer(newSystem.Threading.TimerCallback(ExecuteImport),null,0,900000);while(!on){Thread.Sleep(900000);//15minutes}}另外,程序是在运行中突然退出,并没有抛出异常。我现在就把你给的这段代码加进去,看看能否解决这个问题。请问你知道为什么提示log中的个别数据会被锁定,无法访问吗?还有为什么程序读出来的数据顺序会被打乱呢?谢谢!
解决方案七:
引用5楼leao007的回复:
再次感谢!我是初学者,代码中没有用到多线程,只是用到了让进程定时休眠。主函数代码如下:staticvoidMain(string[]args){on=false;System.Threading.TimerthreadTimer=newSystem.Threading.Timer(newSystem.Threading.TimerCallback(ExecuteImport),null,0,900000);while(!on){Thread.Sleep(900000);//15minutes}}另外,程序是在运行中突然退出,并没有抛出异常。我现在就把你给的这段代码加进去,看看能否解决这个问题。请问你知道为什么提示log中的个别数据会被锁定,无法访问吗?还有为什么程序读出来的数据顺序会被打乱呢?谢谢!
你采用的System.Threading.Timer,这个是线程计时器。