使用组合框从数据库中检索数据
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 注入漏洞。 请注意,一旦您在其中一个文本框中输入 '
,您的请求就会中断.
我有一个小学期项目,我有一个连接到数据库的组合框 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 注入漏洞。 请注意,一旦您在其中一个文本框中输入 '
,您的请求就会中断.