【发布时间】:2018-08-10 11:45:42
【问题描述】:
我正在尝试在 C# 中执行插入查询,但它一直告诉我插入语句中的语法错误。
这是我的查询:
Checks.SQL.Insert(mydb, "SELECT * FROM Employee", "INSERT INTO Employee(First_Name,Last_Name,Email,CellPhone_Number,TypeOfUser,Username,Password) VALUES('" + txtFirstName.Text + "','" + txtLastName.Text + "','" + txtEmail.Text + " ', '" + txtCellphone.Text + "'," + typeId + ",'"+Encrypcion.encrypt(txtUsername.Text)+"','"+Encrypcion.encrypt(txtPassword.Text)+"' )");
这是我的支票插入功能
public static void Insert(OleDbConnection mydb, string SelectQuery, string InsertQuery)
{
mydb.Open();
OleDbDataAdapter query2 = new OleDbDataAdapter(SelectQuery, mydb);
OleDbCommand cmd = new OleDbCommand(InsertQuery, mydb);
query2.InsertCommand = cmd;
query2.InsertCommand.ExecuteNonQuery();
mydb.Close();
}
这是我的InsertQuery 的图片,以输入数据为例:
查看我的餐桌信息图片:
【问题讨论】:
-
Checks.SQL.Insert函数在做什么,我也可能会尝试将您的 Insert SQL 语句存储到字符串中并打印出来以提供给我们。这样可能更容易发现您的错误。 -
向 Bobby Tables 打个招呼。现在以更严重的方式,您的问题可能是因为您以不应该执行的方式执行插入操作,您的代码容易受到 SQL 注入的影响,并且可能导致 SQL 错误,具体取决于用户输入。请注意 with parametrized queries is 更容易 to 写 SQL 和 你 得到 a more clean SQL to review in 案例 某事 失败。
-
“我已经完成了验证以确保代码中的公平输入” - 参数化会更快、更容易、更安全……但是:这里要做的第一件事是 找出实际的字符串是什么,一旦连接。当你有它时,记录它,然后查看它以找到问题......注意:你实际上是在电子邮件末尾添加一个空格。但是:适当的参数可以简单地解决这个问题。另外:您不应该加密密码(除非您正在编写密码管理器);你应该散列(加盐)
-
附加说明:我的朋友 D'Arcy O'Neal 很遗憾她不能使用您的应用程序 :(