我试着看一下,但没有其他问题真的适合。我有一个网页,我将展示分析。一个stat是用户总数,我试图在sql数据库中获取用户表中的总行数。我以为Id会是一个int,但看起来它是varchar(128)。我将包含错误和代码。谢谢!!
类型' System.IndexOutOfRangeException'的例外情况发生在System.Data.dll中但未在用户代码中处理
public static string GetUserSum(string rConnStr)
{
string UserCount = "";
using (SqlConnection conn = new SqlConnection(rConnStr))
{
const string sqlText = @"
SELECT COUNT(Id)
FROM AspNetUsers
";
using (SqlCommand cmd = new SqlCommand(sqlText, conn))
{
conn.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
bool result = sdr.Read();
if (result)
{
UserCount = DBUtils.GetValue<string>(sdr["Id"]); //it breaks right here
}
}
}
}
return UserCount;
}
答案 0 :(得分:3)
我认为问题在于您从SQL获得的内容中的列名称并不是您所期望的。我相信您的代码的以下更改将解决该问题。
const string sqlText = @"
SELECT COUNT(Id) AS Id
FROM AspNetUsers
";
答案 1 :(得分:1)
您的错误来自这一行:
UserCount = DBUtils.GetValue<string>(sdr["Id"]);
因为您的查询中未返回ID为“Id”的字段。
最简单的解决方法是:
UserCount = DBUtils.GetValue<string>(sdr[0]).Tostring();
答案 2 :(得分:0)
IndexOutOfRangeException指示没有返回到SqlDataReader的“Id”列。
解决问题的第一步可能是发现实际返回的列。以下是如何执行此操作的示例: Check for column name in a SqlDataReader object