C#寫從log文件向access自動導入數據的窗口程序,運行一段時間后停止工作,問題事件名稱:CLR20r3,求教各位該怎么解決?謝謝


各位前輩好:我近日用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.OleDbException
  OS 版本: 6.1.7601.2.1.0.274.10
  區域設置 ID: 2052
  其他信息 1: 0a9e
  其他信息 2: 0a9e372d3b4ad19135b953a78882e789
  其他信息 3: 0a9e
  其他信息 4: 0a9e372d3b4ad19135b953a78882e789
請問,這個問題該怎么下手呢?謝謝!

6 个解决方案

#1


System.Data.OleDb.OleDbException
看錯誤日志是數據庫連接環節出問題了
建議在數據庫操作時增加操作日志
以定位問題

#2


引用 1 樓 xian_wwq 的回復:
System.Data.OleDb.OleDbException
看錯誤日志是數據庫連接環節出問題了
建議在數據庫操作時增加操作日志
以定位問題

      你好,謝謝你的回復!
      后來我網絡上查閱相關錯誤信息,有人說是因為對出現的異常沒有處理,我就加了個try catch塊,之后就真沒有出現這個問題,catch到的信息顯示是有些數據被鎖定。但我對此很不解,同一個log文件中的數據,怎么會有一兩條被鎖定呢?是因為讀取的數據量太大呢?求助!!!

      同時我又發現了另一個問題:C#寫的這個小窗口應用程序,在導入數據庫的同時也可同步顯示導入的數據內容,但是當一次讀取的數據量大的時候,就發現數據不是按照文件中的順序來讀或寫的,會跳來跳去。並且,有時讀着讀着就毫無征兆的自動退出了,加了catch也沒用,直接被跳過了。請問這是不是說明窗口程序不適合讀取大批量數據呢?

非常感謝!

#3


有沒有可能是重復數據?

#4


引用 2 樓 leao007 的回復:
Quote: 引用 1 樓 xian_wwq 的回復:

System.Data.OleDb.OleDbException
看錯誤日志是數據庫連接環節出問題了
建議在數據庫操作時增加操作日志
以定位問題

      你好,謝謝你的回復!
      后來我網絡上查閱相關錯誤信息,有人說是因為對出現的異常沒有處理,我就加了個try catch塊,之后就真沒有出現這個問題,catch到的信息顯示是有些數據被鎖定。但我對此很不解,同一個log文件中的數據,怎么會有一兩條被鎖定呢?是因為讀取的數據量太大呢?求助!!!

      同時我又發現了另一個問題:C#寫的這個小窗口應用程序,在導入數據庫的同時也可同步顯示導入的數據內容,但是當一次讀取的數據量大的時候,就發現數據不是按照文件中的順序來讀或寫的,會跳來跳去。並且,有時讀着讀着就毫無征兆的自動退出了,加了catch也沒用,直接被跳過了。請問這是不是說明窗口程序不適合讀取大批量數據呢?

非常感謝!

個人感覺和數據量關聯不大,還是代碼寫的有需要改進的地方
寫入操作有沒有用到多線程?
運行中突然退出還是有異常拋出了
參照這個添加代碼,再看看什么情況下會退出

        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Exception error = (Exception)e.ExceptionObject;
            Console.WriteLine("MyHandler caught : " + error.Message);
        }

#5


再次感謝!
我是初學者,代碼中沒有用到多線程,只是用到了讓進程定時休眠。主函數代碼如下:
static void Main(string[] args)
        {
            on = false;
            System.Threading.Timer threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ExecuteImport), null, 0, 900000);
            while (!on)
            {
                Thread.Sleep(900000);          //15minutes
            }
        }
另外,程序是在運行中突然退出,並沒有拋出異常。
我現在就把你給的這段代碼加進去,看看能否解決這個問題。
請問你知道為什么提示log中的個別數據會被鎖定,無法訪問嗎?還有為什么程序讀出來的數據順序會被打亂呢?
謝謝!

#6


引用 5 樓 leao007 的回復:
再次感謝!
我是初學者,代碼中沒有用到多線程,只是用到了讓進程定時休眠。主函數代碼如下:
static void Main(string[] args)
        {
            on = false;
            System.Threading.Timer threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ExecuteImport), null, 0, 900000);
            while (!on)
            {
                Thread.Sleep(900000);          //15minutes
            }
        }
另外,程序是在運行中突然退出,並沒有拋出異常。
我現在就把你給的這段代碼加進去,看看能否解決這個問題。
請問你知道為什么提示log中的個別數據會被鎖定,無法訪問嗎?還有為什么程序讀出來的數據順序會被打亂呢?
謝謝!


你采用的System.Threading.Timer,這個是線程計時器。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com