-3

我想用我的数据库列填充我的组合框,它们是 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 值 'Select ID No...' 转换为数据类型 int 时转换失败

4

5 回答 5

1

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

一个简单的逐步调试会话可以很快地确认这一点,但我的猜测是您的组合框SelectedItem值包含类似“SELECT Id FROM ...”的内容,并且不包含实际的整数。例如,您可能错误地尝试使用 ID 值填充组合框,但得到的结果完全不同。

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

SELECT * FROM tools  WHERE ID= 'SELECT Id FROM ...'

假设您的 ID 值实际上是一个整数(在这种情况下,我不确定为什么要加引号),您将收到“SELECT Id FROM ...”不是整数的错误。

从那里,你只需要弄清楚为什么你的组合框有错误的数据......


附带说明:

如果你还没有完成这个逐步调试过程,那真的应该是你的第一步,早在你来这里询问它之前。这种事情可能值得你投下很多反对票,而没有多少好的答案。

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

于 2013-09-22T14:57:55.487 回答
0

尝试类似的东西

if(cmbxIDno.SelectedItem!=null)
{
    SelectedID.CommandText = "SELECT * FROM tools  WHERE ID= '" +  Int32.Parse(cmbxIDno.SelectedItem.ToString())+ "' ";
}
于 2013-10-03T16:16:11.773 回答
0

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

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

无法为您提供更多详细信息,因为您的问题只是含糊不清。

于 2013-09-22T14:45:42.567 回答
0

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

我仍在努力找出处理此问题的正确方法。

于 2013-10-03T16:04:35.620 回答
0
            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;
            }
于 2016-02-24T09:51:01.313 回答