3

我有一个小问题。我正在使用 csv 文件作为数据库,并使用 ADO.NET 的 OLEDB 函数来询问它。我只想选择两个数据之间包含“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 七,我读到对于解决 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

第二次更新

将您的 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 整数格式中。这是我想到的唯一选择,仍然不知道为什么不能使用 Datetime 字段进行搜索。

于 2012-08-14T12:36:11.547 回答