C# 将varchar值“选择ID号…”转换为数据类型int时,转换失败
我想用数据库列填充组合框,这些列是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
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;
}