72446


### 発生している問題

カレンダーアイコンをクリックしたら日付を選択できてその日付に該当するデータをオラクルから取得したいのですが、エラーが発生して`read=null`になってしまっているので解決したいです。  
オラクルの日付データがyyyyMMddというデータで  
コードのStartDateに入っている値は`yyyy/MM/dd/hh/mm/ss`になっています。

### エラー内容

指定した月が無効です。

### 環境

  * visualstudio2017
  * 言語 c#

### ソースコード

[code]

    string DataSource ="oracleのPASS"
    string sql= "select * from SampleTable where date>= :startDate";
    using(OracleConnection conn = new OracleConnection(DataSource))
    {
     conn.Open();
     using(OracleCommand cmd=new OracleCommand(sql,conn)
     {
                        //パラメータの作成
                        OracleParameter parameterS = new OracleParameter();
    
                        //パラメータ名前を指定します。
                        parameterS.ParameterName = "StartDate";
    
                        //パラメータの値を設定します。
                        parameterS.Value = StartDate.Value.Date;
    
                        //パラメータをコマンドに追加します。
                        cmd.Parameters.Add(parameterS);
    
    
       using(OracleDataReader read=cmd.ExecuteReader())
       {
    
       }
      }
     }
    
[/code]


CC BY-SA 4.0
2020-12-05T13:28:32.463
72430
2020-12-06T14:59:03.963
2020-12-06T13:19:00.960
42419
42419
question
c# oracle
任意の日付を取得したい


表 SampleTable の列 date の型は何ですか？  
(varchar, varchar2, date, その他)

又、列名や表名やに データ型名を使うのは止めた方がいいと思います。  
列名か型名かいちいち判断しなければならないので、書いたのとは別の人が読む場合  
無用な判断を強いることになると思うからです。

また、ソースコードの変数 StartDate のデーター型は何ですか？  
C# ということなので、DatePicker だろうとは思いますが、StartDate.Value.Date の  
データー型が 表 SampleTable の列 date の型と一致しているでしょうか？


CC BY-SA 4.0
2020-12-05T17:42:56.837
72433
2020-12-05T17:42:56.837
43029
72430
answer


列名は本当に "掲載日" なんですか？ だとしたら。既に掲載しているソースコード中の  
sql (select 文) の where 句にある date が列名ではないので期待通りの動作ができない  
のではないでしょうか。

列名 "掲載日" の型が文字列(varchar2)なら、parameterS の方もデーター型を文字列としておいた方が  
Oracle DB に対して、暗黙の型変換に頼らない(つまり予期した通りに動く)クエリーになるでしょう。

例えば

[code]

    cmd.Prameters.add(":starDate", Oracle.DataAccess.OracleClient.OracleDbType.Varchar2).Value = 
    StartDate.Value.Date.ToString("yyyyMMdd");
    
[/code]

\--------- 回答を以下に追加します --------

> オラクルに存在する列名にコロンをつけるという形なのでしょうか？  
>  //パラメータの名前を指定しますの位置で上記のご回答を宣言する形なのでしょうか？

cmd.Parameters.add(":startDate", ...),Value = ...; の :startDate の部分ですが、  
sql 文中の where 句にある date >= :startDate にある :startDate という  
バインド変数を指しています。  
表の列名ではありませんし、 startDate という列名があるとは知りませんでした。  
Parameter の設定時には ':' を付けなくてもいいようですが、私は付けています。  
あくまでも、バインド変数だと区別するためです。  
(不勉強で、':' は付けなくてもいいということは知りませんでした)  
\------ 追記終わり -------


CC BY-SA 4.0
2020-12-06T04:46:32.863
72446
2020-12-06T14:59:03.963
2020-12-06T14:59:03.963
43029
43029
72430
answer