日期:2014-05-18  浏览次数:20961 次

為何c#中向Access數據庫插入不了日期數據?
我在連接access數據庫插入一條語句時出現"準則運算式的資料類型不符合。" 
執行成功的語句如下: 
string myconning = "provider=microsoft.jet.oledb.4.0;data source=F://djp/rh/gs_attn.mdb";
OleDbConnection myconn = new OleDbConnection(myconning);
  string sqladd = "insert into clock_card (card_id,card_date,card_time,card_clock,collect_date,card_flag) ";
sqladd += "values ('" + (this.txbid.Text.Trim()) + "','2008-04-18',";
  sqladd += "'" + (this.txbtime.Text.Trim()) + "','001','2008-04-19 上午 08:24','N')";
OleDbDataAdapter oleda_add = new OleDbDataAdapter(sqladd, myconn);
DataSet mydata_add = new DataSet();
oleda_add.Fill(mydata_add);
...
以上語句插入數據庫成功,因為日期想從窗口取值,改為:
sqladd += "values ('" + (this.txbid.Text.Trim()) + "','" + (this.txbdate.Text.Trim ()) + "',";
sqladd += "'" + (this.txbtime.Text.Trim()) + "','001','" + (this.txbcollect.Text.Trim()) + "','N')";
後插入語句則總出錯:"準則運算式的資料類型不符合。" 

以上只是將'2008-04-18'(對應access數據庫字段:card_date格式:短日期)改為:'" + (this.txbdate.Text.Trim ()) + "';'2008-04-19 上午 08:24'(對應access數據庫字段:collect_date格式:通用日期)改為:'" + (this.txbcollect.Text.Trim()) + "'
後就出錯,所以不知何因,望各位高手指教,謝謝了

------解决方案--------------------
问题应该在:this.txbdate.Text.Trim() 的Trim()!
TRIM将得到这样的字符:2008-04-19上午08:24,这肯定不能转换到日期格式了!
------解决方案--------------------
access数据库中日期类型应使用##包围日期,例:#2008-9-8#。
------解决方案--------------------
'2008-04-19 08:24'肯定是可以写入的! 不知道为什么还要加个"上午".

还有为什么不用参数呢? 很少见到用TextBox来编辑DateTime类型的. 

------解决方案--------------------
试试
"values ('" + (this.txbid.Text.Trim()) + "',#" + this.txbdate.Text.Trim() + " 0:00:00#,...)"

------解决方案--------------------
sql语句插入、更新日期时,得根据不同的数据库要求定义日期字符串。
最好是通过C#的参数方式,将日期写入

例如:
表:table1
字段:ID, collect_date

System.Data.OleDb.OleDbDataAdapter oleda_add;
oleda_add.SelectCommand.CommandText = "Insert Into table1 (ID, collect_date) Values(?, ?)";
oleda_add.SelectCommand.Parameters.Add("ID", 1);
oleda_add.SelectCommand.Parameters.Add("collect_date", DateTime.Now);
oleda_add.SelectCommand.ExecuteNonQuery();