问题描述
string tableName = "messages_user-test";
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\janke\\source\\repos\\Unichat\\Unichat\\bin\\Debug\\history.accdb;Persist Security Info=False;");
conn.open();
OleDbCommand comm = new OleDbCommand();
comm.Connection = conn;
string writestring = "insert into " + tableName + " ([from],[to],[datetime],[message]) values (@from,@to,@datetime,@message);";
Console.WriteLine(writestring);
comm.CommandText = writestring;
comm.Parameters.AddWithValue("@from",from);
comm.Parameters.AddWithValue("@to",to);
comm.Parameters.AddWithValue("@datetime",date);
comm.Parameters.AddWithValue("@message",text);
comm.ExecuteNonQuery();
comm.dispose();
conn.Close();
当我执行程序时,我在 comm.ExecuteNonQuery();
处收到此错误
System.Data.OleDb.OleDbException: "Syntaxerror in INSERT INTO statement."
我对 OleDB 还很陌生,我已经阅读了数百个关于此错误的帖子,但没有任何效果对我有用。
解决方法
-
表名和字段名使用方括号
-
可能是导致错误的日期(从、到、日期)值
-
不要忘记添加 try..catch
-
检查分析器以获取更多详细信息
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\janke\\source\\repos\\Unichat\\Unichat\\bin\\Debug\\history.accdb;Persist Security Info=False;")) { string strFeedback = ""; string tableName = "messages_user-test"; string writestring = string.Format("INSERT INTO [{0}] ([from],[to],[datetime],[message]) VALUES (@from,@to,@datetime,@message);",tableName); OleDbCommand comm = new OleDbCommand(writestring); comm.Parameters.Add(new OleDbParameter("@from",from.ToString("yyyy-MM-dd"))); comm.Parameters.Add(new OleDbParameter("@to",to.ToString("yyyy-MM-dd"))); comm.Parameters.Add(new OleDbParameter("@date",date.ToString("yyyy-MM-dd HH:mm:ss"))); comm.Parameters.Add(new OleDbParameter("@message",text)); try { strFeedback = comm.ExecuteNonQuery().ToString() + " record has been added successfully!"; } catch (Exception ex) { strFeedback = "ERROR: " + err.Message; } }