C# 在Access C中插入查询#

C# 在Access C中插入查询#,c#,database,C#,Database,我正在使用Access数据库,我有一个用户表 我有一个插入查询: DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" + obj.PersonID + ",'" + obj.FirstName + "','" + obj.LastName + "','" + username + "','" + psw

我正在使用Access数据库,我有一个用户表

我有一个插入查询:

DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" +
    obj.PersonID +
    ",'" + obj.FirstName +
    "','" + obj.LastName +
    "','" + username +
    "','" + psw +
    "'," + permission + ")");

我检查了所有参数的值,确保它们与表中的值相同。。。但是它说我的插入查询中有语法错误。

参数,参数,参数。代码的第一个好处是,您忘记了单引号。其次,可以避免可怕的SQL注入漏洞。第三,您的代码将更易于阅读。考虑这一点:

string insertQuery = "INSERT INTO table (field1, field2, field3) VALUES (@par1, @par2, @par3)";
Database.Execute(insertQuery, var1, var2, var3);
其中var1、var2和var3是包含需要插入的值的变量

有一个更简单(但更糟糕的是,它仍然容易受到SQL注入的攻击)的解决方案,它将使您的代码比您发布的示例:string.format更具可读性。与此相反:

DataBase.Execute("Insert into Users(UserID,FirstName,SecondName,UserName,Password,Permission) Values(" +
obj.PersonID +
",'" + obj.FirstName +
"','" + obj.LastName +
"','" + username +
"','" + psw +
"'," + permission + ")");
你可以这样做,更清楚,更难忘记一些简单的引语:

string query = string.Format("Insert into Users (UserID,FirstName,SecondName,UserName,Password,Permission) Values({0}, '{1}', '{2}', '{3}', '{4}', {5})", obj.PersonID, obj.FirstName, obj.LastName, username, psw, permission);
Database.Execute(query);

将此作为使用参数进行插入的一个简单示例:

是否为用户ID自动编号?@ranifisch您应该使用参数-它应该可以帮助您避免此类问题“+permission+”)”误用单引号。我建议您对查询进行参数化。您在SQL注入方面遇到了很大的麻烦