我正在使用c#asp.net,只是在提交后尝试以只读格式显示数据。它用于训练,我的处理程序说没有参数化(它不适用于实际部署);当我运行select命令时,我在第一个GetInt32行抛出指定的强制转换异常。值为整数,列设置为整数。我错过了什么?
string epl = "SELECT Entity, Employees, CA, MI, NY, NJ, Primex, EplLim, EplSir, Premium, Wage, Sublim, SubmissionId FROM EPL WHERE SubmissionId =" + x;
using (SqlCommand epcmd = new SqlCommand(epl, EplConn))
{
SqlDataReader epdr = epcmd.ExecuteReader();
epdr.Read();
LblEplShowEntity.Text = epdr.GetInt32(0).ToString();
LblEplShowTotalEmpl.Text = epdr.GetInt32(1).ToString();
LblEplShowCalEmpl.Text = epdr.GetInt32(2).ToString();
LblEplShowMichEmpl.Text = epdr.GetInt32(3).ToString();
LblEplShowNyEmpl.Text = epdr.GetInt32(4).ToString();
LblEplShowNjEmpl.Text = epdr.GetInt32(5).ToString();
LblEplShowPrimEx.Text = epdr.GetInt32(6).ToString();
LblEplShowLim.Text = epdr.GetInt32(7).ToString();
LblEplShowPrem.Text = epdr.GetInt32(8).ToString();
LblEplShowWage.Text = epdr.GetInt32(9).ToString();
LblEplShowInvestCost.Text = epdr.GetInt32(10).ToString();
epdr.Close();
}
答案 0 :(得分:0)
您的数据中的空值?这也会导致这种例外。另外,仔细检查该字段是否真的定义为整数,而不是例如浮点数。
答案 1 :(得分:0)
检查数据库列是否为int。要检查DB Null值,请执行
LblEplShowEntity.Text = epdr.IsDBNull(0) ? string.Empty : epdr.GetInt32(0).ToString();
答案 2 :(得分:0)
您应该知道select语句中每列的确切数据类型。例如,如果实体列的类型为BIGINT
,那么如果您尝试使用InvalidCastException
,则会reader.GetInt32()
,因为您应该使用reader.GetInt64()
方法。
其次,您应该分别处理NULL值。你应该检查reader.IsDBNull(0)或使用以下代码:
int? entity = (int?)reader["Entity"];
请注意,您可以使用字符串索引器从数据读取器获取数据。这是一种更具可读性的方法。
编辑:尝试将您的select语句更改为:
string epl = @"SELECT CAST(Entity AS INT) AS Entity, Employees, CA, MI, NY, NJ, Primex, EplLim, EplSir, Premium, Wage, Sublim, SubmissionId
FROM EPL WHERE SubmissionId =" + x;