3

少し問題があります。データベースとして csv ファイルを使用しており、ADO.NET の OLEDB 関数でそれを求めています。次のように、2 つのデータの間に列「DATA」が含まれる行のみを選択したい:

String conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\;
;Extended Properties='text;HDR=Yes;Format=Delimited(;)';";

OleDbConnection cn = new OleDbConnection(conn);
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [mydb]", cn);
OleDbDataAdapter daAd = new OleDbDataAdapter();
daAd.SelectCommand= cmd;
cn.Open();
DataTable dt = new DataTable();
daAd.Fill(dt);
DateTime mydata= Convert.ToDateTime("01/01/1990");
DateTime mydata2= Convert.ToDateTime("01/01/2000");

今までは何も問題はありませんでしたが、私が変わると

 "SELECT * FROM [mydb]"

 "SELECT * FROM [mydb] WHERE DATA>= '"+ mydata.Date +"' AND DATA<='"+ mydata2.Date +"' 

「クエリ 'WHERE DATA=> mydata AND DATA<= mydata2' に構文エラー (演算子がありません)」というエラーが表示されます。解決方法が本当にわかりません。詳細情報: .CSV ファイルは次のようにフォーマットされています。

DATA;INFO1;INFO2;INFO3
01/01/1990;1;2;3`

そしてschema.iniにはこれがあります:

[mydb.csv]
Format=Delimited(;)
ColNameHeader=True
DateTimeFormat=dd-MM-yyyy
Col1=DATA DateTime
Col2=info1 Long Width 3
Col3=info2 Integer 
Col4=info3 Integer

編集: x86 Seven を実行しています。JET ドライバーの非互換性を解決するには、schema.ini ファイルで十分であると読みました。私が正しいことを願っています。

4

4 に答える 4

1

さて、これ:

SELECT * FROM [mydb] WHERE DATA=> mydata AND DATA<= mydata2

明らかに無効な SQL です。おそらくあなたは次のことを意味しました:

SELECT * FROM [mydb] WHERE DATA>= mydata AND DATA<= mydata2

( =>「よりも大きい」ではなく「よりも大きい」を使用しまし>=た。)

于 2012-08-13T15:10:50.940 に答える
1

私はあなたがこれを意味すると思います:

SELECT * FROM [mydb] WHERE DATA >= mydata AND DATA <= mydata2

あなたはちょうど間違った方法で => を取得しました!

OPの訂正後に更新

あなたのschema.iniが原因ですか?DateTimeFormat が間違っているようです:

DateTimeFormat=dd-MM-yyyy

そうではありませんか:

DateTimeFormat=dd/MM/yyyy

2回目の更新

mydata を次のように変更します。

"SELECT * FROM [mydb] WHERE DATA >= '" + 
    mydata.ToString("dd/MM/yyyy") + 
    "' AND DATA <= '" + mydata2.ToString("dd/MM/yyyy") + "'"
于 2012-08-13T15:12:01.100 に答える
0

試す

SELECT * FROM [mydb] WHERE DATA >= mydata AND DATA <= mydata2

最初の比較での「<」と「=」の順序に注意してください。

于 2012-08-13T15:10:52.177 に答える
0

私はcsvを照会しているため、SQLの関数を使用できません(エラーはそれらが存在しないと言います)、DATAを文字列と比較することさえできません。引用符で囲まれていない日付をクエリに入れると機能しますが、WHERE句を尊重せず、すべてのレコードを選択します。クエリは DateTime 形式でのみ機能しないようです。そのため、DATA を yyyyMMdd Integer 形式にします。これが唯一の代替手段であり、Datetime フィールドで検索できない理由はまだわかりません。

于 2012-08-14T12:36:11.547 に答える