C#SQL选择日期问题

时间:2011-02-28 11:25:00

标签: c# sql

我是c#的新手 我有SQL和DATE的问题 在这个查询中我有错误...

  

ERROR [22018] [Microsoft] [ODBC dBase   驱动程序]标准中的数据类型不匹配   表达

    private void button2_Click(object sender, EventArgs e)
        {
            char split = '.';
            string[] s = dateTimePicker1.Text.Split(split);
            string sx = s[0] + "." + s[1] + ".";


            System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
            oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;
SourceDB=C:\sales\;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
            oConn.Open();
            System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
            oCmd.CommandText = @"SELECT COD,PRICE,SMAN_COD FROM C:\sales\sl.DBF WHERE DATE='"+dateTimePicker1.Text+"'";
            DataTable dt = new DataTable();
            dt.Load(oCmd.ExecuteReader());
            oConn.Close();

            dataGridView1.DataSource = dt;

        }

请帮帮我

5 个答案:

答案 0 :(得分:7)

根本不要在SQL中发送日期/时间值。使用参数化查询 - 这样您就不需要关心格式了。当你可以在不解析和格式化数据的情况下进行数据通信时,为什么会使事情变得复杂并让自己对微妙的问题持开放态度?

此外,如果你习惯使用所有值的参数,你将避免SQL注入攻击。

在这种情况下,您使用DateTimePicker.Value代替DateTimePicker.Text来获取DateTime的值。

答案 1 :(得分:2)

如果您想确保以正确的方式格式化发送到数据库的日期,我建议采用以下日期格式:

yyyy-MM-dd

据我所知,无论您的机器文化和运行数据库服务器的机器如何,这都将起作用。

此格式称为ISO 8601。

答案 2 :(得分:2)

尝试使用Parametrized Queries to Avoid Sql Injection

ooops,OdbcCommand似乎与SqlCommand For Parametriezed Queries不同。

更改

System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT COD,PRICE,SMAN_COD FROM C:\sales\sl.DBF WHERE DATE='"+dateTimePicker1.Text+"'";

System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT COD,PRICE,SMAN_COD FROM C:\sales\sl.DBF WHERE DATE=?";
oCmd.Parameters.Add ("DATE", OdbcType.DateTime).Value = dateTimePicker1.Value;

希望这会对你有帮助!

答案 3 :(得分:1)

我认为问题在于您的输出日期是12/01/2011的格式

如果是的话。你需要把它转换成2010-01-12

DateTimePicker我认为有一个名为SelectedDate而不是Text

的属性

如果是这种情况那么

使用:

String.Format("{0:yyyy-MM-dd}", DatePicker1.SelectedDate);

答案 4 :(得分:0)

这种情况正在发生,因为sql期望日期采用某种格式。尝试替换

dateTimePicker1.Text

dateTimePicker1.Text.ToString("dd mmm yyyy");

希望这有帮助。