アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。現在VB.NET2005とOracle10gで開発をしています。
SQLについてはセキュリティー対策のためパラメータクエリでおこなっています。
困ったことにパラメータクエリで範囲検索ができないのです。
以下のソースです。

Imports System
Imports System.Data
Imports Oracle.DataAccess.Client


private sub getdata()
Dim OraCommand As OracleCommand = New OracleCommand
Dim OraParameter(0) As OracleParameter 'パラメータ



'コネクションのセット
OraCommand.Connection = _Connection'オープンされたコネクション
'パラメータSQLをセット
OraCommand.CommandText = "select * from Table1 where UpdateTime >= :UpdateTime and UpdateTime <= :UpdateTime"
'名前によるパラメータ識別をON
OraCommand.BindByName = True


OraParameter(0) = OraCommand.Parameters.Add("UpdateTime","2007/01/23")
ReDim Preserve OraParameter(1)
OraParameter(1) = OraCommand.Parameters.Add("UpdateTime","2007/01/24")

'SELECT実行(結果は0件)
Return OraCommand.ExecuteReader()

TableAには二件のレコードが入っていて片方はUpdateTime列が
2007/01/23もう片方が2007/01/24です。
TableAのUpdateTime列のデータ型はTimestampです。
どなたかパラメータクエリで日付範囲検索の経験のある方
教えていただけないでしょうか?

A 回答 (2件)

Oracleは8iくらい、VBはVer6位の知識なんですが。



> UpdateTime列のデータ型はTimestampです。
元が英語圏のソフトですから、日付書式が正しくない、が原因でしょう。

Oracle側ならto_char()で、Access系なんかだったらFormat()で
希望の書式の「文字列」に変換して評価するのが確実かな。

where to_char(UpdateTime, 'yyyy/mm/dd') >= :UpdateTime and to_char(UpdateTime, 'yyyy/mm/dd') <= :UpdateTime

しかし、列名とパラメータ名とが同じで良いのでしょうか?

この回答への補足

列名とパラメータ名は同じでもできました。
BindByName=Trueでパラメータ名が重複するほうがだめなのでしょか?

補足日時:2007/01/25 01:16
    • good
    • 0

比較する日付の表現が異なる、だと思いますよ。


10gに触れていないので、SQLPLusで、Timestanp型の列を参照してお試しください。

1)select UpdateTime from Table1 where条件は適当に。

2)select to_char(UpdateTime, 'yyyy/mm/dd hh24:mi:ss') from Table1 where条件は適当に。

1)の結果では日付のみのはず。しかし内部では時刻も持ち合わせているはず。
2)の結果では 2007/01/23 17:36:51 のような結果になるはず。


("UpdateTime","2007/01/23")の部分を
(TO_CHAR("UpdateTime", 'yyyy/mm/dd'), "2007/01/23")にするとどうなりますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!