SQL使用C#2013插入语法错误

时间:2014-12-15 21:31:58

标签: c# sql visual-studio visual-studio-2013 ms-access-2010

string Connstr = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Shahrivar92\Documents\Safa_co.accdb");
OleDbConnection oleconn = new OleDbConnection(Connstr);
OleDbCommand olecmd = new OleDbCommand();
olecmd.Connection = oleconn;         
olecmd.CommandText = string.Format("insert into info-ghrardad(gh-note,gh-tarikh,gh-mablagh,gh-shomareh,gh-modat,today-date)values(@gh-note,@gh-tarikh,@gh-mablagh,@gh-shomareh,@gh-modat,@today-date)");

oleconn.Open();
olecmd.Parameters.AddWithValue("@gh-note", Gh_name.Text);
olecmd.Parameters.AddWithValue("@gh-tarikh", Gh_date.Text);
olecmd.Parameters.AddWithValue("@gh-mablagh", Gh_mablagh.Text);
olecmd.Parameters.AddWithValue("@gh-shomareh", Gh_number.Text);
olecmd.Parameters.AddWithValue("@gh-modat", Gh_modat.Text);
olecmd.Parameters.AddWithValue("@today-date", TodayDate.Text);
olecmd.ExecuteNonQuery();          
oleconn.Close();
System.Data.OleDb.OleDbException was unhandled
  HResult=-2147217900
  Message=Syntax error in INSERT INTO statement.

1 个答案:

答案 0 :(得分:2)

除了marc_s关于命名参数的评论和使用"?"作为占位符,表格中的列名为" - "因为这个名字是IMO一个非常糟糕的命名惯例。这就像你告诉系统减去两个值。

也就是说,你可能需要将插入值更改为"?"占位符并以相同的顺序(您已经拥有)添加它们,但也可能需要将列名包括在括号内,勾号,等等,例如

insert into [info-ghrardad] (
   [gh-note], [gh-tarikh], [gh-mablagh], [gh-shomareh], [gh-modat], [today-date] )
   values( ?, ?, ?, ?, ?, ?)");

那么你的参数......

此外,如果您只是将文本放入文本而不是实际日期或日期/时间数据类型值,那么您的日期字段可能是崩溃的一部分,如果这是实际结构所具有的。类似地,如果金额应该是数字,并且您正在抓取简单文本,请确保它具有适当的预期格式。