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

Retrieving data from database by using a combo box

我有一个小学期项目,我有一个连接到数据库的组合框 table,我想编写一个按钮,当我从中选择一个值时显示 table 的其余部分组合框。 我在该项目中使用 SQLEXPRESS 数据库可能会有所帮助。

我试过这段代码,但它对我不起作用,给我错误

incorrect syntax near ','.

 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);
        }

因此 DocID 代码的 ComboBox 是:

    this.doctorTableAdapter.Fill(this.testdb_morgDataSet.Doctor);

好消息是该系统实际上非常有用。如果您查看 SQL 命令中的第一个逗号,它在您的 txtName.txt 之后,您忘记将其放入引号中(我看到您已经为其他文本项做了)。

所以尝试:

" Select * From Doctor Where DocName='" + txtName.Text + "' , Gender='" + chk1.Text + "' , BirthDate='" + dtpBDate.Text + "' , Address='" + txtAddress.Text + "' , Salary='" + txtSalary.Text + "')"

如果您想在以后改进您的项目或编写生产代码,那么您将需要考虑防止 SQL 注入。开始时不要担心,但要记住! ... 为了防止 SQL 注入,您可以使用参数而不是直接将用户字段放入 SQL 查询中,或者有人可以使用 SQL 注入对您的数据库做坏事(例如,如果txtName.Text 被设置为 "'; Delete * FROM Doctor;"...)

关于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 注入漏洞。 请注意,一旦您在其中一个文本框中输入 ',您的请求就会中断.