2017-08-05 103 views
0

我只需要詢問DateTimePicker,因爲當我運行下面的查詢時,我會在月份和日期之間得到正確的數據,但是一年是錯誤的。 DATEOFTRANSACTION具有varchar作爲數據類型。來自DateTimePicker的Visual Basic日期在SQL中不起作用

示例方案

DateTimePicker1 = 2017年6月10日

DateTimePicker2 = 2017年10月22日

數據庫中有:

2017年6月10日
2017/02/08
2017/12/15
2018年8月2日

運行查詢後,我的顯示是:

2017年6月10日
2017年8月2日
2018年8月2日

查詢字符串以獲取Picker1和Picker2之間的日期

Dim rsa As New OracleCommand(
    "SELECT * FROM DBOR WHERE DATEOFTRANSACTION BETWEEN '" 
    & Format(DateTimePicker1.Value, "MM/dd/yyyy").ToString & "' AND '" 
    & Format(DateTimePicker2.Value, "MM/dd/yyyy").ToString & "'", con) 

我插入查詢是這樣的

Dim rs As New OracleCommand(
    "Insert into DBOR (OR_NUMBER,FIRSTNAME,MIDDLENAME,LASTNAME,DATEOFTRANSACTION,TIMEOFTRANSACTION, PRICE, CASHIER) values ('" 
    & RECEIPTform.Label1.Text & "', '" 
    & ADDCUSTOMERform.FirstName.Text & "','" 
    & ADDCUSTOMERform.MiddleName.Text & "','" 
    & ADDCUSTOMERform.LastName.Text & "' ,'" 
    & Format(Date.Now(), "MM/dd/yyyy") & "' , '" 
    & TimeOfDay.ToString("h:mm:ss tt") & "', '" 
    & TextBox1.Text & "', '" 
    & LOGINform.username.Text & "')", con) 
+1

瞭解如何使用參數 – Steve

+0

查看此(OracleCommand.Parameters屬性):https://msdn.microsoft.com/es-es/library/system.data.oracleclient.oraclecommand.parameters(v=vs .110).aspx – Horaciux

+0

DateTimePicker.Value屬性是日期。您的代碼將其轉換爲特定格式的字符串。如果數據庫列是日期,則傳遞日期。如果列不是Date,它們應該是 - NET DB提供者完全有能力存儲和傳遞日期。使用SQL參數 - 組合SQL不需要那麼單調乏味且容易出錯。 – Plutonix

回答

0

首先,如前評論,您需要改爲使用連接字符串值的參數。 OracleCommand.Parameters Property即:

OracleCommand oraCommand = new OracleCommand("SELECT fullname FROM sup_sys.user_profile 
          WHERE domain_user_name = :userName", db); 
oraCommand.Parameters.Add(new OracleParameter("userName", domainUser)); 

其次,存儲在數據庫作爲字符串格式日期:

YEAR(YYYY/YY)[optional separatos]Month(MM)[optional separatos]DAY(DD) 

字母和按時間順序排列的比賽,其他的格式,沒有。

你仍然必須處理其中DB您的日期

所以(我不能提供數據樣本告訴)存儲爲MM/DD/YYYYDD/MM/YYYY的問題,這是不夠的,你轉換你的DateTimePicker中正式的MM/DD/YYYY,因爲這個字符串是按字母順序排序的,並且這不符合你所需要的chonologycal順序。

你需要字符字段轉換的日期字符串格式YYYY/MM/DD

爲了做到這一點,你需要像這樣

TO_DATE(DATEOFTRANSACTION,'MM/DD/YYYY') 

它看起來是這樣的:

OracleCommand rsa = new OracleCommand("SELECT * FROM DBOR 
       WHERE TO_DATE(DATEOFTRANSACTION,'MM/DD/YYYY') 
       BETWEEN iniDate = :iniDate AND endDate= :endDate", con); 
rsa.Parameters.Add(new OracleParameter("iniDate", DateTimePicker1.Value)); 
rsa.Parameters.Add(new OracleParameter("endDate", DateTimePicker2.Value)); 

編輯:我剛剛意識到它使用MM/DD/YYYY格式,但我會離開前面的c忽略他人看到可能的問題。

+0

所以我做了這樣的事情:rsa.Parameters.Add(New OracleParameter(「@ DateStart」,Format(DateTimePicker1.Value,「yyyy/MM/dd」))) –

+0

但現在我沒有過濾任何東西 –

+0

對於Oracle,您必須使用':'字符而不是'@' – Horaciux