none
如何把一個日期時間點與資料庫的日期時間點做比較? RRS feed

  • 一般討論

  • 是這樣的

    目前我有一個資料表是員工工作紀錄表

    裡面有一個欄位為工作時間

     

    例如該員工有三個時間

    97/08/29 13:50

    97/07/22 10:20

    97/06/18 15:08

     

    那我現在必須在textbox上輸入一個時間

    例如

    97/07/28 11:55

    那我該如何把這個時間跟上面的時間做比較

    取出這個時間就是夾在97/08/29 13:50 與 97/07/22 10:20這兩個時間的中間?

     

    因為select出來只會有一個欄位而已

    只是這個欄位有很多時間

    我試著用for迴圈做Tables["資料表"].Rows[ i ][0].ToString()

    再用if判斷

    可是出來的時間都永遠都是在Rows[0][0]裡也就是第一格...

     

    煩請高手解答

    謝謝

    2008年8月29日 上午 05:16

所有回覆

  • 程式呢?

     

    2008年8月29日 上午 05:52
    版主
  • 總覺得我好多觀念應該都有問題           

     

     

                DateTime times = DateTime.Parse(textBox4.Text);

                for (int i = 0; i < ds.Tables["DEB007"].Columns.Count; i++)
                {
                    string b = ds.Tables["DEB007"].Rows[ i ][0].ToString();
                    DateTime oldtime = DateTime.Parse(b);


                    if (times.Year > oldtime.Year)
                    {                   
                        if (times.Month > oldtime.Month)
                        {
                            if (times.Day > oldtime.Day)
                            {
                                if (times.Hour > times.Hour)
                                {
                                    textBox6.Text = oldtime.ToString();                               
                                }
                                textBox6.Text = oldtime.ToString();
                            }
                            textBox6.Text = oldtime.ToString();
                        }
                        textBox6.Text = oldtime.ToString();
                    }
                   
                }

    2008年8月29日 上午 06:27
  • 你的 i 要取的應該是 ds.Tables["DEB007"].Rows.Count,而不是 Columns.Count,你前面說只會有一欄,那想當然爾只會讀到 Rows[0][0] 啊。

     

    另外,你不必比那麼麻煩,直接用:

     

    Code Snippet

    if (time > oldtime)

       textBox6.Text = oldtime.ToString();

     

     

    即可。

     

    2008年8月29日 上午 07:00
    版主
  • 我照你的方法做一次

    可是這次所找到的都是該欄位的最後一筆

     

    2008年8月29日 上午 07:54
  • 你前面寫:

    Code Snippet

    因為select出來只會有一個欄位而已

    只是這個欄位有很多時間

    我試著用for迴圈做Tables["資料表"].Rows[ i ][0].ToString()

     

     

    DataTable.RowsIdea[0] 是取 i 列的第一個欄位

    如果這樣不對,那表示你自己的說法本身就有錯誤。

    2008年8月29日 上午 07:59
    版主
  • 因為我前面做資料庫的select

    本身就取工作時間這個欄位而已

    所以其欄位只有一欄就是工作時間這一欄

    那至於這個欄位有幾筆資料

    是不一定的(要where員工編號)

     

    所以用Rows[ i ][0]

    應該是沒錯

    後者是欄前者是列

    .

     

    不好意思我補充一下

    目前是

                    if (times < oldtime)
                    {
                        textBox6.Text = oldtime.ToString();
                    }

    的情況下

    出現的結果會在第一列

     

     

    如果把if裡面的 < 換成 >

    這樣得到的結果是最後一列

    2008年8月29日 上午 08:18
  • 終於

    我找到原因了

    我下SQL語法的時候

    忘了用order by做排序了

    因為它會從第一列開始跟你比大小

    沒做排序的話找到的數字絕對不是所要的數字

     

    真的是很不好意思

    2008年8月29日 上午 11:02