我正在尝试使用ms access database更改密码选项....
请帮助我们......
这里的代码: default.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
try
{
OleDbConnection myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings["vhgroupconnection"].ConnectionString);
myCon.Open();
string userid = txtuserid.Text;
string oldpass = txtoldpass.Text;
string newPass = txtnewpass.Text;
string conPass = txtconfirmpass.Text;
string q = "select user_id,passwd from register where user_id = @userid and passwd = @oldpass";
OleDbCommand cmd = new OleDbCommand(q, myCon);
OleDbDataReader reader = new OleDbDataReader();
cmd.Parameters.AddWithValue("@userid", txtuserid.Text);
cmd.Parameters.AddWithValue("@oldpass", txtoldpass.Text);
reader = cmd.ExecuteReader();
reader.Read();
if (reader["user_id"].ToString() != String.Empty && reader["passwd"].ToString() != String.Empty)
{
if (newPass.Trim() != conPass.Trim())
{
lblmsg.Text = "New Password and old password does not match";
}
else
{
q = "UPDATE register SET passwd = @newPass WHERE user_id =@userid";
cmd = new OleDbCommand(q, myCon);
cmd.Parameters.AddWithValue("@newPasss", txtnewpass.Text);
cmd.Parameters.AddWithValue("@userod", txtuserid.Text);
cmd.Parameters.AddWithValue("@passwd", txtoldpass.Text);
int count = cmd.ExecuteNonQuery();
if (count > 0)
{
lblmsg.Text = "Password changed successfully";
}
else
{
lblmsg.Text = "password not changed";
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
也请检查.....
编译错误说明:期间发生错误 编译服务此请求所需的资源。请 查看以下特定错误详细信息并修改您的来源 代码恰当。
编译器错误消息:CS0143:类型 ' System.Data.OleDb.OleDbDataReader'没有定义构造函数
来源错误:
Line 36: OleDbCommand cmd = new OleDbCommand(q, myCon);
Line 37:
Line 38: OleDbDataReader reader = new OleDbDataReader();
Line 39:
Line 40:
答案 0 :(得分:1)
正如错误消息所说; OleDbDataReader
没有构造函数。
来自documentation of OleDbDataReader
;
要创建
OleDbDataReader
,您必须调用ExecuteReader
方法OleDbCommand
对象,而不是直接使用构造函数。
您可以使用返回OleDbDataReader
ExecuteReader
方法
OleDbDataReader dr = cmd.ExecuteReader();
您需要在之前添加参数值,然后调用ExecuteReader
方法。
还可以使用using
statement来处理您的OleDbConnection
,OleDbCommand
和OleDbDataReader
之类的内容;
using(OleDbConnection myCon = new OleDbConnection(conString))
using(OleDbCommand cmd = myCon.CreateCommand())
{
//Define your sql query and add your parameter values.
using(OleDbDataReader dr = cmd.ExecuteReader())
{
//
}
}
正如史蒂夫mentioned,OleDbDataReader.Read
method返回boolean
值(true
的{{1}}),它会显示您的false
结果逐行。您可能需要考虑在 while语句中使用此方法的结果。例如;
OleDbDataReader
最后,我强烈怀疑您将密码存储为纯文本。 不要这样做!使用SHA-512 hash。
答案 1 :(得分:0)
正如MSDN明确指出的那样,To create an OleDbDataReader, you must call the ExecuteReader method of the OleDbCommand object, instead of directly using a constructor.
您无法使用new
实例化它,这就是您正在做的事情,这就是您收到错误的原因。删除有问题的行并将其更改为此以消除错误:
OleDbDataReader reader = cmd.ExecuteReader();
另外,请记住使用using
块来确保资源得到妥善处理。
using(OleDbConnection myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings["vhgroupconnection"].ConnectionString))
{
OleDbCommand cmd = new OleDbCommand(q, myCon);
//Add parameters etc
OleDbDataReader reader = cmd.ExecuteReader();
//Rest of the processing
}
答案 2 :(得分:0)
问题:您尝试通过调用OleDbDataReader
制作new OleDbDataReader()
的新实例,而应使用OleDbCommand.ExecuteReader()
创建一个阅读器。
在以下代码中,请注意使用using
语句(这应该确保OleDbDataReader
的情况下连接关闭或读取器关闭。)
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string sConnString = ConfigurationManager.ConnectionStrings["vhgroupconnection"].ConnectionString;
using(OleDbConnection myCon = new OleDbConnection(sConnString))
{
myCon.Open();
string userid = txtuserid.Text;
string oldpass = txtoldpass.Text;
string newPass = txtnewpass.Text;
string conPass = txtconfirmpass.Text;
string q = "select user_id,passwd from register where user_id = @userid and passwd = @oldpass";
OleDbCommand cmd = new OleDbCommand(q, myCon);
cmd.Parameters.AddWithValue("@userid", txtuserid.Text);
cmd.Parameters.AddWithValue("@oldpass", txtoldpass.Text);
string sUserId = string.Empty;
string sPass = string.Empty;
using(OleDbDataReader reader = cmd.ExecuteReader())
{
if(reader.Read()) //assumption: one record returned
{
sUserId = reader["user_id"].ToString();
sPass = reader["passwd"].ToString();
}
}
if (sUserId != string.Empty && sPass != string.Empty)
{
if (newPass.Trim() != conPass.Trim())
lblmsg.Text = "New Password and old password does not match";
else
{
q = "UPDATE register SET passwd = @newPass WHERE user_id =@userid";
cmd = new OleDbCommand(q, myCon);
cmd.Parameters.AddWithValue("@newPass", txtnewpass.Text);
cmd.Parameters.AddWithValue("@userid", txtuserid.Text);
int count = cmd.ExecuteNonQuery();
if (count > 0)
lblmsg.Text = "Password changed successfully";
else
lblmsg.Text = "password not changed";
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}