2016-09-22 61 views
1

我來自印度(這裏可能與文化信息有關)。我正在使用MS-ACCESS 2010 32位作爲後端在C#.Net 2010 Express中構建桌面應用程序。我正在使用OLEDB進行數據庫連接。 我有一個名爲列DT日期/時間已下列值:MSACCESS DateTIME SQL QUERY

20-09-2016 22時53分32秒
19-08-2016 22時54分24秒
20-09-2016 22 :56:01
22-09-2016 22時56分27秒
22-09-2016 22時56分41秒

我需要獲取記錄按日期,按月和按年。直到現在我無法完成日期部分,所以不能在月和年工作。以下是我的代碼:

b.com.CommandText = "SELECT * FROM srvtrans WHERE DateTime.Parse(dt)[email protected] ORDER BY sno DESC"; 
b.com.Parameters.Add("@a", dtp_srdmy.Value.ToShortDateString()); 
Show(dtp_srdmy.Value.ToShortDateString()); 
b.con.State == ConnectionState.Closed) 
con.Close(); 
mytemp = new DataTable(); 
da.Fill(mytemp); 

我也曾嘗試以下變化:

WHERE CONVERT(VARCHAR(10),dt,111)[email protected] 

WHERE CONVERT(VARCHAR(10),dt,101)[email protected] 

WHERE dt LIKE '%@a%' 

WHERE DateTime.Parse(dt)[email protected] 

WHERE dt=DateValue(@a) 

WHERE CAST(dt AS DATE)[email protected] 

WHERE CONVERT(varchar, dt, 101)[email protected] 

WHERE DATE(dt)[email protected] 

WHERE [email protected] 

但沒有人對我的作品。請回答在sql查詢中應該進行哪些更新以按日期,月份和年份提取記錄。提前致謝。

+0

另外看看行'b.con.State == ConnectionState.Closed',你檢查是否關閉,然後再關閉它。你應該做的是在需要的時候創建一個新的OleDbConnection,並把它包裝在一個使用塊中。請參閱[最佳實踐 - 執行Sql語句](http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements),其中有一些關於如何最佳結構的提示你的ado.net代碼。 – Igor

回答

1

下面的代碼一定要工作:

b.com.CommandText = "SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC"; 
    b.com.Parameters.Add("@a", dtp_srdmy.Value); 

給予好評,如果這有助於。

+0

是的,它的工作。完善。 – ITSagar

3
b.com.CommandText = "SELECT * FROM srvtrans WHERE dt = @a ORDER BY sno DESC"; 
b.com.Parameters.Add(new System.Data.OleDb.OleDbParameter("@a", OleDbType.DBDate) {Value = dtp_srdmy.Value }); 
con.Open(); 
  • 要在原生類型,而不是類型的字符串表示對您的參數值來傳遞。我假設dtp_srdmy可能是用戶控件(,如@Gord Thompson在下面的註釋中可能是DateTimePicker)或其他類型,其中Value是返回DateTime實例的屬性。
  • 您想要直接比較,底層商店/提供商會爲您處理比較,因此不要試圖將您的值包裝在蜱,報價或其他內容中,或嘗試爲商店引擎進行轉換。
  • 你應該使用枚舉OleDbType指定底層訪問類型,我猜它是DBDate但我可能是錯的,如有必要請更正它。
  • 在執行任何命令前打開連接。我假設你使用的是數據適配器,但沒有看到它,請確保它與你的Command相關聯。我忽略了這部分代碼,因爲它與問題無關。
+1

*「我假設'dtp_srdmy'是一個可爲空的DateTime實例」* - 「dtp_」前綴表明它是一個DateTimePicker對象,其[[Value](https://msdn.microsoft.com/en- us/library/system.windows.forms.datetimepicker.value(v = vs.110).aspx)屬性是'DateTime'。不過,仍然是一個很好的答案。 +1 –

+1

@GordThompson - 啊哈,這樣更有意義。謝謝! – Igor

+0

嗨。我很抱歉錯誤地寫了con.close()。我已將其更改爲b.con.Open();是的,dtp是一個c#。net datetimepicker控件。 Dataadapter存在並綁定在一個單獨的類中。我用datareader和datadapter嘗試了上面的建議,但仍然得到0行。 – ITSagar