插入中的语法错误



我第一次在访问中创建了一个表格的名称是punchmachinedata 它具有以下列,其链接上给出的各自类型http://prntscr.com/bjxs2v

我创建一个动态插入查询:

  string str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersSaraDesktoppunchMachineDataBase.accdb";
                    OleDbConnection conn = new OleDbConnection(str);
                    try
                    {
                        conn.Open();       
                        String my_querry = "INSERT into punchMachineData (empID,date,time,bstatus) Values('" + vSEnrollNumber + "','" + Convert.ToString(vYear) + "/" + String.Format("{0:D2}", vMonth) + "/" + String.Format("{0:D2}", vDay) + "','" + String.Format("{0:D2}", vHour) + ":" + String.Format("{0:D2}", vMinute) + "','" + bstatus + "')";
                        OleDbCommand cmd = new OleDbCommand(my_querry, conn);
                        cmd.ExecuteNonQuery();
                        Console.WriteLine("saved");                      
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Failed due to" + ex.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }

在调试my_querry时,我得到了: INSERT into punchMachineData (empID,date,time,bstatus) Values('1','2016/06/22','18:19','1')

和错误我出现的例外是:插入到语句中的语法错误

System.Data.OleDb.OleDbException (0x80040E14): Syntax error in INSERT INTO statement.
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

为什么我有它以及如何修复它?

列名与屏幕快照中共享的名称不同。

使用 -

INSERT into punchMachineData (empID,dates,times,bstatus)...

而不是 -

INSERT into punchMachineData (empID,date,time,bstatus)...

或更改架构中的名称。

在旁注上,此类命令容易出现SqlInjection,因此建议使用 参数化查询代替普通SQL语句。

您需要用方括号封装表名和列名

"插入[punchmachinedata]([[empid],[date],[time],[bstatus])..................................

一个部分,请勿使用字符串comcatenation构建SQL命令。当输入中有一个报价时,此练习会导致语法错误,或者您是否有其他字段需要特定的输入值格式。但是最糟糕的是SQL注入的问题

因此,您的代码应以这种方式编写:

INSERT into punchMachineData (empID,date,time,bstatus) Values
cmdInsert.CommandText = "INSERT INTO [punchMachineData ] (empID, date, time, bstatus) VALUES " + "(?,?,?,?)"
cmdInsert.Parameters.AddWithValue("@p1",pass param1 here)
cmdInsert.Parameters.AddWithValue("@p2",pass param2 here)
cmdInsert.Parameters.AddWithValue("@p3",pass param3 here)
cmdInsert.Parameters.AddWithValue("@p4",pass param4 here)
cmdInsert.Connection = cnnOLEDB
cmdInsert.ExecuteNonQuery() 

相关内容

  • 没有找到相关文章

最新更新