C# 将varchar值“选择ID号…”转换为数据类型int时,转换失败

C# 将varchar值“选择ID号…”转换为数据类型int时,转换失败,c#,C#,我想用数据库列填充组合框,这些列是int和主键 private void cmbxIDno_SelectedIndexChanged(object sender, EventArgs e) { ResetTextBoxes(); SqlCommand SelectedID = new SqlCommand(); SelectedID.Connection = clsINIReader.nConn; SelectedID

我想用数据库列填充组合框,这些列是int和主键

 private void cmbxIDno_SelectedIndexChanged(object sender, EventArgs e)
    {
        ResetTextBoxes();

        SqlCommand SelectedID = new SqlCommand();
        SelectedID.Connection = clsINIReader.nConn;

        SelectedID.CommandText = "SELECT * FROM tools  WHERE ID= '" + cmbxIDno.SelectedItem.ToString()+ "' ";


        SqlDataReader drID = SelectedID.ExecuteReader();

        while (drID.Read())   //Conversion failed when converting the varchar value 'Select ID No...' to data type int.
        {
            txtPN.Text = drID["PartNumber"].ToString();
            txtNomenclature.Text = drID["Nomenclature"].ToString();
            txtSerial.Text = drID["SerialNo"].ToString();
            txtShelfNo.Text = drID["ShelfNumber"].ToString();
            txtTSnumber.Text = drID["TSnumber"].ToString();
            txtBinNumber.Text = drID["BinNumber"].ToString();
            txtRentalPrize.Text = drID["RentalPrize"].ToString();
            txtCurrency.Text = drID["Currency"].ToString();
            txtQuantity.Text = drID["Quantity"].ToString();
            txtCalibrDateInfo.Text = drID["CalibrationDate"].ToString().Replace("00:00:00", "");
            txtCalibrationPeriod.Text = drID["CalibrationPeriod"].ToString();
            txtCertfNumber.Text = drID["CertificateNo"].ToString();
            textBox11.Text = drID["CertificationPath"].ToString();
            txtIDno.Text = drID["ID"].ToString();
        }
        drID.Close();
    }
但我得到了这个错误:

将varchar值“选择ID号…”转换为数据类型int时,转换失败


学习阅读错误消息。该消息清楚地表明您的ID是一个varchar值,您尝试将其转换为整数

可能是转换不起作用,因为在组合框中,它不会将字符串解析为int和/或您的数据在ID列中包含无法转换为int的字符串值


无法提供更多详细信息,因为您的问题非常模糊。

没有关于您的问题的更多信息,我只是猜测,但最可能的问题是,您的组合框确实具有您认为具有的功能

调试会话中的一个简单步骤将足够快地确认这一点,但我猜测您的组合框SelectedItem值包含类似“selectid FROM…”的内容,并且不包含实际的整数。例如,您可能错误地尝试用ID值填充组合框,但得到了完全不同的结果

如果这是真的,如果您在设置SelectedID.CommandText后立即检查它的值,您将看到它显示如下内容:

SELECT * FROM tools  WHERE ID= 'SELECT Id FROM ...'
假设您的ID值实际上是一个整数,在这种情况下,为什么要加引号我不确定,您将得到一个错误,选择ID从。。。不是整数

从那里,你只需要找出为什么你的组合框中有错误的数据

旁注:

若您还并没有完成调试过程中的这一步,那个么这真的应该是您的第一步,早在您来到这里询问它之前。这类事情很可能会让你获得很多反对票,而没有多少好的答案


如果您有,这将是非常有用的信息,可以包含在您的问题中,这样其他人就不会得出与我相同的结论,认为您的问题不值得回答。

我相信我在这里遇到了相同的问题,表中的一个字段被声明为INT,并且可以为null。当其中一条记录的int值设置为null时,whilereader.read将引发此异常:将varchar值“null”转换为int数据类型时转换失败

我仍在努力找到一个合适的方法来处理这个问题。

试试类似的方法

if(cmbxIDno.SelectedItem!=null)
{
    SelectedID.CommandText = "SELECT * FROM tools  WHERE ID= '" +  Int32.Parse(cmbxIDno.SelectedItem.ToString())+ "' ";
}

你的数据库调用在哪里?组合框不知道你的数据库。您必须对数据库运行查询并返回结果,然后才能将结果中的数据放入组合框。cmbxIDno.SelectedItem包含什么?从错误消息看,它似乎包含SQL代码。此外,您应该使用参数化查询,而不是在查询中串联值?你是不是突然来了?
            string str = "select empFirstName from tbl_employeeEntry where empId = ' " +Convert.ToInt32 (cmbEmployeeIDNew.Text) + "' ";//here the value for this combobox is int type in database. thats why i converted into integer.
            SqlDataReader sdr = DataClass.ReteriveRecordsViaDataReader(str);
            while (sdr.Read())
            {
                string name = (string)sdr["empFirstName"]; // name is string value
                txtEmployeeNameNew.Text = name;
            }