2014-04-07 153 views
0

我总是碰到下面的错误,一旦我用我的组合框检索从我的数据库使用整数数据类型记录:转换失败

转换失败当将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(); 
    } 
} 

回答

1

与此(除去单引号,这表明一个字符串)替换它

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)); 

这里是一些good reading material,举例。

+0

输入字符串格式不正确。我该如何解决它? – user3500993

+0

哪一行引发该错误?当你遇到这个错误时'cmbSupp.Text'的价值是什么? –

+0

this cmd.Parameters.AddWithValue(“@ id”,int.Parse(cmbSupp.Text)); – user3500993