索引超出了数组界限问题!在线等!

kiky_zhang 2007-08-06 01:18:10
小妹在定义的类中定义了GetRIDdesc一个方法,用来从我的 Resturant表中取出第一个RID<PhotoRID的RID值。但是执行到这个函数时就提示我说“索引超出了数组界限”!我不知道到底是怎么回事,希望哪位高手可以指教!
public void GetRIDdesc(string PhotoRID)
{
string sql = "";

try
{
sql = "SELECT TOP 1 [RID] FROM [Resturant] where RID< @PhotoRID ORDER BY RID DESC";
myconnection.Open();
SqlCommand cmd = new SqlCommand(sql, myconnection);
cmd.Parameters.AddWithValue("@PhotoRID", PhotoRID);


using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
PhotoRID = reader["RID"].ToString();

}
}

}
catch (Exception err)
{
throw new Exception(err.Message);
}
finally
{
myconnection.Close();
}

}
...全文
1459 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
panjun1984 2007-08-08
  • 打赏
  • 举报
回复
楼主估计拿大伙开玩笑呢,我看那代码怎么也不可能报出索引超出范围的错,
当然,只是猜测,
lonehare 2007-08-07
  • 打赏
  • 举报
回复
别瞎改了!这个函数怎么可能会抛数组越界异常,从头到脚都没用到数组!

问题肯定出在调用它的循环里

我只要读出前十个就可以了,所以做了个循环!i从0-9将结果存在一个数组里面!
---------------------------------------
确定有10个或以上?该不会只有4个吧!!
weiky626 2007-08-07
  • 打赏
  • 举报
回复
catch (Exception err)
{
throw new Exception(err.Message);
}


看了这段代码,就知道楼主是个新手,捕获一个异常又抛出,lz想想这段代码除了浪费性能还有什么其他作用吗?
antoniusguo 2007-08-07
  • 打赏
  • 举报
回复
又是小妹贴,以后看仔细了……
antoniusguo 2007-08-07
  • 打赏
  • 举报
回复
RestaurantPhotoList[i]
这个也要确保Lenth >= 10;
antoniusguo 2007-08-07
  • 打赏
  • 举报
回复
for ( int i=0; i<10||PhotoRID==null; i++)
{


GetRestaurantListPic(PhotoRID,i);

PicRID[i] = PhotoRID;//问题可能在这里,i=0-9;你确保PicRID.Length至少是10
//或者 i<10||PhotoRID==null 第2个条件一直为true导致i == 10

GetRIDdesc(PhotoRID);

}
foyuan 2007-08-06
  • 打赏
  • 举报
回复
??
IT_zen 2007-08-06
  • 打赏
  • 举报
回复
为什么用SqlDataReader ?用DataTable就不会出现这样的问题
噯卟釋手 2007-08-06
  • 打赏
  • 举报
回复
while (reader.Read())
{
for(int i=0;i<reader.FieldCount;i++)
{
PhotoRID =+PhotoRID;
}

}
myReader.Close();
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
PhotoRID 是个共有变量!
nyzfl 2007-08-06
  • 打赏
  • 举报
回复
My-Blog地址1:http://www.cnblogs.com/nyzfl
My-Blog地址2: http://blog.csdn.net/nyzfl
nyzfl 2007-08-06
  • 打赏
  • 举报
回复
while (reader.Read())
{
PhotoRID= reader["RID"].ToString();

}

其中 PhotoRID 是什么类型,不是集合的话,为什么用循环?
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
这是我完整的代码,OtherRID为长度为10的共有数组变量。
我有两个表,一个是存放基本信息的Restaurant表,还有一个存放图片的RestaurantPhoto表。因为一个Restaurant的ID对应多张图片,我又要读出按照ID号逆序,也就是最新入库的ID对应的一张图片!
GetRestaurantListPhoto这个函数中我先读出最新入库的ID号,然后调用GetRestaurantListPic函数来读出这个ID所对应的一个图片信息,然后把这个图片的信息存到数组PicRID中,(这是个长度为10的数组,公有变量)。再通过GetRIDdesc函数得到比这个ID小的所有ID中最新入库的ID号,循环读出十个!
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
public void GetRestaurantListPhoto()
{
string sql = "";


try
{

sql = "SELECT TOP 1 [RID] FROM [Resturant] ORDER BY [RNumber] desc";
myconnection.Open();
SqlCommand cmd = new SqlCommand(sql, myconnection);
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
PhotoRID= reader["RID"].ToString();

}
}


}
catch (Exception err)
{
throw new Exception(err.Message);
}
finally
{
myconnection.Close();
}

for ( int i=0; i<10||PhotoRID==null; i++)
{


GetRestaurantListPic(PhotoRID,i);

PicRID[i] = PhotoRID;


GetRIDdesc(PhotoRID);

}
}
//得到LIST页店家图片的最新的店家ID
public void GetRIDdesc(string PhoRID)
{
string sql = "";

try
{
sql = "SELECT TOP 1 [RID] FROM [Resturant] where RID< @PhotoRID ORDER BY RID DESC";
myconnection.Open();
SqlCommand cmd = new SqlCommand(sql, myconnection);
cmd.Parameters.AddWithValue("@PhotoRID", PhoRID);


using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
PhotoRID = reader["RID"].ToString();

}
}

}
catch (Exception err)
{
throw new Exception(err.Message);
}
finally
{
myconnection.Close();
}

}


//LIST页显示时,获得最新入库的图片
public void GetRestaurantListPic(string PhotoRID,int i)
{
string sql = "";
try
{

ORID = OtherRID[i].ToString();
sql = "SELECT TOP 1 [RPhoto] FROM [RestaurantPhoto] where RID=@PhotoRID";
myconnection.Open();
SqlCommand cmd = new SqlCommand(sql, myconnection);
cmd.Parameters.AddWithValue("@PhotoRID", PhotoRID);

using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
RestaurantPhotoList[i] = reader["RPhoto"].ToString();

}
}

}
catch (Exception err)
{
throw new Exception(err.Message);
}
finally
{
myconnection.Close();
}
}
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
怎么放宽?
LutzMark 2007-08-06
  • 打赏
  • 举报
回复
就是说索引超出了数组界限
放宽界限就行了
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
高手们!不是都走了吧?帮帮小妹啊!555
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
cmd.Parameters.AddWithValue("@PhotoRID", PhotoRID);
这一句是正确的!我执行的时候能够正确的取到前5个值!但是当取第6个的时候就出现越界的异常!
kiky_zhang 2007-08-06
  • 打赏
  • 举报
回复
传的值是从表中读出的最新入库的ID号,然后通过GetRIDdesc函数得到数据表中比这个ID号小的最新的ID号,通过这个ID号再到图片表里面找到相应的图片信息,通过TOP 1来限定选出ID号相符的多张图片中的一张!
jiangbo1125 2007-08-06
  • 打赏
  • 举报
回复
楼主你调用GetRIDdesc这个函数时候,传的值是多少?
加载更多回复(28)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧