问题描述
登陆通过验证码后就不能读取数据库...登陆的后台代码是:protectedvoidPage_Load(objectsender,EventArgse){}protectedvoidbtnLogin_Click(objectsender,EventArgse){DBdb=newDB();stringuserName=this.txtUserName.Text.Trim();stringpassWord=db.MD5(this.txtPwd.Text.Trim());stringnum=this.txtValidateNum.Text.Trim();if(Session["ValidateNum"].ToString()==num.ToUpper()){OleDbDataReaderdr=db.reDr("select*fromtb_UserwhereUserName='"+userName+"'andPassWord='"+passWord+"'");dr.Read();if(dr.HasRows){Session["UserID"]=dr.GetValue(0);Session["Role"]=dr.GetValue(4);Response.Redirect("~/UserManagement.master");}else{Response.Write("<script>alert('登录失败!不存在此用户或者是密码错误');location='login.aspx'</script>");}dr.Close();}else{Response.Write("<script>alert('验证码错误!');location='login.aspx'</script>");}}}但登陆时出现了这个错误。我的DB类的这个方法出了问题:publicOleDbDataReaderreDr(stringstr){OleDbConnectionconn=GetCon();//连接数据库conn.Open();//并打开了连接OleDbCommandcom=newOleDbCommand(str,conn);OleDbDataReaderdr=com.ExecuteReader(CommandBehavior.CloseConnection);returndr;//返回OleDbDataReader对象dr}WEB.CONFIG里的连接数据库:<configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"><appSettings><addkey="ConnectionString"value="Provider=Microsoft.Jet.OleDb.4.0;"/></appSettings>究竟是哪里出问题呢?
解决方案
解决方案二:
连接字符串问题stringstrConnnection=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=";strConnnection+=Server.MapPath("~/App_Data/a.mdb");
解决方案三:
我刚刚按你博客的说法把WEB.CONFIG里改成:<appSettings><addkey="SQLConnString"value="provider=microsoft.jet.oledb.4.0;datasource="/><addkey="dbPath"value="~/App_Data/db_Student.mdb"/></appSettings>然后登陆时就说这里有问题:我把整个DB类贴一下: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.Data.OleDb;usingSystem.Security.Cryptography;///<summary>///db的摘要说明///</summary>publicclassDB{publicDB(){}publicOleDbConnectionGetCon(){returnnewOleDbConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());}publicintOleDbEx(stringcmdstr){OleDbConnectioncon=GetCon();con.Open();OleDbCommandcmd=newOleDbCommand(cmdstr,con);try{cmd.ExecuteNonQuery();return1;}catch(Exceptione){return0;//失败返回0}finally{con.Dispose();}}publicDataTablereDt(stringcmdstr){OleDbConnectioncon=GetCon();OleDbDataAdapterda=newOleDbDataAdapter(cmdstr,con);DataSetds=newDataSet();da.Fill(ds);return(ds.Tables[0]);}publicOleDbDataReaderreDr(stringstr){OleDbConnectionconn=GetCon();conn.Open();OleDbCommandcom=newOleDbCommand(str,conn);OleDbDataReaderdr=com.ExecuteReader(CommandBehavior.CloseConnection);returndr;}}
解决方案四:
用这个吧:至少要把数据操作封装一下呀
解决方案五:
stringstrConnnection=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=";strConnnection+=Server.MapPath("~/App_Data/a.mdb");这句是写在主程序上还是类里啊?
解决方案六:
<appSettings><addkey="ConnString"value="provider=microsoft.jet.oledb.4.0;datasource="/><addkey="dbPath"value="~/App_Data/db_Student.mdb"/></appSettings>
publicOleDbConnectionGetCon(){returnnewOleDbConnection(ConfigurationManager.AppSettings["ConnString"].ToString()+System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["dbPath"].ToString()));}
解决方案七:
以下是我帮一公司做的,也是ACCESS的:<connectionStrings><addname="xxString"connectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=#"providerName="System.Data.OleDb"/></connectionStrings>以下是主要代码了(我封装在一个类里):staticConfigurationGenerlerSets(){//初始化数据库提供程序和数据库链接字符串providerName=ConfigurationManager.ConnectionStrings["xxcroConnectionString"].ProviderName;stringstr=ConfigurationManager.ConnectionStrings["xxcroConnectionString"].ConnectionString;connectionString=str.Replace("#",System.Web.HttpContext.Current.Server.MapPath("~/App_Data/")+"xx.mdb");//这里,自己看下.NET交流群:11425434
解决方案八:
首先,用VS2005:web.config:<connectionStrings><addname="myConn"connectionString="~/Data/DB.mdb"/></connectionStrings>.cs:privatestaticstringconnectionString;privatestaticstringGetConnectionString(){stringmyConnectionString=System.Web.HttpRuntime.Cache["ConnectionString"].ToString();if(myConnectionString==null){connectionString=myConnectionString;System.Web.HttpRuntime.Cache["ConnectionString"]=connectionString;}returnconnectionString;}publicstaticOleDbConnectionGetConn(){OleDbConnectionConn;stringmyConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["myConn"].ConnectionString);stringConnString=myConnectionString;Conn=newOleDbConnection(ConnString);returnConn;}publicstaticintExecNonQuery(stringmySql){OleDbConnectionmyConn=GetConn();OleDbCommandmyCmd=newOleDbCommand(mySql,myConn);myCmd.CommandText=mySql;myConn.Open();intmyTmp=myCmd.ExecuteNonQuery();myCmd.Dispose();myConn.Close();returnmyTmp;}publicstaticobjectExecScalar(stringmySql){OleDbConnectionmyConn=GetConn();OleDbCommandmyCmd=newOleDbCommand(mySql,myConn);myConn.Open();objectmyTmp=myCmd.ExecuteScalar();myCmd.Dispose();myConn.Close();returnmyTmp;}publicstaticOleDbDataReaderExecReader(stringmySql){OleDbConnectionmyConn=GetConn();OleDbCommandmyCmd=newOleDbCommand(mySql,myConn);myConn.Open();OleDbDataReadermyReader=myCmd.ExecuteReader(CommandBehavior.CloseConnection);myCmd.Dispose();returnmyReader;}
解决方案九:
你的conn一直开着,把conn.open();省略掉试试看
解决方案十:
引用8楼laoyingisme的回复:
你的conn一直开着,把conn.open();省略掉试试看
楼上的你说错了如果不打开那怎么能执行相应的查询语句了这应该是select语句的错误或者是字符连接的问题具体错在那我就不知道了我现在看见代码眼睛就疼哀哀
解决方案十一:
publicstaticSqlConnectionReturnConn(){stringstrConn=System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];SqlConnectionConn=newSqlConnection(strConn);if(Conn.State.Equals(ConnectionState.Closed)){Conn.Open();}returnConn;}这样就可以防止你的问题了
解决方案十二:
我写重来没有出现过这问题,一般都是一次性成功
解决方案十三:
很好谢谢大家了,我等下再调试。
解决方案十四:
引用10楼hzxbl的回复:
publicstaticSqlConnectionReturnConn(){stringstrConn=System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];SqlConnectionConn=newSqlConnection(strConn);if(Conn.State.Equals(ConnectionState.Closed)){Conn.Open();}returnConn;}这样就可以防止你的问题了
正解
解决方案十五:
引用13楼yanlan112的回复:
引用10楼hzxbl的回复:publicstaticSqlConnectionReturnConn(){stringstrConn=System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];SqlConnectionConn=newSqlConnection(strConn);if(Conn.State.Equals(ConnectionState.Closed)){Conn.Open();}returnConn;}这样就可以防止你的…
一个新的CONN不用判断
解决方案:
按照LS的,我应该是连到了数据库了但为什么输入账号密码时就说我错误呢?我很肯定数据库里的账号密码没错的。protectedvoidbtnLogin_Click(objectsender,EventArgse){DBdb=newDB();stringuserName=this.txtUserName.Text.Trim();stringpassWord=db.MD5(this.txtPwd.Text.Trim());stringnum=this.txtValidateNum.Text.Trim();if(Session["ValidateNum"].ToString()==num.ToUpper()){OleDbDataReaderdr=db.reDr("select*fromtb_UserwhereUserName='"+userName+"'andPassWord='"+passWord+"'");dr.Read();if(dr.HasRows){Session["UserID"]=dr.GetValue(0);Session["Role"]=dr.GetValue(4);Response.Redirect("~/UserManagement.master");}else{Response.Write("<script>alert('登录失败!不存在此用户或者是密码错误');location='login.aspx'</script>");}dr.Close();}else{Response.Write("<script>alert('验证码错误!');location='login.aspx'</script>");}}这里应该没问题吧???我的DB_STUDENT表
解决方案:
没人帮忙解答下么???连到数据库了就说我账号密码都不对。。。
解决方案:
建议拖个OleDataSource,自动生成一个连接字符串,看看什么毛病。重要的是解决问题的方法。