页面刚打开时没错,但一刷新就提示数组超出界限!
页面刚打开时没错,但一刷新就提示数组超出界限!代码如下:
namespace Telecai.luyou
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using Telecai.cs;
/// <summary>
/// TuijianHotel 的摘要说明。
/// </summary>
public class TuijianHotel : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.DataList Hotel;
SqlConnection ConnStr;
SqlDataAdapter da;
DataSet ds;
static int[] cityID=new int[5]{0,0,0,0,0};
int i=0;
static int j=0;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
string str=Conn.SqlStr();
try
{
ConnStr=new SqlConnection(str);
ConnStr.Open();
da=new SqlDataAdapter("select top 5 * from hotel order by h_jingjia",ConnStr);
ds=new DataSet();
da.Fill(ds,"hotel");
foreach(DataRow row in ds.Tables["hotel"].Rows)
{
//Response.Write(row["h_name"]);
cityID[i]=Convert.ToInt32(row["h_cityID"]);
i++;
}
Hotel.DataSource=ds.Tables["hotel"].DefaultView;
Hotel.DataBind();
}
catch(Exception en)
{
Response.Write("提起数据库时出错!");
Response.Write(en);
}
finally
{
da.Dispose();
ds.Dispose();
ConnStr.Close();
}
}
}
public void Hotel_Bound(object sender,DataListItemEventArgs e)//给Label赋值,得到宾馆所在城市
{
//int cityID=10;
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
try
{
string str=Conn.SqlStr();
SqlConnection ConnStr=new SqlConnection(str);
ConnStr.Open();
SqlCommand CommStr=new SqlCommand("select c_name from city where id="+cityID[j],ConnStr);
SqlDataReader dr=CommStr.ExecuteReader();
if(dr.Read())
{
((Label)e.Item.FindControl("city")).Text=dr["c_name"].ToString();
}
}
catch(Exception en)
{
Response.Write("提起数据时出错!");
Response.Write(en);
}
finally
{
ConnStr.Close();
}
j++; //用于判断加载项
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
问题点数:20、回复次数:9Top
1 楼nameone(过客)回复于 2006-03-09 14:41:37 得分 1
UPTop
2 楼oldmoon(电子商务人,电子商务路)回复于 2006-03-09 17:12:34 得分 0
急等答案Top
3 楼fangbuge(窗外的雨)回复于 2006-03-10 09:46:59 得分 1
你自己看一下出错页面的提示不就知道哪一行出错,这样让别人看,怎么看啊?Top
4 楼lgnet(www.51bw.net)回复于 2006-03-10 12:00:26 得分 1
你的cityID索引值只能到4,你怎么就使用10了,不超界还说不过去…Top
5 楼oldmoon(电子商务人,电子商务路)回复于 2006-03-10 12:59:48 得分 0
楼上的,我没有用10啊!
//int cityID=10;
=========================
SqlCommand CommStr=new SqlCommand("select c_name from city where id="+cityID[j],ConnStr);
Top
6 楼figoren(figoren)回复于 2006-03-10 13:10:34 得分 17
static int j=0;
原因就在这!
j是一个静态变量,而静态变量只初始化一次,
所以当你J++后,再刷新这个page时,J实时不为0
所以数组一定会超出界限!
解决办法
去掉static就ok了!!Top
7 楼dqmayg(小马)回复于 2006-03-10 13:18:10 得分 0
程序写的太烂了Top
8 楼robert2004(我能发财)回复于 2006-03-10 15:08:40 得分 0
哈哈
---------------------------
苦海无边 回头无岸
---------------------------
Top
9 楼oldmoon(电子商务人,电子商务路)回复于 2006-03-10 17:43:01 得分 0
看来还是figoren(figoren) 同志厉害啊!谢谢你!Top




