【问题标题】:Syntax Error when writing to my Access database写入我的 Access 数据库时出现语法错误
【发布时间】:2021-06-01 06:18:06
【问题描述】:

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

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 的新手,我已经阅读了数百个关于此错误的线程,但对我没有任何帮助。

【问题讨论】:

  • 我不是 100% 确定,但我发誓我记得没有使用 Access 命名参数占位符,并且必须在查询字符串中使用 ? 作为占位符。我可能是错的,因为我接触访问权限已有大约 10 年了。
  • 我已经试过了,但是没用。
  • a) 如上所述使用?。 b) 将messages_user-test 更改为[messages_user-test]。这行得通吗?
  • 是的,这对我有用。非常感谢!这已经困扰我好几天了!

标签: c# database ms-access oledb


【解决方案1】:
  • 表名和字段名使用方括号

  • 可能是导致错误的日期(从、到、日期)值

  • 别忘了加上 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;
             }           
         }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多