[英]C# and SQL Server 2008 : how to handle null from database
我从数据库中选择按日期分组的max(id)
。 有时可能存在date没有任何ID的情况。 那个时候它上升错误,所以如何处理它分配给int变量。
SqlCommand maxid = new SqlCommand("select max(block) from blocks_allocation where date='" + DR.ItemArray.GetValue(7).ToString() + "'", con);
SqlDataReader maxrd = maxid.ExecuteReader();
if (maxrd.Read())
block_no = int.Parse(maxrd["block"].ToString()) + 1;
maxrd.Close();
如果值是null,则SqlCommand
返回DBNull.Value
,因此,如果您有一个查询可能返回空值,则需要首先针对DBNull.Value
进行测试,如下所示:
var date = DR.ItemArray.GetValue(7).ToString();
const string sql = "SELECT MAX(block) FROM blocks_allocation WHERE date = @date";
using (var cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@date", date);
var maxBlock = cmd.ExecuteScalar();
block_no = maxBlock == DBNull.Value ? null : (int?) maxBlock;
}
(这假设block_no
是可为null的 int)。 我还更改了其他一些内容:
ExecuteScalar
而不是Read
等。 using
块而不是手动关闭/处置对象。 我使用了inline-if语法来设置block_no
,但是如果您愿意,也可以使用标准:
if (maxBlock == DBNull.Value)
{
block_no = null;
}
else
{
block_no = (int?) maxBlock;
}
检查max(id)是否为null,如果是,则使用ISNULL()返回1
select isnull(max(block),1) from blocks_allocation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.