我正在尝试在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”。第二个屏幕截图显示此值也在数据库中。
答案 0 :(得分:3)
您可以将SUM
查询更改为返回0而不是NULL
:
query.Append("SELECT COALESCE(Sum(views),0) FROM videos WHERE username = @username");
您还可以使用as
运算符将其强制转换为所需的可空类型:
int? views = cmd.ExecuteScalar() as int?;