none
C#定時新增資料庫時出現遺漏 RRS feed

  • 一般討論

  • C#定時新增資料庫時出現遺漏
    主機系統環境 WIN7 旗艦版
    SQL資料庫 SQL Server 2008 SP3 建立資料庫時用 VS2010 C# NET4.0
    程式語言 VS2013 C# 建立程式時用NET4.5
    問題如下:
    因寫外匯和期貨報價程式,之前用Timer方式固定每小時把資料寫入EXCEL一次,一兩天會出現某個小時資料沒有寫入,本來以為改用MS SQL資料庫會好一點,結果還是一樣搞得頭很痛,目前開了六個資料庫,每個資料庫一個商品,本以為沒法寫入是同一個時間,經檢查後是不同時間遺漏資料,其中有的資料庫也並沒遺漏資料,目前查了知識庫新增資料部份不管是用了try catch finally還是現在 using 用法避免Dispose問題結果還是一樣,因為剛學寫SQL資料庫,不知道是那裡出問題,請高手為我解惑,部份程式如下:

    private static void TimeEvent(object source, System.Timers.ElapsedEventArgs e)
    {
    DateTime date1 = e.SignalTime; //.Date.ToString()+" "+e.SignalTime.Hour.ToString()+":"+e.SignalTime.Minute.ToString()+":"+e.SignalTime.Second.ToString());
    int intHour = e.SignalTime.Hour;
    int intMinute = e.SignalTime.Minute;
    int intSecond = e.SignalTime.Second;
    if (intSecond == 59)
    {
    if (intMinute == 59)
    {
    if (Global.no1 != 0 | Global.no2 != 0)
    {
    Global.ttime = Convert.ToString(DateTime.Now);
    Global.utime = Convert.ToString((Global.Result[0]) + " " + (Global.Result[1]));
    Global.TOpen = Global.Open;
    Global.TClose = Global.Result[2];
    Global.Thigh = Global.Hhigh;
    Global.Tlow = Global.Llow;
    Global.no11 = Global.no1;
    Global.no12 = Global.no2;
    Global.no13 = Global.no3;
    Global.no14 = Global.no4;
    Global.add = 0;
    Global.Open = 0;
    Global.no1 = 0;
    Global.no2 = 0;
    Global.no3 = 0;
    Global.no4 = 0;
    Global.Hhigh = 0;
    Global.Llow = 3;
    Console.WriteLine();
    Console.WriteLine("Data Change");
    Console.WriteLine();
    string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\DataExchange\\EurusdDdeDb\\EurusdDdeDb\\EurusdDatabase1.mdf;Integrated Security=True;User Instance=True";
    string commandString = "Insert Into EurusdTable1 VALUES ('" + Global.ttime + "','" + Global.utime + "','" + Convert.ToString(Global.TOpen) + "','" + Convert.ToString(Global.Thigh) + "','" + Convert.ToString(Global.Tlow) + "','" + Global.TClose + "','" +
    Convert.ToString(Global.no11) + "','" + Convert.ToString(Global.no12) + "','" + Convert.ToString(Global.no13) + "','" + Convert.ToString(Global.no14) + "'" + ")";


    using (SqlConnection conn = new SqlConnection(connString))
    {
    using (SqlCommand cmd = new SqlCommand(commandString, conn))
    {
    conn.Open();
    cmd.ExecuteNonQuery();
    Console.WriteLine("============   Insert Normal OK   ============");
    }
    }


    Global.ttime = "";
    Global.utime = "";
    Global.TOpen = 0;
    Global.TClose = "";
    Global.Thigh = 0;
    Global.Tlow = 0;
    Global.no11 = 0;
    Global.no12 = 0;
    Global.no13 = 0;
    Global.no14 = 0;
    Console.WriteLine();
    Console.WriteLine("Data Return Zero");
    Console.WriteLine();
    }
    }
    }
    }
    2014年5月15日 下午 04:36

所有回覆

  • 您的Timer的Interval設定成多長? 如果在Interval中做不完指定的工作就會影響下一回的執行

    2014年5月16日 上午 12:03
  • 1. if (Global.no1 != 0 | Global.no2 != 0) 這行怪怪的,有沒有寫錯啊...OR 是 "||", 不是 "|"

    2. 多資料庫建議使用不同的 thread 來做,同時在每一個 thread 中建立個別的 timer。

    3. 寫入資料的 thread 太多的話當然也會有一些影響,若是這種情況,不如加上一個 queue,寫入動作先加到 queue,再由 queue 讀出並寫到資料庫。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年5月16日 上午 12:18
    版主
  • 連接字串看起來是動態掛載 資料庫檔案. 建議改成靜態掛載.

    參考既有討論


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年5月16日 上午 03:00
    版主
  • Timer 事件沒你想像中的準確且不遺失,先確認 Timer 事件是對的吧。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年5月16日 下午 12:55
  • 我的Timer的Interval設為1000,也就是說只有一次機會,錯過就沒了,謝謝各位高手的指教,試著改改看

    2014年5月18日 下午 02:39
  • 這篇可以看看:

    [VBNET]定時整點動作


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年5月18日 下午 05:20