错误:“System.Data.OleDb.OleDbDataReader”类型未定义构造函数
本文关键字:类型 未定义 构造函数 OleDbDataReader OleDb System Data 错误 | 更新日期: 2023-09-27 18:12:10
我正在尝试使用ms访问数据库更改密码选项....
请帮帮我...
这里的代码:默认.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:
正如错误消息所说; OleDbDataReader
没有构造函数。
来自OleDbDataReader
的文件;
要创建
OleDbDataReader
,必须调用ExecuteReader
方法 的OleDbCommand
对象,而不是直接使用构造函数。
您可以使用返回ExecuteReader
OleDbDataReader
的方法
OleDbDataReader dr = cmd.ExecuteReader();
在调用该方法之前,您需要添加参数值ExecuteReader
。
也使用using
语句来处置您的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())
{
//
}
}
正如史蒂夫所提到的,OleDbDataReader.Read
方法返回boolean
值(false
的true
(,并逐行读取您的OleDbDataReader
结果。您可能需要考虑使用此方法的结果,就像在 while 语句中一样。例如;
while(reader.Read())
{
//Reads your results until the last row..
}
最后,我强烈怀疑您将密码存储为纯文本。别这样!使用 SHA-512 哈希。
正如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
}
问题:您尝试通过调用new OleDbDataReader()
来创建新的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;
}
}