C# 对象不能从DBNull分配给其他类型

C# 对象不能从DBNull分配给其他类型,c#,sql-server,asp.net-mvc,dbnull,executescalar,C#,Sql Server,Asp.net Mvc,Dbnull,Executescalar,我在我的数据库中得到了最小的数字。但是当我的数据库中没有数据时,我得到了这个错误 System.InvalidCastException:'无法从DBNull将对象分配给其他类型。' 代码: 在运行时(在ODP.NET下测试,但在任何ADO.NET提供程序下应相同), 其行为如下: 如果该行不存在,则cmd.ExecuteScalar()的结果为空,然后将其转换为空字符串并分配给getusername。 如果该行存在,但用户名为NULL(在您的数据库中可能吗?),则cmd.ExecuteScal

我在我的数据库中得到了最小的数字。但是当我的数据库中没有数据时,我得到了这个错误

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

代码:

在运行时(在ODP.NET下测试,但在任何ADO.NET提供程序下应相同), 其行为如下:

如果该行不存在,则
cmd.ExecuteScalar()
的结果为空,然后将其转换为空字符串并分配给getusername。 如果该行存在,但用户名为NULL(在您的数据库中可能吗?),则
cmd.ExecuteScalar()
的结果为DBNull.Value,导致
InvalidCastException

在任何情况下,
NullReferenceException
都是不可能的,因此您的问题可能存在于其他地方。

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

var results = (cmd.ExecuteScalar() == DBNull.Value) ? null : cmd.ExecuteScalar();

通过使用
ISNULL
函数包围max/min,将查询更改为始终返回值

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();

很抱歉您收到的错误消息是什么?请编辑您的问题并添加错误消息的确切文本。如果没有数据,
Min(…)
Max(…)
返回值DBNull。在将结果传递给
Convert.ToInt32
Cast DBNull to NULL之前,必须检查这些空值。所以请尝试这样的方法:var results=(cmd.ExecuteScalar==DBNull.Value)?null:cmd.executescalaries它可以工作。谢谢@jdweng var results=(cmd.ExecuteScalar()==DBNull.Value)?null:cmd.ExecuteScalar();不,我肯定问题在这里。它只需要在一个if循环中。我找不到这条路(这个命令执行两次,而不是一个好的操作,如果命令写入数据,则是空的。考虑在变量中放置<代码> CMD.ExcDeCudialSar())/>代码>。
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();