返回最近添加的列中的无效投射异常
本文关键字:异常 无效 最近 添加 返回 | 更新日期: 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 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
}