首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Bug集合【更新中】

Posted on 2008-04-19 16:19  停留的风  阅读(1255)  评论(1编辑  收藏  举报

<1>GridView“GridView1”激发了未处理的事件“RowDeleting”
      异常详细信息: System.Web.HttpException: GridView“GridView1”激发了未处理的事件“RowDeleting”。
  原因分析:
  在GridView1的事件中,即删除的确认对话框,因此,当你单击【删除】按钮时,已经执行了RowCommand事件,即执行了删除操作,然后再引发了RowDeleting了事件,但是代码中没有定义该事件,所以出错

 <2>SqlException ,超时时间已到。在操作完成之前超时时间已过或服务器未响应。
  异常信息: 
      异常类型: SqlException 
      异常消息: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。
获得数据连接超时。
  原因分析:
       <1>数据库正在进行备份操作。

       <2>数据库设置的超时时间太短
       <3>程序中获得的Connection没有及时释放

       <4> 程序中的Transaction没有Commit或者RallBack

      在我们使用事务的时候,一定要注意控制事务的负载大小,如果一个事务,包括查询、计算、更新多张表,还涉及到一些批处理操作,虽然事务可以保证数据的完整性、一致性,但是这样超负荷的事务,对于数据库是一个严重的挑战,在这样的情况下很容易产生死锁,降低系统的性能。

<3>回发或回调参数无效。

     在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。

     出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。 

<asp:TemplateField HeaderText="操作">
       
<ItemTemplate>
                
<asp:LinkButton ID="lbtnDelete" runat="server" CommandName="Delete" CommandArgument='<%#Eval("F_ID") %>' OnClientClick="return confirm('您确定要删除吗?')">[删除]</asp:LinkButton></td>
         
</ItemTemplate>
</asp:TemplateField>

  解决方案:
   1)你可以把【删除】按钮按钮的CommandName属性的值(原值为“delete”)修改为不是"delete"就可以了,譬如修改为“del”;
  2)或者你主动添加一个RowDeleting事件,该事件中的代码为空。  

<4>Unable to attach.绑定句柄无效

     调试程序,提示如下错误:

                 

   经过自己的思考以及分析,感觉是我使用优化大师的时候可能将一些必要的服务给停掉了,因为在那之前并没有这样的问题。随后我到google去搜,终于发现了问题的所在。

   解决办法:启动服务:Terminal Services

 

<5>DALFactory出现"未能加载文件或程序集“League.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案

  其实错误很明显,就是找不到League.SQLServerDAL.dll这个文件,主要原因在于我们生成的DLL是SQLServerDAL.dll。

  解决办法:
  在项目的属性里设置程序集的名称为League.SQLServerDAL,就可以生成League.SQLServerDAL.dll这样的dll文件。

 

 <6>提示无法应用程序"webDev.webServer.EXE",已经附加了一个调试了
  关闭解决方案,重新打开,进行调试。 

     原因:页面使用了Form嵌套,是否只有一个Form表单 


<7>回发或回调参数无效。 

  在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    

问题所在:

  一是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。
  二是在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。

<8>Repeater的事件失效,在点击按钮是,并没有触发事件。
  类似的:

protected void Repeater1_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
{
    
//do something
}


  解决方案:Repeater的EnableviewState置为True

<9>SqlDbType.Text长度限制。

  因为需要存储一篇文章,特使用了SqlDbType.Text,但是,在增加文章的时候,内容总是添加失败。最后发现原来是SqlDbType.Text长度限制。

new SqlParameter("@F_Content",SqlDbType.Text,16)

因为有了这个限制,使得文章只能截取长度为16字符串。但是长度又不能不填写。

解决办法:

  1、size:可以是根据自己的情况进行设定,或者可以不用设定,不过检验输入的长度还是十分有必要的。

  2、改用nvarchar或者varchar,如果文章的篇幅不是很长可以考虑这两种类型。

 

Varchar、NVarchar和Text特点、区别

 <10>执行JS,页面样式全乱。

Response.Write("<script language='javascript'>alert('"+message+"');</script>");

有的时候需要在CS中执行JS语句,比如错误提示、页面跳转等。但是经常会遇到这样的问题,当语句执行后,显示的页面都乱了,之前的CSS并没有派上用场。

原因是:在执行Response.write方法时,会输出一些代码到页面中,你可以查看出来乱套的页面的源代码,会发现在页面的顶部有一段JS代码,这便是Response.Write方法结果。

正确方法:

page.ClientScript.RegisterClientScriptBlock(page.GetType(), "message""<script language='javascript'>alert('" + message + "');</script>");

 

命令使得页面执行此JS代码,是在<form>标记之后出现JS代码。在运行时,页面就不会乱。

<11>Replace失效
字符串的替换是有返回值的,记住哦。
string s="Hello the World!";
s.Replace("Hello","Hello Sir");//它不会那么自己把自己给换了的。
正确的:
s=s.Replace("Hello","Hello Sir");