返回最近添加的列时出现InvalidCastException

时间:2014-11-29 19:53:59

标签: c# sql

我想从数据库表返回最近插入的记录的最后一列。我一直收到这个错误:

  

SchoolManagement.exe

中出现'System.InvalidCastException'类型的第一次机会异常      

其他信息:指定的演员表无效。

     

如果存在此异常的处理程序,则可以安全地继续该程序

代码:

public int A()
{
    string _connection = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
    string stmt = "SELECT TOP 1 RegistrationNumber FROM tblStudentBiodata ORDER BY RegistrationNumber DESC";


    int count = 0;

    using (SqlConnection thisConnection = new SqlConnection(_connection))
    {
        using(SqlCommand cmdCount = new SqlCommand(stmt, thisConnection))
        {
            thisConnection.Open();
            count = (int)cmdCount.ExecuteScalar();
        }
    }
    return count;
}

2 个答案:

答案 0 :(得分:0)

你对int的强制转换是抛出异常:

count = (int)cmdCount.ExecuteScalar();

您的转换不安全,并且您肯定没有从ExecuteScalar方法返回一个整数。实际上,ExecuteScalar方法会将包装(装箱)的结果返回到Object,因此请注意该对象可以包含任何类型(例如float,decimal,int等)。

还要确保您没有从空值转换,因为如果表中没有记录,则会返回该值。因此,在尝试强制转换之前,请确保在对象为null时添加一个检查。

根据我的解释,检查SQL Server中RegistrationNumber列的类型,并确保在C#代码中强制转换为正确的类型。

以下是SQL Server和C#之间的类型映射列表:

http://msdn.microsoft.com/en-us/library/cc716729%28v=vs.110%29.aspx

答案 1 :(得分:0)

正如另一个答案中已经指出的那样,下面的行导致异常,并确保RegistrationNumber列不是INT类型。我怀疑它是SQL CHAR还是VARCHAR列。

count = (int)cmdCount.ExecuteScalar();

在这种情况下,请尝试使用AS运算符间接投射,而不是直接投射,并将count变量声明为nullable Int,如

int? count = 0;
count = cmdCount.ExecuteScalar() as int?;

然后检查并使用它

if (count != null)
{
   //Do something with it
}