无法从DBNull将对象分配给其他类型

时间:2019-09-08 10:47:47

标签: c# sql-server asp.net-mvc dbnull executescalar

我在数据库中得到的最小数量。但是,当数据库中没有数据时,我会收到此错误。

  

System.InvalidCastException:'无法从DBNull将对象分配给其他类型。'

代码:

SqlCommand cmd = new SqlCommand("SELECT MAX(GidenEvrakSira) FROM GidenEvrak", con);    
SqlCommand smd = new SqlCommand("Select Min(GidenEvrakSira) FROM GidenEvrak Where UserID is null", con);    

con.Open();    

maxnum = Convert.ToInt32(cmd.ExecuteScalar());
minum = Convert.ToInt32(smd.ExecuteScalar());    

con.Close();

3 个答案:

答案 0 :(得分:0)

在运行时(在ODP.NET下进行了测试,但在任何ADO.NET提供程序下均应相同), 它的行为是这样的:

如果该行不存在,则cmd.ExecuteScalar()的结果为null,然后将其强制转换为null字符串并分配给getusername。 如果该行存在,但用户名为NULL(甚至在您的数据库中也可以吗?),则cmd.ExecuteScalar()的结果为DBNull.Value,结果为InvalidCastException。 无论如何,NullReferenceException应该是不可能的,所以您的问题可能出在其他地方。

答案 1 :(得分:0)

jdweng评论中的建议正在起作用:

function a

答案 2 :(得分:0)

通过使用ISNULL函数将最大值/最小值包围起来,将查询更改为始终返回值。

SqlCommand cmd = new SqlCommand("SELECT isnull(MAX(GidenEvrakSira),0) FROM GidenEvrak", con);    
SqlCommand smd = new SqlCommand("Select isnull(Min(GidenEvrakSira),0) FROM GidenEvrak Where UserID is null", con);    

con.Open();    

maxnum = Convert.ToInt32(cmd.ExecuteScalar());
minum = Convert.ToInt32(smd.ExecuteScalar());    

con.Close();
相关问题