从数据库接收 null 时出错

本文关键字:出错 null 数据库 | 更新日期: 2023-09-27 18:34:11

当我在我的数据库上执行此命令时,有时会收到result=null。 我想在发生这种情况时输入"else"部分,但我收到

mscorlib.dll 中发生了类型为"System.FormatException"的未处理异常。 其他信息:输入字符串格式不正确。

DB database = new DB();
            int reservedSeats = 0;
            using (database.sqlConnection)
            {
                database.sqlConnection.Open();
                string command = "select SUM(nrLocuri) as result from Rezervari where idRand = @idRand and idShow=@idShow";
                using (SqlCommand cmd = new SqlCommand(command, database.sqlConnection))
                {
                    cmd.Parameters.Add("@idRand", SqlDbType.Int).Value = idRand;
                    cmd.Parameters.Add("@idShow", SqlDbType.Int).Value = idShow;
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if (dr.Read())
                            if (dr["result"].ToString() != null)
                                reservedSeats = Convert.ToInt32(dr["result"].ToString());
                            else
                                return totalSeats;
                    }
                }
            }
            return totalSeats-reservedSeats; 

从数据库接收 null 时出错

而不是:

if (dr["result"].ToString() != null)

做:

if (dr["result"] != DbNull.Value)

dr["result"]返回数据库null时,其值为 DbNull.Value - 当您尝试对此值调用Convert.ToInt32时,会得到格式异常。

尝试:

if(!dr.IsDBNull(i)){   //replace i with the column id
  //get the data
}

如果您希望SUM()在未找到记录的情况下返回0.00,请将其替换为:

COALESCE(SUM(...), 0.00)

COALESCE 将返回传递给它的第一个非空值。

尝试isnull

string command = "select isnull(SUM(nrLocuri),0.00 )as result from Rezervari where idRand = @idRand and idShow=@idShow";