数据阅读器指定的演员表无效?

时间:2011-05-11 16:46:59

标签: c# asp.net sql-server visual-studio

我正在使用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();
                    }      

3 个答案:

答案 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;