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异常。
  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/free/p/64536.html
Copyright © 2011-2022 走看看