2013-07-01 42 views
1

我使用vb.net和oracle的基本日期選擇器作爲我的數據庫。當我插入從基本的日期選擇器的日期,我得到這個錯誤>> ORA-01797:此操作必須遵循的任何或所有爲什麼我的基本日期選取器無法將輸入轉換爲日期時間格式?

這是我的代碼:

Private Function GetDate(ByVal bdp1 As Date) As DataSet 

    Dim connectionString As String = "Data Source = ***; User ID =***; Password =**;" 
    Dim sqlConnection As OracleClient.OracleConnection = New OracleClient.OracleConnection(connectionString) 

    Dim queryString As String = "select * from smsdw.lot_act where tran_dttm <= ('" & bdp1 & "' , 'MM/DD/YYYY') and tran_dttm > ('" & bdp1 & "', 'MM/DD/YYYY')" 

    Dim sqlCommand As OracleClient.OracleCommand = New OracleClient.OracleCommand(queryString, sqlConnection) 
    sqlCommand.CommandTimeout = 0 

    Dim dataAdapter As OracleClient.OracleDataAdapter = New OracleClient.OracleDataAdapter(sqlCommand) 
    Dim dataSet As DataSet = New DataSet 
    dataAdapter.Fill(dataSet) 

    Return dataSet 

End Function 
+3

注意SQL注入。 –

回答

0

試試看:

Dim queryString As String = "select * from smsdw.lot_act where tran_dttm <= :dtm1 and tran_dttm > :dtm2" 

Dim sqlCommand As OracleClient.OracleCommand = New OracleClient.OracleCommand(queryString, sqlConnection) 
sqlCommand.Parameters.AddWithValue("dtm1",bdp1) 
sqlCommand.Parameters.AddWithValue("dtm2",bdp1) 

其中a)避免了SQL注入的可能性,以及b)將日期保留爲作爲整個日期,而不是將其綁定到/來自字符串。

它不能修復與您的查詢的邏輯問題,雖然 - 在那裏你試圖找到一排,其中tran_dttm既是「小於或等於」 相同值「大於」。

0

試試這個..

Dim queryString As String = "select * from smsdw.lot_act where tran_dttm <= cdate('" & bdp1.Value.ToString & "') and tran_dttm > cdate('" & bdp1.Value.ToString & "')" 
+0

tq但我得到這個錯誤>> ORA-01756:引用的字符串沒有正確終止 – Husna5207

+0

好tq非常多:) – Husna5207

+0

對不起,你的答案不起作用。 – Husna5207

0

試試這個:

Dim queryString As String = "select * from smsdw.lot_act where tran_dttm <= '" & bdp1.ToString("MM/dd/yyyy") & "' and tran_dttm > '" & bdp1.ToString("MM/dd/yyyy") & "'" 

但是對於甲骨文的默認日期時間格式爲YYYY-MM-DD。你有三個選擇:

  • 更改爲適合你的慾望
  • 使用默認格式的一個默認的文件格式:bdp1.ToString("yyyy-MM-dd")
  • 使用todate Oracle函數specifiying讀取格式:
    " to_date('" & bdp1.ToString("MM/dd/yyyy") & "', 'mm/dd/yyyy') "
+0

tq但沒有工作我得到這個錯誤>> ORA-01843:不是有效月份 – Husna5207

+0

這是因爲oracle日期時間格式,默認情況下是'YYYY-MM-DD'。我編輯我的答案給你的解決方案 – SysDragon

+0

是的,但現在我得到錯誤>> ORA-00907:缺少右括號 – Husna5207

相關問題