从由combobox确定的数据库中检索值到gridview时的错误

时间:2013-12-13 03:18:56

标签: c# gridview datagridview combobox

我有一个代码可以将组合框确定的数据库中的所有值都提供给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();
}

1 个答案:

答案 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 ......