我有一个小学期项目,我有一个连接到数据库表的组合框,我想编写一个按钮,当我从组合框中选择一个值时显示表的其余部分。 我在该项目中使用SQLEXPRESS数据库可能正在帮助。
我尝试了这段代码,但它对我没用,给我错误
','附近的语法不正确。
string Msg;
Msg = m.RunDml(" Select * From Doctor Where DocName=" + txtName.Text + " , Gender='" + chk1.Text + "' , BirthDate='" + dtpBDate.Text + "' , Address='" + txtAddress.Text + "' , Salary='" + txtSalary.Text + "')");
if (Msg == "ok")
{
MessageBox.Show(" Editing Successfully done! ");
}
else
{
MessageBox.Show(Msg);
}
因此ComboBox
代码的DocID
为:
this.doctorTableAdapter.Fill(this.testdb_morgDataSet.Doctor);
答案 0 :(得分:0)
好消息是系统实际上非常有用。如果您查看SQL命令中的第一个逗号,请查看txtName.txt
后的" Select * From Doctor Where DocName='" + txtName.Text + "' , Gender='" + chk1.Text + "' , BirthDate='" + dtpBDate.Text + "' , Address='" + txtAddress.Text + "' , Salary='" + txtSalary.Text + "')"
,您忘记将其放入引号(我看到您已为其他文本项做过)。< / p>
所以试试:
"'; Delete * FROM Doctor;"
如果您想在以后改进项目或编写生产代码,那么您将需要考虑防止SQL注入。在开始时不要担心它,但要记住它! ...
为了防止SQL注入,您可以使用参数而不是直接将用户字段放在SQL查询中,或者有人可以使用SQL注入来对数据库执行错误操作(例如,如果txtName.Text设置为@PathParam
。 ..)
答案 1 :(得分:0)
关于SQL injection的观点已在评论和noelicus的回答中提出。
您的错误原因似乎是您使用逗号来使用AND
(或者 - 不太可能 - OR
)。 WHERE
条款中不允许使用逗号(afaik)。我只是用我的SQL服务器尝试过这个并且得到了和你一样的错误。
有关详细信息,请参阅this MSDN documentation of the WHERE
clause。
所以请将此请求更改为:
"SELECT * FROM Doctor WHERE DocName='" + txtName.Text + "' AND Gender='" +
chk1.Text + "' AND BirthDate='" + dtpBDate.Text + "' AND Address='" +
txtAddress.Text + "' AND Salary='" + txtSalary.Text + "'"
不要忘记txtName.Text
周围的引号,并删除末尾多余的右括号。
请告知自己有关SQL注入漏洞的信息。请注意,只要您在其中一个文本框中输入'
,您的请求就会中断。