对象不能从 DBNull 分配给其他类型
Object cannot be assigned to other types from DBNull
我在我的数据库中获得了最小数量。但是当我的数据库中没有数据时,我会收到此错误。
System.InvalidCastException: 'The object cannot be assigned to other types from 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();
在 运行 时间(在 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 将您的查询更改为始终 return 值。
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();
我在我的数据库中获得了最小数量。但是当我的数据库中没有数据时,我会收到此错误。
System.InvalidCastException: 'The object cannot be assigned to other types from 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();
在 运行 时间(在 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 将您的查询更改为始终 return 值。
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();