C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.69379 の関連記事表示

<< 0 >>
■69379  Oracle Select文
□投稿者/ MassyPie -(2013/12/20(Fri) 20:30:40)

    分類:[VB.NET/VB2005 以降] 

    よろしくお願い致します。

    次のselect文を下記のプログラムより実行しています。
    sqlplueで、実行すると問題なく検索してくれるので文法的に誤りはないのですが
    プログラムを通すと、検索結果=0になります。

    ただ単純に次のselect文であると、プログラムからでも正しい検索が行われます。
    SELECT value,timestamp from itemdata order by timestamp DESC

    プログラムから実行するには、Where句の時間条件の指定がまずいと思うのですが、何が悪いのか、または考えられることを
    ご指摘頂けると助かります。

    よろしくお願い致します。



    <Select文>
    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



    <プログラム>
    Public Sub GetORACLE(strUser As String, strPass As String, strSource As String, strSql As String, dt As DataTable)
    Dim bldr As OracleConnectionStringBuilder = New OracleConnectionStringBuilder()

    'ユーザ名とパスワードを指定する
    bldr.UserID = strUser
    bldr.Password = strPass
    bldr.DataSource = strSource

    'dt = New DataTable()

    Using conn As OracleConnection = New OracleConnection(bldr.ConnectionString)
    Using cmd As OracleCommand = New OracleCommand()
    'コマンドのコネクションを指定
    cmd.Connection = conn
    cmd.CommandText = strSql
    'SELECTコマンドを指定する
    oda.SelectCommand = cmd
    'OracleConnectionを明示的にオープンにしなくても、Fillメソッドの中で開いて、終われば自動的に閉じてくれる
    oda.Fill(dt)
    ''DataGridViewにデータソースを指定する
    'Me.DataGridView1.DataSource = dt
    End Using
    End Using
    End Sub
親記事 /過去ログ118より / 関連記事表示
削除チェック/

■69383  Re[1]: Oracle Select文
□投稿者/ 魔界の仮面弁士 -(2013/12/20(Fri) 22:56:16)
    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
記事No.69379 のレス /過去ログ118より / 関連記事表示
削除チェック/

■69398  Re[1]: Oracle Select文
□投稿者/ a -(2013/12/23(Mon) 09:22:50)
    No69379 (MassyPie さん) に返信
    > <Select文>
    > 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がどうなっているかはわかりませんが、それとは別件で、
    条件が'<'と'<='になっていますので'2013/12/15 20:10:20'以下のものしか出てこなそう。
記事No.69379 のレス /過去ログ118より / 関連記事表示
削除チェック/

■69402  Re[1]: Oracle Select文
□投稿者/ オショウ -(2013/12/23(Mon) 11:38:45)
    No69379 (MassyPie さん) に返信
    > プログラムを通すと、検索結果=0になります。

      原因は、ODP.NETを経由してアクセスする場合のカラム名が予約語と
      誤認されていたからです。

      要は、カラム名『timestamp』(小文字)が、属性のTIMESTAMPと同様に
      扱われていた為でした。

      カラム名『timestamp』を『YMDHMS』等の全く違う文字列に変更すれば
      問題なく検索結果が取得できました。

    以上。参考まで
記事No.69379 のレス /過去ログ118より / 関連記事表示
削除チェック/

■69405  Re[2]: Oracle Select文
□投稿者/ MassyPie -(2013/12/24(Tue) 13:55:09)
    <魔界の仮面弁士さん>

    アドバイス、ありがとうございます。
    今、確認しながら修正を行っています。



    <aさん>

    コメントありがとうございます。
    シンプルにすると、↓のようになり、'2013/12/15 20:10:20' より大きく'2013/12/20 20:10:20'以下のデータが取れています。
    ('2013/12/15 20:10:20' < timestamp) and (timestamp <= '2013/12/20 20:10:20')


    <オショウさん>

    ありがとうございます。
    小文字の timestamp であれば、大丈夫と思いFieldを作成されたようです。
    早速、Field名の変更依頼し、テストしたところOKでした。

    SqlPlusの実行で問題なかったので、Field名とは思いませんでした。
    本当にありがとうございます。


    みなさま、本当にありがとうございます。<(__)>
記事No.69379 のレス / END /過去ログ118より / 関連記事表示
削除チェック/

■69406  Re[3]: Oracle Select文
□投稿者/ a -(2013/12/24(Tue) 14:43:11)
    No69405 (MassyPie さん) に返信
    > <aさん>
    >
    > コメントありがとうございます。
    > シンプルにすると、↓のようになり、'2013/12/15 20:10:20' より大きく'2013/12/20 20:10:20'以下のデータが取れています。
    > ('2013/12/15 20:10:20' < timestamp) and (timestamp <= '2013/12/20 20:10:20')
    >
    すみません。
    意図は理解できていたはずですが、なんか勘違いしてたみたいです。
    お騒がせしました。m(_._)m
記事No.69379 のレス / END /過去ログ118より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -