将WHERE子句与csv文件一起使用ADO.NET / C#

时间:2012-08-13 15:08:14

标签: c# csv ado.net oledb

我有点问题。我正在使用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 =&gt; mydata AND DATA&lt; = 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 个答案:

答案 0 :(得分:1)

嗯,这个:

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

显然是无效的SQL。也许你的意思是:

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

(您使用=>代表“大于”而不是>=。)

答案 1 :(得分:1)

我认为你的意思是:

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

你刚刚获得了=&gt;错误的方式回合!

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") + "'"

答案 2 :(得分:0)

尝试

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

请注意“&lt;”的顺序和第一次比较中的“=”。

答案 3 :(得分:0)

因为我正在查询csv我不能使用sql的函数(错误说它们不存在)甚至不能将我的DATA与字符串进行比较。如果我在查询中加入了一个不带引号的日期,但是我不尊重WHERE子句,选择所有记录。 查询似乎不仅仅适用于DateTime格式,所以我将我的数据放在yyyyMMdd整数格式中。这是我唯一的选择,但仍然不知道为什么不能使用Datetime字段进行搜索。 / p>