2011-02-28 31 views
0

我真的新在C# 我有SQL和日期 问题,在此查询我有错误...C#SQL选择日期问题

ERROR [22018] [微软] [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; 

     } 

请帮我

+1

是您的“日期”列日期类型?约会时间? dateTimePicker1.Text包含哪些文本(只是日期值或日期+时间)? – Pwninstein 2011-02-28 11:28:29

回答

2

尝试使用Parametrized Queries to Avoid Sql Injection

哎呀,看来的OdbcCommand用的SqlCommand对于Parametriezed查询不同。

变化

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; 

希望这会帮助你!

+0

这工作... :) tnx ....但我需要tur使用dateTimePicker1.Text,因为在这种情况下,我只做选择..我必须使用基地waht是 – Lamzaks 2011-02-28 13:03:40

2

如果你想确保发送到数据库中的日期以适当的方式被格式化,我会建议在以下日期格式:

yyyy-MM-dd 

就我所知,无论您的计算机是什么文化,以及运行数据库服务器的计算机如何,这都将工作。

这种格式被称为ISO 8601

1

我认为问题是,你的产出日期是在12/01/2011

如果是格式。你需要将其转换为2010-01-12

中的DateTimePicker我觉得有一个名为SelectedDate而不是文本

财产,如果是这样的话那么

使用:

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

不要在SQL中发送日期/时间值。使用参数化查询 - 这样你就不需要关心格式。为什么复杂的事情,让你自己打开微妙的问题,当你可以沟通的数据不解析和格式化?

此外,如果您习惯使用所有值的参数,则可以避免SQL注入攻击。

在这种情况下,您将使用DateTimePicker.Value而不是DateTimePicker.Text,以得到DateTime的值。

0

发生这种情况是因为sql期望日期处于特定格式。试着用

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

希望这有助于更换

dateTimePicker1.Text