调试了一天了,终于找到问题,应该是微软的bug

buafto 2012-01-31 10:47:52
值对于 Int32 太大或太小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.OverflowException: 值对于 Int32 太大或太小。

源错误:

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

堆栈跟踪:


[OverflowException: 值对于 Int32 太大或太小。]
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +2783653
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +212
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +199
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +177
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746


我在GridView里自定义了LinkButton的CommandName,CommandArgument的属性,CommandName="select",CommandArgument是我的单据号,类似"20120131001",结果就报上述错误。

最终解决方法,CommandName="select"改为"selec",少一位就可以了,减少CommandArgument的长度也是可以的。

总结:应该是CommandName+CommandArgument的长度有限制,超过后会试图把CommandArgument的string类型转为int32,所以报溢出了。
...全文
4348 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
mryhchuan 2012-02-06
  • 打赏
  • 举报
回复
楼主是想让那数字是字符串,加单引号吧
深度Java 2012-02-06
  • 打赏
  • 举报
回复
没有深厚的汇编功底,不要去怀疑微软,我以前也和你一样,后来证明都是我错了,自己基本功不扎实,或者说知识点存在误用。
tmoonlight 2012-02-06
  • 打赏
  • 举报
回复
这贴不该火。
米娅 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 danjiewu 的回复:]
因为"select"是GridView内置的CommandName,包括Insert,Update,Delete,Cancel等。
你用了select作为CommandName,GridView就会认为你是在调用Select事件,就会试图把CommandArgument转化为表示行号的int数值,而不是因为长度引起的。你可以试下CommandName="select",CommandArgume……
[/Quote]
总而言之,就不应该使用select作为CommandName.
至于超出Int32的范围肯定会溢出,但是你的这个问题绝对不是溢出造成的
YapingXin 2012-02-06
  • 打赏
  • 举报
回复
这个程序员自身的素质很成问题!
YapingXin 2012-02-06
  • 打赏
  • 举报
回复
Int64是干嘛使的?为啥放着Int64不用,非得用Int32?这不自找的吗?
YapingXin 2012-02-06
  • 打赏
  • 举报
回复
抱歉,今天写程序写得晕头转向,心态很不好,心浮气躁。在此向楼主道歉啦。
buafto 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 xinyaping 的回复:]
Int64是干嘛使的?为啥放着Int64不用,非得用Int32?这不自找的吗?
[/Quote]

回帖不看贴
jieon 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 xinyaping 的回复:]

这个程序员自身的素质很成问题!
[/Quote]

你素质也高不到哪去,说话莫名其妙
qq2013 2012-02-05
  • 打赏
  • 举报
回复
学习了!又学到一招
CalvinR 2012-02-05
  • 打赏
  • 举报
回复
你自己弄错了吧
宇峰科技 2012-02-04
  • 打赏
  • 举报
回复
正解[Quote=引用 8 楼 danjiewu 的回复:]

因为"select"是GridView内置的CommandName,包括Insert,Update,Delete,Cancel等。
你用了select作为CommandName,GridView就会认为你是在调用Select事件,就会试图把CommandArgument转化为表示行号的int数值,而不是因为长度引起的。你可以试下CommandName="select",CommandArgum……
[/Quote]
风一样的大叔 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 wenohuang 的回复:]
.net程序员。。。。我最近做项目认识几个,一出问题,就是找系统配置问题啊,第三方工具去修复bug啊,从来代码都不看一下,反正有错就怪是系统的问题,和他的代码没关系。
[/Quote]一棍子打死太多人了吧。。。。
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 danjiewu 的回复:]
因为"select"是GridView内置的CommandName,包括Insert,Update,Delete,Cancel等。
你用了select作为CommandName,GridView就会认为你是在调用Select事件,就会试图把CommandArgument转化为表示行号的int数值,而不是因为长度引起的。你可以试下CommandName="select",CommandArgume……
[/Quote]

此人已回答,就跟edit,delete一样,如果你用了这些默认的字符串的话,控件会认为你就是要调用相应的编辑、删除事件一样
kinglyh2011 2012-02-04
  • 打赏
  • 举报
回复
楼主太有才了 真实佩服啊
longmenwaideyu 2012-02-04
  • 打赏
  • 举报
回复
难道C#那么让人不信任吗,程序员宁肯相信系统错了也不愿意相信自己的代码错了???求解释
styshoo1986 2012-02-03
  • 打赏
  • 举报
回复
把select改成selected或者更长的字母,就知道8楼是不是对的,我感觉8楼比较靠谱
广州接入 2012-02-03
  • 打赏
  • 举报
回复
sp1234真是牛人,你难道不上班?随处可见你,呵呵!
Arcan 2012-02-03
  • 打赏
  • 举报
回复
8楼,8楼,8楼。
挨踢直男 2012-02-03
  • 打赏
  • 举报
回复
Response.Write(int.MaxValue);看看大小
加载更多回复(31)

62,046

社区成员

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

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

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

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