【发布时间】:2018-04-05 11:21:57
【问题描述】:
每当我尝试运行我的应用程序时都会收到错误消息,因为我没有获得comboBox.SelectedValue 的实际值,而是获得了DataRowView 项目。
这是我收到错误的代码:
private void InitDataGridView()
{
query = "SELECT p.name, p.age FROM Person p INNER JOIN Class c ON p.idC=c.idC WHERE p.id="
+ comboBoxClass.SelectedValue;
command = new SqlCommand(query, connection);
adapter = new SqlDataAdapter(command);
datatable = new DataTable();
adapter.Fill(datatable);
dataGridViewStudents.DataSource = datatable;
}
comboBoxClass.SelectedValue 应该返回我 "idC",因为我设置了 DataSource、DisplayMember 和 (ValueMember -> idC)。
idC 是主键 (int)。
ComboBox 设置:
comboBoxClass.DataSource = datatable;
comboBoxClass.DisplayMember = "className";
comboBoxClass.ValueMember = "idC";
【问题讨论】:
-
你有一个 SQL 注入漏洞。
-
你能说明你是如何设置你的
ComboBox的吗? -
当然!
comboBoxClass.DataSource = datatable; comboBoxClass.DisplayMember = "className"; comboBoxClass.ValueMember = "idC"; -
我认为我们正在查看您的代码的错误部分。错误发生在您写的内容中,但核心问题似乎在
comboBoxClass中。让我们看一下初始化comboBoxClass的代码,这样我们就可以理解为什么您的comboBoxClass.SelectedValue是DataRowViewItem而不是string或int,就像您期望的那样。 -
现在更改我的查询我终于可以看到 id,尽管当
SqlDataAdapter尝试填充 DataTable 时我仍然得到一个System.Data.SqlClient.SqlException。就在这里adapter.Fill(datatable)
标签: c# sql combobox datarowview