返回最近添加的列中的无效投射异常

本文关键字:异常 无效 最近 添加 返回 | 更新日期: 2023-09-27 18:32:39

我想从数据库表中返回最近插入的记录的最后一列。我不断收到此错误:

"System.InvalidCastException"类型的第一次机会异常发生在学校管理中.exe

其他信息:指定的强制转换无效。

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

法典:

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;
}

返回最近添加的列中的无效投射异常

你对 int 的投射会引发异常:

count = (int)cmdCount.ExecuteScalar();

您的转换并不安全,并且您肯定不会从 ExecuteScalar 方法中返回整数。事实上,ExecuteScalar 方法会将包装(装箱)的结果返回到Object因此请注意,对象可以包含任何类型(例如浮点数、十进制、整数等)。

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

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

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

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

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

count = (int)cmdCount.ExecuteScalar();

在这种情况下,与其进行直接强制转换,不如尝试使用运算符间接转换它AS并将count变量声明为类似nullable Int

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

然后检查并使用它

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