【发布时间】:2015-05-07 10:24:18
【问题描述】:
当我想在 C# 应用程序中执行我的 SQL 语句时出现错误,它是:
没有为一个或多个必需参数指定值。
我正在使用带有 MS 访问数据库的 c#。 这是我的代码:
string string2 = "";
if (radButton2 != null)
{
string2 = " and signaal1.info='" + radButton2.Text + "' ";
}
else
string2 = " and signaal1.info='0' ";
if (radButton3 != null)
{
string2 += " and situation.info='" + radButton3.Text + "' ";
}
OleDbCommand cmd = new OleDbCommand("SELECT actionz.info, relationz.id AS actionz FROM ((((relationz LEFT OUTER JOIN conditions ON relationz.conditions_id = conditions.id) LEFT OUTER JOIN situation ON relationz.situation_id = situation.id) LEFT OUTER JOIN car_type ON relationz.car_id = car_type.id) LEFT OUTER JOIN actionz ON relationz.action_id = actionz.id) LEFT OUTER JOIN signal AS signaal1 ON relationz.signal_id = signaal1.id where car_type.info='" + radButton1.Text + "' " + string2 + " ORDER BY conditions.id ASC", objConn);
//cmd.Parameters.AddWithValue("@car_type", radButton1.Text);
OleDbDataReader dataReader = cmd.ExecuteReader();
【问题讨论】:
-
当您添加字符串值时,您的
cmd是什么样的?就在OleDbDataReader dataReader = cmd.ExecuteReader();行之前?调试您的代码并告诉我们。而且您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。 -
你应该调试实际的查询字符串,然后你可以看到你的查询出了什么问题。
-
我把它当作一个笔记!,我手动添加:car_type.info=' " + radButton1.Text + " ' "
-
总是建议先创建你的sql语句,然后将它传递给一些函数。这样你就可以很容易地记录下 sql 语句,看看它是否真的是一个有效的语句。