INSERT INTO

时间:2016-06-23 09:50:54

标签: c# .net ms-access oledb oledbconnection

我第一次在Access中创建了一个表,它的名字是punchMachineData    它在链接http://prntscr.com/bjxs2v

上提供了以下列,各自的类型

我创建一个动态插入查询,如下所示:

  string str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Sara\Desktop\punchMachineDataBase.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')

我遇到异常的错误是:INSERT INTO语句中的语法错误

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()

为什么我拥有它以及如何解决它?

2 个答案:

答案 0 :(得分:1)

列名称与屏幕截图中共享的列名称不同。

使用 -

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

而不是 -

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

或者更改架构中的名称。

  

另外,这些命令很容易SqlInjection,因此建议使用   参数化查询代替普通的sql语句。

答案 1 :(得分:0)

您需要使用方括号

封装表名和列名

“INSERT into [punchMachineData]([empID],[date],[time],[bstatus])......

此处的一部分,不要使用字符串cancatenation来构建sql命令。 当您在输入中有单引号或者您有其他需要输入值特定格式的字段时,这种做法会导致语法错误。但最糟糕的是Sql Injection的问题

所以你的代码应该用这种方式编写:

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()