zoukankan      html  css  js  c++  java
  • “操作必须执行一个可更新的查询”处理结果

    发生的错误:

    未将对象引用设置到对象的实例。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

    源错误:
    行 281:                  OleDbCommand myCommand11=new OleDbCommand(selCmd,myConn);
    行 282:                  myCommand11.Connection.Open();                  
    行 283:                  int flag=(int)myCommand11.ExecuteScalar();                        
    行 284:                  myCommand11.Connection.Close();
    行 285:                  if(flag!=0)
    源文件: e:\site\jiasheng\manager.aspx.cs    行: 283

    堆栈跟踪:

    [NullReferenceException: 未将对象引用设置到对象的实例。]
       jiasheng.admin.manager.Chk_Pass() in e:\site\jiasheng\manager.aspx.cs:283
       jiasheng.admin.manager.Button5_Click(Object sender, EventArgs e) in e:\site\jiasheng\manager.aspx.cs:246
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain() +1277


    版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573
    原来的代码:
    private bool Chk_Pass()
      {
       string path=ConfigurationSettings.AppSettings["strConn2"];
       string dataPath="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(path)+";";
       OleDbConnection myConn=new OleDbConnection();
       myConn.ConnectionString=dataPath;
       string selCmd="select * from [user] where username='"+Session["UserName"].ToString()+"' and pass='"+tb_OldPass.Text+"'";
       OleDbCommand myCommand11=new OleDbCommand(selCmd,myConn);
       myCommand11.Connection.Open();   
       int flag=(int)myCommand11.ExecuteScalar();    
       myCommand11.Connection.Close();
       if(flag!=0)
        {
         return true;
        }
        else
         return false;
      }
    分析原因:
    首先说明一下,如果在执行数据库查询的过程当中,username和pass都为正确的,那么则不会发生此错误,如果username或者pass其中一者是错的,则一定会出现此错误,分析了一下:
    所引发的异常为NullReferenceException,证明myCommand11.ExecuteScalar()是一个空对象,当int flag=(int)myCommand11.ExecuteScalar(); 试图把空对象转化成int并赋值时,引发了此异常
    解决办法:
    经过以上的分析得出:如果当
    myCommand11.ExecuteScalar()为一个空对象时,也就是select * from [user] where username='"+Session["UserName"].ToString()+"' and pass='"+tb_OldPass.Text+"'";
    的结果为空时,在程序中引发一个异常,可以用try....catch....finally来解决此问题。

    修改后的代码:
    private bool Chk_Pass()
      {
       string path=ConfigurationSettings.AppSettings["strConn2"];
       string dataPath="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(path)+";";
       OleDbConnection myConn=new OleDbConnection();
       myConn.ConnectionString=dataPath;
       string selCmd="select * from [user] where username='"+Session["UserName"].ToString()+"' and pass='"+tb_OldPass.Text+"'";
       OleDbCommand myCommand11=new OleDbCommand(selCmd,myConn);
       myCommand11.Connection.Open();   
       try
       {
        int flag=(int)myCommand11.ExecuteScalar();    
        if(flag!=0)
        {
         return true;
        }
        else
         return false;
       }
       catch
       {
        return false;
       }
       finally
       {
        myCommand11.Connection.Close();
       }   }
    小结:
    这个错误的出现,使我认识到:不能用一个空对象来给将来赋值的对象赋值,否则会引起NullReferenceException异常。
  • 相关阅读:
    编译问题----宏定义一定显示未定义
    低级错误记录-程序更新后,没有显示想要的结果
    云编译的优点-普及云编译
    telecommunication communication 的区别
    学习EPC架构演进历史知识
    EOF与feof的区别
    epoll惊群问题-解决思路
    epoll多路复用机制的学习
    进程组与组长进程
    记录博客开始
  • 原文地址:https://www.cnblogs.com/free/p/64536.html
Copyright © 2011-2022 走看看