DateTimePicker中的Visual Basic日期在SQL中不起作用

时间:2017-08-05 16:41:53

标签: vb.net oracle11g oracle-sqldeveloper

我只需要询问DateTimePicker,因为当我运行下面的查询时,我在月份和日期之间得到了正确的数据但是年份是错误的。 DATEOFTRANSACTION将varchar作为数据类型。

示例场景

DateTimePicker1 = 06/10/2017

DateTimePicker2 = 10/22/2017

数据库有:

  

2017年6月10日   
2017年8月2日   
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 个答案:

答案 0 :(得分: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));

其次,以这种格式存储在DB中的日期为字符串:

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

字母和时间顺序匹配,其他格式,不。

您仍然需要处理数据库中的日期存储为MM/DD/YYYYDD/MM/YYYY的问题(我无法提供数据样本)

因此,在正式MM/DD/YYYY中转换DateTimePicker是不够的,因为此字符串按字母顺序排序,这与您需要的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格式,但我会将之前的评论留给其他人查看可能出现的问题。