查询返回NULL值

时间:2015-11-06 15:04:55

标签: c# sql asp.net sql-server

我正在尝试在C#中执行查询,该查询总结了用户的查看次数。我得到一个NULL值。在Server Management Studio中使用相同的语句可以得到正确的结果。

这是我的代码:

    public static int Count_views(string username)
{
    int views = 0;
    StringBuilder query = new StringBuilder();
    query.Append("SELECT Sum(views) FROM videos WHERE username = @username");

    using (SqlConnection con = new SqlConnection(Config.ConnectionString))
    {
        con.Open();

        using (SqlCommand cmd = new SqlCommand(query.ToString(), con))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("@username", username));

            views = Convert.ToInt32(cmd.ExecuteScalar());
        }
    }

    return views;
}

我调试了代码,参数正确。我收到这个错误:

System.InvalidCastException: Object cannot be cast from DBNull to other types.

这意味着我得到一个Null值作为回报。

ConnectionString没问题。除了这个之外,其他所有功能都可以。有人能告诉我这里有什么问题吗?

编辑:

以下是我遇到的屏幕截图。第一个屏幕截图显示了函数内部传递的值“Administrator”。第二个屏幕截图显示此值也在数据库中。 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

您可以将SUM查询更改为返回0而不是NULL

query.Append("SELECT COALESCE(Sum(views),0) FROM videos WHERE username = @username");

您还可以使用as运算符将其强制转换为所需的可空类型:

int? views = cmd.ExecuteScalar() as int?;