我在数据库中得到的最小数量。但是,当数据库中没有数据时,我会收到此错误。
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();
答案 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();