gpt4 book ai didi

c# - 收到错误 "System.IndexOutOfRangeException"。为什么?

转载 作者:太空狗 更新时间:2023-10-30 00:15:50 29 4
gpt4 key购买 nike

我有以下 Web 服务:

using (SqlCommand cmd = new SqlCommand(@"SELECT r.NAME, s.NAME FROM REGION r LEFT OUTER JOIN STADT s ON s.REGION_ID = r.ID ORDER BY r.NAME", con))
{
con.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["r.NAME"] != DBNull.Value && rdr["s.NAME"] != DBNull.Value)
{
stadtObject.Add(new STADT()
{
RegionName = rdr["r.NAME"].ToString(),
StadtName = rdr["s.NAME"].ToString()
});
}
}
}
}

我在 SQL Server Management Studio 中测试了 SQL 语句它就像一个魅力。但是,如果我在浏览器中调用该方法,则会出现错误:

System.IndexOutOfRangeException: r.NAME
at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
at System.Data.SqlClient.SqlDataReader.get_Item(String name)
at StadtHelper.Stadt() in C:\Users\Yeah\Documents\Visual Studio 2010\Projects\WebService1\WebService1\StadtHelper.cs:line 31
at WebService1.Service1.Stadt() in C:\Depp\Ushi\Documents\Visual Studio 2010\Projects\WebService1\WebService1\Service1.asmx.cs:line 77

我做错了什么?

最佳答案

当 r.Name 选择到 DataReader 中时,它只读取字段 name - Name。选择字段时,不包括表说明符(r. 和 s.)

它找不到“r.Name”或“s.Name”,因为在评估时,读取器只是返回两列,都只是命名为“Name” 所以在搜索 r.Name 时,运行时说“r.Name 不在有效列名列表中”(表现为 IndexOutOfRange 异常)。

如果您希望能够通过名称访问它,则必须使用 AS 语句为查询的内存中结果提供不同的字段名称:

我认为我说的不好,但本质上,您的代码应该这样修改:

using (SqlCommand cmd = new SqlCommand(@"SELECT r.NAME AS rName, s.NAME AS sName FROM REGION r LEFT OUTER JOIN STADT s ON s.REGION_ID = r.ID ORDER BY r.NAME", con))
{
con.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["rNAME"] != DBNull.Value && rdr["sNAME"] != DBNull.Value)
{
stadtObject.Add(new STADT()
{
RegionName = rdr["rNAME"].ToString(),
StadtName = rdr["sNAME"].ToString()
});
}
}
}
}

关于c# - 收到错误 "System.IndexOutOfRangeException"。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10940037/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com