将 varchar 值“System.Data.DataRowView”转换为数据类型 int 时转换失败

本文关键字:转换 数据类型 int 失败 DataRowView varchar System Data | 更新日期: 2023-09-27 17:57:05

一旦我使用组合框从数据库中检索具有整数数据类型的记录,我总是收到以下错误:

将 varchar 值"System.Data.DataRowView"转换为数据类型 int 时转换失败。

当我替换查询并检索具有 varchar 数据类型的记录时,它有效。

有人可以帮我如何修改我的代码以获得预期的输出吗?

这是我的代码:

public void fillSupplier()
{
    SqlConnection conn = new SqlConnection("Data Source=STATION21''SQLEXPRESS;Initial Catalog=mydb;Integrated Security=true");
    conn.Open();
    string query = "Select supID from Supplier";
    SqlCommand cmd= new SqlCommand(query,conn);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    if (dt.Rows.Count > 0) {
        cmbSupp.DataSource = dt;
        cmbSupp.DisplayMember = "supID";
        cmbSupp.ValueMember = "supID";
    }
}
private void cmbSupp_SelectedIndexChanged(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection("Data Source=STATION21''SQLEXPRESS;Initial Catalog=mydb;Integrated Security=true");
    conn.Open();
    this.Refresh();
    string query = "Select * from Supplier where supID='"+cmbSupp.Text+"'";
    SqlCommand cmd = new SqlCommand(query,conn);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read()) { 
        tbsName.Text = dr["supName"].ToString();
        tbsContact.Text = dr["supLocation"].ToString();
        tbsLoc.Text = dr["supContact"].ToString();
    }
}

将 varchar 值“System.Data.DataRowView”转换为数据类型 int 时转换失败

将其替换为以下内容(删除表示字符串文字的单个撇号):

string query = "Select * from Supplier where supID = " + cmbSupp.Text;

此外,请查看参数化查询。您遇到此类问题的可能性要小得多,尤其是当您正在执行的查询具有许多参数时。

string query = "Select * from Supplier where supID = @supID";
...
cmd.Parameters.AddWithValue("@supID", int.Parse(cmbSupp.Text));

这里有一些很好的阅读材料,并附有示例。