System.Data.SqlClient.SqlException:“多部分标识符“ System.Data.DataRowView”无法绑定。”

时间:2018-12-01 06:24:34

标签: c# sql-server database

我的数据库有问题。我有两个表LoggingAspect<select id="example-multiple-optgroups"> <optgroup label="Group 1"> <option value="1-1">Option 1.1</option> <option value="1-2" selected="selected">Option 1.2</option> <option value="1-3" selected="selected">Option 1.3</option> </optgroup> <optgroup label="Group 2"> <option value="2-1">Option 2.1</option> <option value="2-2">Option 2.2</option> <option value="2-3">Option 2.3</option> </optgroup> </select>

Employee包含7列:

Department

Employee包含两列:

Id (int), Name (nvarchar(max)), LastName(nvarcharmax), Age(int), Dep_nt(nvarchar(max)), Profession (nvarchar(max)), Salary (real). 

我有一个Department(列表框),其中包含有关部门的信息,还有Id (int), DepartmentName(nvarchar(max) (列表视图),其中包含有关在这些部门工作的员工的信息。

我需要根据从DpListBox中选择的值来填充Ep。主要问题在于以下代码行:

Ep

我认为DpListBox是因为我的数据库包含两个字段SqlCommand command = new SqlCommand($@"SELECT * FROM Employee WHERE Dep_nt=" + DpListBox.SelectedValue.ToString(), connection); DpListBox.SelectedValue = System.Data.DataRowView,在这里我只需要Id

这是我后面的代码:

DepartmentName

我使用WPF,这是XAML代码:

DepartmentName

1 个答案:

答案 0 :(得分:3)

您需要执行以下操作才能从DataRowView获取列值。

DataRowView dataRowView = DpListBox.SelectedItem as DataRowView;

string value = "";

if (dataRowView != null) {
   value = dataRowView.Row["DepartmentName"] as string;
}

然后您必须像这样将value而不是DpListBox.SelectedValue.ToString()传递给您的查询。

SqlCommand command = new SqlCommand(@"SELECT * FROM Employee WHERE Dep_nt='" + value + "'", connection);

注意:始终尝试使用准备好的语句(参数化查询),这将防止SQL注入。

因此将进行参数化查询。

SqlCommand command = new SqlCommand(@"SELECT * FROM Employee WHERE Dep_nt=@Dep_nt", connection);
command.Parameters.AddWithValue("@Dep_nt", value);