索引超出了数组界限 问题求解决

呵呵哒呀 2011-08-10 08:46:22
索引超出了数组界限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[IndexOutOfRangeException: 索引超出了数组界限。]
niu.Login.Page_Load(Object sender, EventArgs e) +1286
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.4016; ASP.NET 版本:2.0.50727.4016




小弟我菜鸟 求高手指教 原先在win2003系统下是运行正常的,但是我换了个win2008后就出现这个问题了 我不知道是代码问题还是系统问题, 纠结中。。。。。
...全文
1249 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
呵呵哒呀 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 taomanman 的回复:]
贴出代码就知道你错在哪了。

string str6 = set.Tables[0].Rows[i]["承办时间"].ToString().Split(new char[] { ' ' })[0];
string str7 = str6.Split(new char[] { '-' })[0];
string str8 = str6.Split(new char[] { '-'……
[/Quote]
555 高人啊 。。。。 代码是别人的 我反编译出来的 我觉得我还是改系统时间吧,,,
暖枫无敌 2011-08-10
  • 打赏
  • 举报
回复
代码修改如下即可。

string str6 = set.Tables[0].Rows[i]["承办时间"].ToString().Split(new char[] { ' ' })[0];
string str7 = DateTime.Parse(set.Tables[0].Rows[i]["承办时间"].ToString()).Year.ToString();
string str8 = DateTime.Parse(set.Tables[0].Rows[i]["承办时间"].ToString()).Month.ToString();
string str9 = DateTime.Parse(set.Tables[0].Rows[i]["承办时间"].ToString()).Day.ToString();
暖枫无敌 2011-08-10
  • 打赏
  • 举报
回复
贴出代码就知道你错在哪了。

string str6 = set.Tables[0].Rows[i]["承办时间"].ToString().Split(new char[] { ' ' })[0];
string str7 = str6.Split(new char[] { '-' })[0];
string str8 = str6.Split(new char[] { '-' })[1];
string str9 = str6.Split(new char[] { '-' })[2];

看见红色部分没有,对时间串进行-分割出的问题,这种方式对于时间格式是 2011-08-10 是没有错误的,但是对于这种格式 2011/08/10格式的话,就没有-可以供你Split的了。

所以要么该你系统的时间格式为 2011-08-10 或修改代码。

不过感觉修改代码更好。
string str6 = set.Tables[0].Rows[i]["承办时间"].ToString().Split(new char[] { ' ' })[0];
string str7 = DateTime.Parse(set.Tables[0].Rows[i]["承办时间"].ToString()).Year;
string str8 = DateTime.Parse(set.Tables[0].Rows[i]["承办时间"].ToString()).Montn;
string str9 = DateTime.Parse(set.Tables[0].Rows[i]["承办时间"].ToString()).Day;
呵呵哒呀 2011-08-10
  • 打赏
  • 举报
回复
代码是别人写的,,,,
 protected void Page_Load(object sender, EventArgs e)
{
if (!base.Request.IsAuthenticated)
{
base.Response.Write("<script language=javascript>top.navigate('Admin/AccessDenied.aspx');</script>");
}
else if (!base.IsPostBack)
{
string str = base.Request.ServerVariables["REMOTE_ADDR"];
new DBAccess().ExcuteSql("update userloginfo set line=1,ip='" + str + "' where userid='" + MapgisEGov.User.User.GetUserCode(this.Context) + "'");
string strSql = "select 承办时间,活动时限,名称,编号,流程名称,活动名称 from v_nw_flowdoingcase t where (select 流水号 from landflowglob where ID0=t.ID0)!=0 and 承办人ID=" + MapgisEGov.User.User.GetUserCode(this.Context);
DataSet set = this.ExecuteSqlSearch(strSql);
int count = set.Tables[0].Rows.Count;
int num2 = 0;
string str4 = "";
string str5 = "";
this.Session["DELAY"] = null;
for (int i = 0; i < count; i++)
{
string str6 = set.Tables[0].Rows[i]["承办时间"].ToString().Split(new char[] { ' ' })[0];
string str7 = str6.Split(new char[] { '-' })[0];
string str8 = str6.Split(new char[] { '-' })[1];
string str9 = str6.Split(new char[] { '-' })[2];
DateTime now = DateTime.Now;
DateTime time2 = new DateTime(Convert.ToInt32(str7), Convert.ToInt32(str8), Convert.ToInt32(str9));
int num5 = Convert.ToInt32(now.Subtract(time2).Days.ToString());
if ((Convert.ToInt32(set.Tables[0].Rows[i]["活动时限"].ToString()) - num5) <= 1)
{
num2++;
str4 = str4 + set.Tables[0].Rows[i]["名称"].ToString() + ";";
str5 = str5 + set.Tables[0].Rows[i]["编号"].ToString() + ",";
}
}
this.Session["DELAY"] = str5;
if (num2 != 0)
{
string flag = Convert.ToString(num2);
this.OpenWin("OvertimeAlarm.aspx", flag);
}
if (ConfigurationManager.AppSettings["CheckMac"].ToLower() == "true")
{
string mac = this.GetMac();
if ((base.Server.UrlDecode(base.Request["id"]) != "") && ((mac == "false") || (base.Server.UrlDecode(base.Request["id"]).ToUpper() != mac)))
{
base.Response.Write("<script>alert('您当前的电脑不能以工号“" + this.Context.User.Identity.Name + "”的身份登录!');</script>");
base.Response.Write("<script language=javascript>top.navigate('Admin/Logoff.aspx');</script>");
}
}
}
}
jianshao810 2011-08-10
  • 打赏
  • 举报
回复
的确需要看代码。大概意思是说你调用一个比(数组真正长度-1)还要大的索引来获取数组元素
hch126163 2011-08-10
  • 打赏
  • 举报
回复
错误信息说的很清楚了!

使用之前先判断
chenshizhencong 2011-08-10
  • 打赏
  • 举报
回复
沒有看到代碼,這樣就不清楚了
暖枫无敌 2011-08-10
  • 打赏
  • 举报
回复
你跟踪一下,看是哪行代码报错不就知道了。
MSDNXGH 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 net_lover 的回复:]
错误信息说的很清楚了 。需要贴你的代码
[/Quote]
需要贴你的代码
qingYun1029 2011-08-10
  • 打赏
  • 举报
回复
代码贴出来看看呗!!!

数组越界了。。

就像


string[] str = new string[5];

Console.WriteLine(str[5]);
孟子E章 2011-08-10
  • 打赏
  • 举报
回复
错误信息说的很清楚了 。需要贴你的代码
wuxiaoke2009 2011-08-10
  • 打赏
  • 举报
回复
学习啦
橙宝宝 2011-08-10
  • 打赏
  • 举报
回复
哦?数组获取不到内容哦,看看是不是有值没有赋给数组啊。

62,268

社区成员

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

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

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

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