我从数据库中选择max(id)
,按日期分组。有时可能会出现日期没有任何ID的情况。那个时候它上升错误,所以如何处理它n赋值给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();
答案 0 :(得分:2)
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
是nullable int)。我还改变了一些其他的东西:
ExecuteScalar
代替Read
等... using
块而不是手动关闭/处置对象。我已使用inline-if syntax设置block_no
,但如果您愿意,也可以使用标准:
if (maxBlock == DBNull.Value)
{
block_no = null;
}
else
{
block_no = (int?) maxBlock;
}
答案 1 :(得分:-1)
检查max(id)是否为null,如果是,则使用ISNULL()
返回1select isnull(max(block),1) from blocks_allocation