写入我的 Access 数据库时出现语法错误

问题描述

我在一个方法中得到了这段代码

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;
             }           
         }