2011-09-21 68 views
0

當我來到datetimepicker時,我的獨立C#.net應用程序出現問題。 花了我幾周時間,無法解決它。我希望你能幫我一把。C#Datetimepicker - 日期搜索與返回結果不一樣

我有一個[創建預訂],[搜索預訂]和[數據庫]使用ms訪問。

1)使用datetimepicker創建預訂日期。 format = short cmd.CommandText = "insert into booking(cname, bdate, btime, ccontact, sname) Values('" + txt_cname.Text + "','" + **dtp_bdate.Value.Date** + "','" + dtp_btime.Value + "','" + txt_ccontact.Text + "','" + txt_sname.Text + "')";

2)DB中的數據存儲是正確的。 示例:01/10/2011(2011年10月1日)

3)使用datetimepicker搜索預約日期。 格式=短

string strSql = String.Format("SELECT * FROM booking WHERE bdate = #{0}#", dtp_search.Value.Date); 

當我嘗試搜索爲01/10/2011。它不會爲我返回結果。 但是,當我嘗試搜索2011年10月1日時,它出現了結果。

我檢查了數據庫並確認日期格式保存爲01/10/2011。 但我不明白爲什麼以及如何發生這種奇怪的事情。

任何善良的男人都可以幫我一把嗎?

提前真正讚賞。

謝謝 加里怡

+0

只是爲了確認,但是您確定沒有與數據庫中的日期相關的「時間」組件嗎?格式化將隱藏實際價值。 – LarsTech

+0

數據庫中的數據類型是日期/時間,format = short。 另外日期格式顯示爲dd/MM/yyyy。 那麼有什麼想法? –

回答

0

貌似Access允許在SQL查詢(MM/DD/YYYY)固定格式的日期。並根據數據庫瀏覽器的當前文化格式顯示日期(因此您可以獲得DD/MM/YYYY)。只需在查詢中使用(MM/DD/YYYY)即可。

+0

datetimepicker格式顯示爲dd/MM/yyy,當我嘗試搜索20/10/2011時。然後它返回正確的結果。 –

0

「IF」 你的數據是正確的,請嘗試使用參數代替:

DataTable dt = new DataTable(); 

    using (var cn = new OleDbConnection(strConn)) 
    { 
    cn.Open(); 
    using (var cmd = new OleDbCommand("SELECT * FROM booking WHERE bdate = @bdate", cn)) 
    { 
     cmd.Parameters.AddWithValue("@bdate", dtp_bdate.Value.Date); 
     using (OleDbDataAdapter oda = new OleDbDataAdapter(cmd)) 
     oda.Fill(dt); 
    } 
    } 

否則,試圖通過嘗試> =或< =你的 「WHERE bdate = @bdate」 的聲明,看看調試聲明這改變了結果。

+0

我嘗試你的陳述,但編譯時有一個錯誤。 「System.Data.OleDbDataReader」是一個「類型」,但像「變量」一樣使用。 –

+0

@GaryYee固定。對不起,我是「var」高興。 – LarsTech

+0

謝謝,但另一個錯誤.... 無法將方法組「ExecuteReader」轉換爲非委託類型.... –