C# OLEDBEException:INSERT INTO语句中的语法错误

C# OLEDBEException:INSERT INTO语句中的语法错误,c#,.net,insert-into,oledbcommand,oledbexception,C#,.net,Insert Into,Oledbcommand,Oledbexception,我在INSERT INTO语句中发现OLEDBEException:语法错误。我认为我的发言很好。参数具有良好的数据类型,所以这不是问题。有人知道问题出在哪里吗 OleDbCommand command = new OleDbCommand(); command.Connection = conn; command.CommandType = CommandType.Text; command.CommandText = Strin

我在INSERT INTO语句中发现OLEDBEException:语法错误。我认为我的发言很好。参数具有良好的数据类型,所以这不是问题。有人知道问题出在哪里吗

        OleDbCommand command = new OleDbCommand();
        command.Connection = conn;
        command.CommandType = CommandType.Text;
        command.CommandText = String.Format("INSERT INTO Employees" +
            " (ID, Company, Last Name, First Name, E-mail Address, Job Title, Business Phone, Home Phone" +
            ", Mobile Phone, Fax NUmber, Address, City, State/Province, ZIP/Postal Code, Country/Region, Web Page, Notes)" +
            " Values ('{0}', '{1}','{2}','{3}','{4}','{5}'," +
            "'{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}')", iD,kompanija,prezime,ime,email,
           zvanje,busTelefon,telefon,mobTelefon,fax,adresa,grad,okrug,postanskiBroj,zemlja,web,beleska);               zvanje,busTelefon,telefon,mobTelefon,fax,adresa,grad,okrug,postanskiBroj,zemlja,web,beleska);

        conn.Open();
        command.ExecuteNonQuery();
        conn.Close();
错误消息:

UDATE SQL:

        OleDbCommand command = new OleDbCommand();
        command.Connection = conn;
        command.CommandType = CommandType.Text;
        string cmdText = String.Format(@"UPDATE TABLE Employees " +
                        "SET" +
                        " Company='" + kompanija + "'," +
                        " [Last Name]='" + prezime + "'," +
                        " [First Name]='" + ime + "'," +
                        " [E-mail Address]='" + email + "' ," +
                        " [Job Title]='" + zvanje +"'," +
                        " [Business Phone]='" + busTelefon + "'," +
                        " [Home Phone]='" + telefon + "'," +
                        " [Mobile Phone]='" + mobTelefon + "'," +
                        " [Fax Number]='" + fax + "'," +
                        " Address='" + adresa + "'," +
                        " City='" + grad + "'," +
                        " [State/Province]='" + okrug + "'," +
                        " [ZIP/Postal Code]='" + postanskiBroj + "'," +
                        " [Country/Region]='" + zemlja + "'," +
                        " [Web Page]='" + web + "'," +
                        " Notes='" + beleska + "' WHERE ID="+iD);
        command.CommandText = cmdText;

        conn.Open();
        command.ExecuteNonQuery();
        conn.Close();

这个SQL不起作用。与前面相同的错误。

当字段名包含空格或其他误导字符(如/(除法运算符)时,需要将它们括在方括号中

 string cmdText = @"INSERT INTO Employees
                  (ID, Company, [Last Name], [First Name], [E-mail Address],
                   .., [State/Province], ....) VALUES (....)";
此外,您没有在查询中使用参数。Format只是另一种类型的字符串连接,它不能通过无效输入保护您(例如,尝试在lastname值中使用单引号),也不能从中保存代码

您应该始终使用参数化查询

string cmdText = @"INSERT INTO Employees ( your_field_list_comma_sep)
                  VALUES (@id, @company, @lastname, @firstname, 
                  ......)";

OleDbCommand cmd = new OleDbCommand(cmdText, conn);
cmd.Parameters.Add("@id", OleDbType.Integer).Value = iD;
cmd.Parameters.Add("@company", OleDbType.VarWChar).Value = kompanija;
cmd.Parameters.Add("@lastname", OleDbType.VarWChar).Value = prezime;
cmd.Parameters.Add("@firstname", OleDbType.VarWChar).Value = ime;
....
// add all the other parameters with their name and type
....
cmd.ExecuteNonQuery();

当字段名包含空格或其他误导字符(如/(除法运算符)时,需要将它们括在方括号中

 string cmdText = @"INSERT INTO Employees
                  (ID, Company, [Last Name], [First Name], [E-mail Address],
                   .., [State/Province], ....) VALUES (....)";
此外,您没有在查询中使用参数。Format只是另一种类型的字符串连接,它不能通过无效输入保护您(例如,尝试在lastname值中使用单引号),也不能从中保存代码

您应该始终使用参数化查询

string cmdText = @"INSERT INTO Employees ( your_field_list_comma_sep)
                  VALUES (@id, @company, @lastname, @firstname, 
                  ......)";

OleDbCommand cmd = new OleDbCommand(cmdText, conn);
cmd.Parameters.Add("@id", OleDbType.Integer).Value = iD;
cmd.Parameters.Add("@company", OleDbType.VarWChar).Value = kompanija;
cmd.Parameters.Add("@lastname", OleDbType.VarWChar).Value = prezime;
cmd.Parameters.Add("@firstname", OleDbType.VarWChar).Value = ime;
....
// add all the other parameters with their name and type
....
cmd.ExecuteNonQuery();

您还需要发布错误消息。这是什么类型的数据库?单击该图像的“查看详细信息”时会显示什么?您还需要发布错误消息。这是什么类型的数据库?单击该图像的“查看详细信息”时会显示什么?第一个建议不起作用。我将尝试使用参数化查询。是的,当我尝试将带空格的字段放在方括号中时,我也有同样的错误。您应该将方括号也放在[State/Province]的周围,否则,/被视为除法运算符,在INSERT语句中不太正确。您的ID不是由db生成的吗?此外,您还在单引号之间传递它,这表示sql Server的字符串。我在更新代码中看不到任何语法错误。但是请记住,如果您的任何输入数据包含一个引号,那么您注定会遇到另一个语法错误。第一个建议不起作用。我将尝试使用参数化查询。是的,当我尝试将带空格的字段放在方括号中时,我也有同样的错误。您应该将方括号也放在[State/Province]的周围,否则,/被视为除法运算符,在INSERT语句中不太正确。您的ID不是由db生成的吗?此外,您还在单引号之间传递它,这表示sql Server的字符串。我在更新代码中看不到任何语法错误。但是请记住,如果您的任何输入数据包含一个单引号,那么您注定会遇到另一个语法错误。