2011-02-28 80 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