|
■No69379 (MassyPie さん) に返信 > sqlplueで、実行すると問題なく検索してくれるので
SQL*Plus 側で INSERT した後、Commit し忘れているとか…?
> プログラムを通すと、検索結果=0になります。
OracleConnection クラス等をお使いのようですが、これは Oracle.DataAccess.Client 名前空間のものでしょうか。 それとも、System.Data.OracleClient のものでしょうか。 推奨されているのは前者の名前空間ですね。
> SELECT value,timestamp from itemdata > where ((TO_DATE('2013/12/15 20:10:20','YYYY/MM/DD HH24:MI:SS')) < timestamp) > and (timestamp <= TO_DATE('2013/12/20 20:10:20','YYYY/MM/DD HH24:MI:SS')) order by timestamp DESC
これ、データ型はどうなっていますか?
timestamp という列名ということは、やはりデータ型も TIMESTAMP 型 あるいは TIMESTAMP WITH TIME ZONE 型なのでしょうか。
だとしたら、使うべきは TO_DATE 関数ではなく TO_TIMESTAMP もしくは TO_TIMESTAMP_TZ ですよ。
CREATE TABLE itemdata ( value NUMBER(3), timestamp TIMESTAMP(9) );
-- TO_TIMESTAMP 関数の代わりに、TIMESTAMP リテラル表記を使うこともできる INSERT ALL INTO itemdata VALUES ( 1, TIMESTAMP '2013-12-15 20:09:19.999999999') INTO itemdata VALUES ( 2, TIMESTAMP '2013-12-15 20:10:20.000000000') INTO itemdata VALUES ( 3, TIMESTAMP '2013-12-15 20:10:20.000000001') INTO itemdata VALUES (11, TIMESTAMP '2013-12-15 23:59:59.999999999') INTO itemdata VALUES (12, TIMESTAMP '2013-12-16 00:00:00.000000000') INTO itemdata VALUES (13, TIMESTAMP '2013-12-16 00:00:00.000000001') INTO itemdata VALUES (21, TIMESTAMP '2013-12-20 20:09:19.999999999') INTO itemdata VALUES (22, TIMESTAMP '2013-12-20 20:10:20.000000000') INTO itemdata VALUES (23, TIMESTAMP '2013-12-20 20:10:20.000000001') SELECT * FROM DUAL;
-- 下記の場合、3〜22 が選択されるが、1, 2, 23 は選択されない SELECT value, timestamp FROM itemdata WHERE TO_TIMESTAMP('2013/12/15 20:10:20.000000000', 'YYYY/MM/DD HH24:MI:SS.FF9') < timestamp AND timestamp <= TO_TIMESTAMP('2013/12/20 20:10:20.000000000', 'YYYY/MM/DD HH24:MI:SS.FF9') ORDER BY timestamp DESC;
> Public Sub GetORACLE(strUser As String, strPass As String, strSource As String, strSql As String, dt As DataTable) 本題とは直接関係ありませんが、命名的には、 Function GetORACLE(…) As DataTable あるいは Sub FillORACLE(dt As DataTable, …) の方が良い気がします。TableAdapter の Get/Fill 系メソッドが上記ルールなので。
> oda.SelectCommand = cmd ここで使用している変数 oda は、どこから来ていますか? 変数宣言が無いということは、フィールド変数あるいは Module のグローバル変数でしょうか。
むやみに使いまわさず、GetORACLE 内でのローカル変数として 処理した方が良いと思います。たとえばこんな感じで(未検証)。
Using oda As New OracleDataAdapter(strSql, bldr.ConnectionString) oda.Fill(dt) End Using
|