关于ASP.NET连接ACCESS数据库的问题

wymanyeah 2009-02-13 09:23:24
登陆通过验证码后就不能读取数据库...
登陆的后台代码是:
protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnLogin_Click(object sender, EventArgs e)
{
DB db = new DB();
string userName = this.txtUserName.Text.Trim();
string passWord = db.MD5(this.txtPwd.Text.Trim());
string num = this.txtValidateNum.Text.Trim();
if (Session["ValidateNum"].ToString() == num.ToUpper())
{
OleDbDataReader dr = db.reDr("select * from tb_User where UserName='" +
userName + "' and PassWord='" + 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类的这个方法出了问题:
public OleDbDataReader reDr(string str)
{
OleDbConnection conn = GetCon();//连接数据库
conn.Open();//并打开了连接 OleDbCommand com = new OleDbCommand(str,conn);
OleDbDataReader dr = com.ExecuteReader(CommandBehavior.CloseConnection);
return dr;//返回OleDbDataReader对象dr
}


WEB.CONFIG里的连接数据库:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings>
<add key="ConnectionString" value="Provider=Microsoft.Jet.OleDb.4.0;" />
</appSettings>

究竟是哪里出问题呢?
...全文
211 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
greatverve 2009-02-19
  • 打赏
  • 举报
回复
建议拖个OleDataSource,自动生成一个连接字符串,看看什么毛病。
重要的是解决问题的方法。
wymanyeah 2009-02-19
  • 打赏
  • 举报
回复
没人帮忙解答下么???
连到数据库了就说我账号密码都不对。。。
yanlan112 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yanlan112 的回复:]
引用 10 楼 hzxbl 的回复:
public static SqlConnection ReturnConn()
{
string strConn = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection Conn = new SqlConnection(strConn);
if (Conn.State.Equals(ConnectionState.Closed))
{
Conn.Open();
}
return Conn;
}


这样就可以防止你的…
[/Quote]
一个新的CONN不用判断
yanlan112 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hzxbl 的回复:]
public static SqlConnection ReturnConn()
{
string strConn = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection Conn = new SqlConnection(strConn);
if (Conn.State.Equals(ConnectionState.Closed))
{
Conn.Open();
}
return Conn;
}


这样就可以防止你的问题了
[/Quote]
正解
wymanyeah 2009-02-16
  • 打赏
  • 举报
回复
很好谢谢大家了,我等下再调试。
wymanyeah 2009-02-16
  • 打赏
  • 举报
回复
按照LS的,
我应该是连到了数据库了
但为什么输入账号密码时就说我错误呢?
我很肯定数据库里的账号密码没错的。


protected void btnLogin_Click(object sender, EventArgs e)
{
DB db = new DB();
string userName = this.txtUserName.Text.Trim();
string passWord = db.MD5(this.txtPwd.Text.Trim());
string num = this.txtValidateNum.Text.Trim();
if (Session["ValidateNum"].ToString() == num.ToUpper())
{
OleDbDataReader dr = db.reDr("select * from tb_User where UserName='" +
userName + "' and PassWord='" + 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表
秋儿-Angel 2009-02-14
  • 打赏
  • 举报
回复
<appSettings>
<add key="ConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>
<add key="dbPath" value="~/App_Data/db_Student.mdb"/>
</appSettings>


public OleDbConnection GetCon()
{
return new OleDbConnection(ConfigurationManager.AppSettings["ConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["dbPath"].ToString()));
}

wymanyeah 2009-02-14
  • 打赏
  • 举报
回复
string strConnnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
strConnnection += Server.MapPath("~/App_Data/a.mdb");

这句是写在主程序上还是类里啊?
stonehy520 2009-02-14
  • 打赏
  • 举报
回复
我写重来没有出现过这问题,一般都是一次性成功
hzxbl 2009-02-14
  • 打赏
  • 举报
回复
public static SqlConnection ReturnConn()
{
string strConn = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
SqlConnection Conn = new SqlConnection(strConn);
if (Conn.State.Equals(ConnectionState.Closed))
{
Conn.Open();
}
return Conn;
}


这样就可以防止你的问题了
iuhxq 2009-02-14
  • 打赏
  • 举报
回复
用这个吧:http://www.svnhost.cn/Article/Detail-75.shtml

至少要把数据操作封装一下呀
巴掌锅 2009-02-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laoyingisme 的回复:]
你的conn一直开着,把conn.open(); 省略掉试试看
[/Quote]
楼上的 你说错了 如果不打开那怎么能执行相应的查询语句了
这应该是 select语句的错误 或者是 字符连接的问题
具体错在那我就不知道了 我现在看见代码 眼睛就疼 哀哀
laoyingisme 2009-02-14
  • 打赏
  • 举报
回复
你的conn一直开着,把conn.open(); 省略掉试试看
liujiayu10 2009-02-14
  • 打赏
  • 举报
回复

首先,用VS2005:
web.config:
<connectionStrings>
<add name="myConn" connectionString="~/Data/DB.mdb"/>
</connectionStrings>

.cs:

private static string connectionString;
private static string GetConnectionString()
{
string myConnectionString = System.Web.HttpRuntime.Cache["ConnectionString"].ToString();
if (myConnectionString == null)
{
connectionString = myConnectionString;
System.Web.HttpRuntime.Cache["ConnectionString"] = connectionString;
}
return connectionString;
}

public static OleDbConnection GetConn()
{
OleDbConnection Conn;
string myConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["myConn"].ConnectionString);
string ConnString = myConnectionString;
Conn = new OleDbConnection(ConnString);
return Conn;
}

public static int ExecNonQuery(string mySql)
{
OleDbConnection myConn = GetConn();
OleDbCommand myCmd = new OleDbCommand(mySql, myConn);
myCmd.CommandText = mySql;
myConn.Open();
int myTmp = myCmd.ExecuteNonQuery();
myCmd.Dispose();
myConn.Close();
return myTmp;
}

public static object ExecScalar(string mySql)
{
OleDbConnection myConn = GetConn();
OleDbCommand myCmd = new OleDbCommand(mySql, myConn);
myConn.Open();
object myTmp = myCmd.ExecuteScalar();
myCmd.Dispose();
myConn.Close();
return myTmp;
}

public static OleDbDataReader ExecReader(string mySql)
{
OleDbConnection myConn = GetConn();
OleDbCommand myCmd = new OleDbCommand(mySql, myConn);
myConn.Open();
OleDbDataReader myReader = myCmd.ExecuteReader(CommandBehavior.CloseConnection);
myCmd.Dispose();
return myReader;
}


likevs 2009-02-14
  • 打赏
  • 举报
回复
以下是我帮一公司做的,也是ACCESS的:

<connectionStrings>
<add name="xxString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=#" providerName="System.Data.OleDb"/>
</connectionStrings>


以下是主要代码了(我封装在一个类里):

static ConfigurationGenerlerSets()
{
//初始化数据库提供程序和数据库链接字符串
providerName = ConfigurationManager.ConnectionStrings["xxcroConnectionString"].ProviderName;

string str = ConfigurationManager.ConnectionStrings["xxcroConnectionString"].ConnectionString;

connectionString = str.Replace("#", System.Web.HttpContext.Current.Server.MapPath("~/App_Data/") + "xx.mdb");//这里,自己看下





.NET交流群:11425434
wymanyeah 2009-02-13
  • 打赏
  • 举报
回复
我刚刚按你博客的说法把WEB.CONFIG里改成:
<appSettings>
<add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>
<add key="dbPath" value="~/App_Data/db_Student.mdb"/>
</appSettings>

然后登陆时就说这里有问题:




我把整个DB类贴一下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Security.Cryptography;

/// <summary>
/// db 的摘要说明
/// </summary>
public class DB
{
public DB()
{
}
public OleDbConnection GetCon()
{
return new OleDbConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
}

public int OleDbEx(string cmdstr)
{
OleDbConnection con = GetCon();
con.Open();
OleDbCommand cmd = new OleDbCommand(cmdstr, con);
try
{
cmd.ExecuteNonQuery();
return 1;
}
catch (Exception e)
{
return 0;//失败返回0
}
finally
{
con.Dispose();
}
}

public DataTable reDt(string cmdstr)
{
OleDbConnection con = GetCon();
OleDbDataAdapter da = new OleDbDataAdapter(cmdstr, con);
DataSet ds = new DataSet();
da.Fill(ds);
return (ds.Tables[0]);
}
public OleDbDataReader reDr(string str)
{
OleDbConnection conn = GetCon();
conn.Open();
OleDbCommand com = new OleDbCommand(str,conn);
OleDbDataReader dr = com.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}

}
wuyq11 2009-02-13
  • 打赏
  • 举报
回复
连接字符串问题
string strConnnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
strConnnection += Server.MapPath("~/App_Data/a.mdb");
http://www.cnblogs.com/sxjrcool/articles/1269462.html

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧