C# C“OleDb例外情况”;没有给出一个或多个所需参数的值“;试图从Access数据库中删除时
我有一张表格,上面写着“学期、科目、录取通知书、成绩”,其中“学期”和“科目”是主键。当我使用查询时C# C“OleDb例外情况”;没有给出一个或多个所需参数的值“;试图从Access数据库中删除时,c#,ms-access,oledbconnection,oledbexception,C#,Ms Access,Oledbconnection,Oledbexception,我有一张表格,上面写着“学期、科目、录取通知书、成绩”,其中“学期”和“科目”是主键。当我使用查询时 “从课程信息中删除,其中学期=1,科目='CSE-414'; 它在access数据库中工作得很好,但当我试图在c#代码中使用它时,总是出现异常 此外,如果我使用“从课程信息中删除,其中学期=1 我想在WHERE条件下同时使用“主题”和“学期”(因为同一学期可能有不同的主题) 看看我的代码 connection_string = aConnection.return_connectionStrin
“从课程信息中删除,其中学期=1,科目='CSE-414';
它在access数据库中工作得很好,但当我试图在c#代码中使用它时,总是出现异常
此外,如果我使用“从课程信息中删除,其中学期=1
我想在WHERE条件下同时使用“主题”和“学期”(因为同一学期可能有不同的主题)
看看我的代码
connection_string = aConnection.return_connectionString(connection_string);
string sql_query = "DELETE FROM Course_Information WHERE Semester = " + this.textBox1.Text + " AND Subject = " + this.textBox2.Text + " ;";
OleDbConnection connect = new OleDbConnection(connection_string);
OleDbCommand command = new OleDbCommand(sql_query, connect);
try
{
connect.Open();
OleDbDataReader reader = command.ExecuteReader();
MessageBox.Show("Delete Successful!");
connect.Close();
UpdateDatabase();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
在工作示例查询中,包括从
this.textBox2.Text
获得的值周围的引号
" AND Subject = '" + this.textBox2.Text + "';";
想象一下这个.textBox2.Text
包含文本foo。如果不在WHERE
子句中添加这些引号,db引擎将看到。。。其中,学期=1,主题=foo
,但在名为foo
的数据源中找不到任何内容,因此假设它必须是一个参数。您需要引号来向db引擎发出信号,它是一个字符串文本值“foo”
实际上,如果切换到参数查询,可以避免这种类型的问题,因为您不需要麻烦处理
DELETE
语句中的那些引号。参数查询还可以防止SQL注入。如果恶意用户可以在此.textBox2.Text
中输入'OR'a'='a,则表中的所有行都将被删除。如果“插入”查询出现相同错误,则可以使用此方法避免异常
string sqlQuery = "INSERT into EndResultOfTestCases(IDsOfCases,TestCaseName,ResultCase,ResultLog) VALUES(@ids, @casename, @results, @logs)";
connection = new OleDbConnection(connectionStringToDB);
command = new OleDbCommand(sqlQuery, connection);
command.Parameters.AddWithValue("@ids",IDs);
command.Parameters.AddWithValue("@casename", CaseName);
command.Parameters.AddWithValue("@results", resultOfCase);
command.Parameters.AddWithValue("@logs", logs);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
它起作用了!:我不敢相信这只是因为“它不起作用!”!谢谢!尽管如此,还是考虑切换到参数。使用此代码,您可以向应用程序的每个用户打开数据库