问题描述
我将光盘上的例子考到我自己的机子上,按照说明上的指导,第一步,在SQLServer企业管理器里附加数据库,第二步,修改配置文件,两处,一个是服务器名,一个是访问密码。我用的是VS.NET2.0+SQLServer2000~在我运行的时候,出现下列问题~~未将对象引用设置到对象的实例。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。驱六异常详细信息:System.NullReferenceException:未将对象引用设置到对象的实例。源错误:行46:行47:///判断用户是否合法行48:if(recu.Read())行49:{行50:userId=recu["UserID"].ToString();源文件:e:InetpubWebSite3Default.aspx.cs行:48堆栈跟踪:[NullReferenceException:未将对象引用设置到对象的实例。]Default.LoginBtn_Click(Objectsender,EventArgse)ine:InetpubWebSite3Default.aspx.cs:48System.Web.UI.WebControls.Button.OnClick(EventArgse)+75System.Web.UI.WebControls.Button.RaisePostBackEvent(StringeventArgument)+97System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(StringeventArgument)+7System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandlersourceControl,StringeventArgument)+11System.Web.UI.Page.RaisePostBackEvent(NameValueCollectionpostData)+33System.Web.UI.Page.ProcessRequestMain(BooleanincludeStagesBeforeAsyncPoint,BooleanincludeStagesAfterAsyncPoint)+4921
解决方案
解决方案二:
类库代码如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.SqlClient;publicpartialclassDefault:System.Web.UI.Page{staticstringsValidator="";privatereadonlystringsValidatorImageUrl="ValidateImage.aspx?Validator=";protectedvoidPage_Load(objectsender,EventArgse){///添加页面初始化代码if(!Page.IsPostBack){sValidator=GetRandomint();ValidateImage.ImageUrl=sValidatorImageUrl+sValidator;}}protectedvoidLoginBtn_Click(objectsender,EventArgse){///如果页面输入合法if(Page.IsValid==true){if(Validator.Text!=sValidator){Message.Text="验证码输入错误,请重新输入验证码!!!";sValidator=GetRandomint();ValidateImage.ImageUrl=sValidatorImageUrl+sValidator;return;}StringuserId="";///定义类并获取用户的登陆信息WebDBManage.Useruser=newWebDBManage.User();SqlDataReaderrecu=user.GetUserLogin(UserName.Text.Trim(),Password.Text.Trim());///判断用户是否合法if(recu.Read()){userId=recu["UserID"].ToString();}recu.Close();///验证用户合法性,并跳转到系统平台if((userId!=null)&&(userId!="")){Session["UserID"]=userId;//跳转到登录后的第一个页面Response.Redirect("~/Main.aspx");}else{sValidator=GetRandomint();ValidateImage.ImageUrl=sValidatorImageUrl+sValidator;///显示错误信息Message.Text="你输入的用户名称或者密码有误,请重新输入!";}}}protectedvoidCancelBtn_Click(objectsender,EventArgse){///清空用户名称和密码输入框UserName.Text=Password.Text="";}privateStringGetRandomint(){Randomrandom=newRandom();return(random.Next(100000,999999).ToString());}}哪位高手指点一下啊~~急需~~先谢谢了啊~~
解决方案三:
user.GetUserLogin方法代码贴出来看看.你确实返回的不是空?!
解决方案四:
user.GetUserLogin是不是没有返回对象?
解决方案五:
先谢谢你啊~~我只考了这些出来,在网吧上的,很不方便!请问这种情况一般是在哪些地方出现了问题啊,我回去再慢慢试试~~再次感谢~~
解决方案六:
不说了吗,"你确实返回的不是空?!"
解决方案七:
弱弱的问一下,怎么判定返回的是不是空啊?
解决方案八:
if(recu!=null&&recu.Read())...
解决方案九:
谢谢,如果是空的话,怎么解决啊?
解决方案十:
我倒.....你是通用用户名和密码到数据查询的是吧,如selectfieldsfromtablewhereusername=xxxandpwd=yyy是不是,如果在数据库查询没有返回,那当然是你的用户名和密码不对了,如果密码和用户都对,那你要检查一下你的代码哪里错了.
解决方案十一:
到数据层看一下,到数据层的GetUserLogin()里看一下,有没有两个变量名字相同,比如有两个userid,我举段DA层的Get代码你看一下objMmsProject.PrjDeptId=objRow[MmsProjectSchema.PRJ_DEPT_ID]==DBNull.Value?"":Convert.ToString(objRow[MmsProjectSchema.PRJ_DEPT_ID]);objMmsProject.PrjSubDeptId=objRow[MmsProjectSchema.PRJ_SUB_DEPT_ID]==DBNull.Value?"":Convert.ToString(objRow[MmsProjectSchema.PRJ_SUB_DEPT_ID]);
如果PrjDeptId这里变成了PrjSubDeptId,出现两个PrjSubDeptId,而后面相对的MmsProjectSchema.PRJ_DEPT_ID没有改变的话,是会报“未将对象引用设置到对象的实例”这个错误的
解决方案十二:
一般出现这种报错都是DA层出的问题,查询的数据与数据库里的列不匹配所造成的,比如数据库里有两个字段:userid,password。但是在程序里只有一个字段userid,没有password,则user.GetUserLogin返回的值就是NULL
解决方案十三:
LZ,把user.GetUserLogin方法拿出来给大家看看。。。。
解决方案十四:
你从守页登陆进去,是不是你没有登陆啊就执行页面啊.再就是数据库登陆名是否存在
解决方案十五:
在引用之前应该先判断是否为空再去操作才行。
解决方案:
谢谢楼上的各位兄弟,最近忙好久没来了,老问题还是没有解决~~我把user.GetUserLogin方法贴出来,希望哪位大虾给与指点一下~usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Security.Cryptography;usingSQLHelper;usingSystem.Data.SqlClient;usingSystem.Text;namespaceDocumentManager{///<summary>///SummarydescriptionforUser///</summary>publicclassUser{publicstaticreadonlyintUSERTYPESUPERADMIN=0;publicstaticreadonlyintUSERTYPEADMIN=1;publicstaticreadonlyintUSERTYPENORMAL=2;publicSqlDataReaderGetUserLogin(stringsUserName,stringsPassword){///定义类SQLHelperSQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();///定义保存从数据库获取的结果的DataReaderSqlDataReaderdr=null;///创建访问数据库的参数SqlParameter[]paramList={sqlHelper.CreateInParam("@UserName",SqlDbType.VarChar,200,sUserName),sqlHelper.CreateInParam("@Password",SqlDbType.VarChar,255,sPassword)};try{///执行存储过程sqlHelper.RunProc("Pr_GetUserLogin",paramList,outdr);}catch(Exceptionex){///抛出执行数据库异常SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}///返回从数据库获取的结果return(dr);}publicSqlDataReaderGetUsers(){///定义类SQLHelperSQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();///定义保存从数据库获取的结果的DataReaderSqlDataReaderdr=null;try{///执行存储过程sqlHelper.RunProc("Pr_GetUsers",outdr);}catch(Exceptionex){///抛出执行数据库异常SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}///返回从数据库获取的结果return(dr);}publicSqlDataReaderGetSingleUser(intnUserID){///定义类SQLHelperSQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();///定义保存从数据库获取的结果的DataReaderSqlDataReaderdr=null;///创建访问数据库的参数SqlParameter[]paramList={sqlHelper.CreateInParam("@UserID",SqlDbType.Int,4,nUserID)};try{///执行存储过程sqlHelper.RunProc("Pr_GetSingleUser",paramList,outdr);}catch(Exceptionex){///抛出执行数据库异常SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}///返回从数据库获取的结果return(dr);}publicintAddUser(stringsUserName,stringsPassword,stringsEmail,intnRoleID){///定义类SQLHelperSQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();///创建访问数据库的参数SqlParameter[]paramList={sqlHelper.CreateInParam("@UserName",SqlDbType.VarChar,200,sUserName),sqlHelper.CreateInParam("@Password",SqlDbType.VarChar,255,sPassword),sqlHelper.CreateInParam("@Email",SqlDbType.VarChar,200,sEmail),sqlHelper.CreateInParam("@RoleID",SqlDbType.Int,4,nRoleID)};try{///执行存储过程return(sqlHelper.RunProc("Pr_AddUser",paramList));}catch(Exceptionex){///抛出执行数据库异常SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}}publicvoidUpdateUserPwd(intnUserID,stringsPassword){///定义类SQLHelperSQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();///创建访问数据库的参数SqlParameter[]paramList={sqlHelper.CreateInParam("@UserID",SqlDbType.Int,4,nUserID),sqlHelper.CreateInParam("@Password",SqlDbType.VarChar,255,sPassword)};try{///执行存储过程sqlHelper.RunProc("Pr_UpdateUserPwd",paramList);}catch(Exceptionex){///抛出执行数据库异常SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}}publicvoidDeleteUser(intnUserID){///定义类SQLHelperSQLHelper.SQLHelpersqlHelper=newSQLHelper.SQLHelper();///创建访问数据库的参数SqlParameter[]paramList={sqlHelper.CreateInParam("@UserID",SqlDbType.Int,4,nUserID)};try{///执行存储过程sqlHelper.RunProc("Pr_DeleteUser",paramList);}catch(Exceptionex){///抛出执行数据库异常SystemError.CreateErrorLog(ex.Message);thrownewException(ex.Message,ex);}}///<summary>///用户加密函数///</summary>publicstaticStringEncrypt(stringpassword){Byte[]clearBytes=newUnicodeEncoding().GetBytes(password);Byte[]hashedBytes=((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);returnBitConverter.ToString(hashedBytes);}///<summary>///判断用户的类型:///0:超级管理员;///1:管理员;///2:普通用户。///</summary>///<paramname="sUserID"></param>///<returns>UserType</returns>publicstaticintIsAuthorityAdmin(stringsUserID){///用户ID为空if(sUserID==null||sUserID==""){return(Int32.MaxValue);}///获取用户所属的类型stringsUserType="";Useruser=newUser();SqlDataReaderrecu=user.GetSingleUser(Int32.Parse(sUserID));if(recu.Read()){///读取用户类型sUserType=recu["UserType"].ToString();}recu.Close();if(sUserType==""){return(Int32.MaxValue);}return(Int32.Parse(sUserType));}}}
解决方案:
返回值为空,仔细检查。
解决方案:
recu这个对象为空,仔细检查一下。