尝试从 Access 数据库中删除时出现 C# OleDb 异常“没有为一个或多个必需参数给出值”

2023-11-26

我有一个包含“学期、主题、报价、结果”的表,其中“学期”和“主题”是主键。当我使用查询时

"DELETE FROM Course_Information WHERE Semester = 1 AND Subject = 'CSE-414' ;

它在 Access 数据库中完美运行,但当我尝试在 C# 代码中使用它时,我总是遇到异常。

此外,如果我使用“DELETE FROM Course_Information WHERE Semester = 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 + "';";

Imagine this.textBox2.Text包含文本foo。不添加这些引号WHERE数据库引擎会看到的子句... WHERE Semester = 1 AND Subject = foo但它在名为的数据源中找不到任何内容foo,因此假设它必须是一个参数。您需要引号来向数据库引擎发出信号,它是一个字符串文字值,'foo'.

实际上,如果你切换到参数查询,你可以避免这种类型的问题,因为你不需要担心那些引号DELETE陈述。参数查询还可以防止 SQL 注入。如果恶意用户可以进入' 或 'a' = 'a in this.textBox2.Text,表中的所有行都将被删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试从 Access 数据库中删除时出现 C# OleDb 异常“没有为一个或多个必需参数给出值” 的相关文章

随机推荐