使用组合框从数据库中检索数据

时间:2016-04-18 09:26:00

标签: c# sql sql-server-express

我有一个小学期项目,我有一个连接到数据库表的组合框,我想编写一个按钮,当我从组合框中选择一个值时显示表的其余部分。 我在该项目中使用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);

2 个答案:

答案 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注入漏洞的信息。请注意,只要您在其中一个文本框中输入',您的请求就会中断。

相关问题