我有一个代码可以将组合框确定的数据库中的所有值都提供给datagridview。 但每当我运行它时,我得到ListU.SelectedValue的无效列名,如果我使用ListU.SelectedItem,则无法绑定多部分标识符“System.Data.DataRowView”。
我哪里出错了?我猜它是我的代码,或者是我的桌子。
private void User_Load(object sender, EventArgs e)
{
SqlDataAdapter daSearch = new SqlDataAdapter("SELECT cName FROM ComDet", conn);
DataTable dt1 = new DataTable();
ListU.DataSource = dt1;
daSearch.Fill(dt1);
ListU.ValueMember = "cName";
ListU.DisplayMember = "cName";
ListU.DropDownStyle = ComboBoxStyle.DropDownList;
ListU.Enabled = true;
}
和按钮代码 -
private void searchBtn_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=PEWPEWDIEPIE\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
conn.Open();
SqlDataAdapter daS = new SqlDataAdapter("select cName, cDetails, cDetails2 from ComDet where cName =" + ListU.SelectedValue, conn);
DataTable dts3 = new DataTable();
daS.Fill(dts3);
dataGridView1.DataSource = dts3.DefaultView;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
conn.Close();
}
答案 0 :(得分:0)
你应该使用SqlParameter ...有助于防止sql注入问题,也可以防止缺少引号......像这样:
SqlDataAdapter daS = new SqlDataAdapter("select cName, cDetails, cDetails2 from ComDet where cName = @name", conn);
daS.SelectCommand.Parameters.Add("@name", SqlDbType.VarChar).Value = ListU.SelectedValue;
这假设cName是一个字符串......如果不是,你将不得不改变SqlDbType ......