错误:“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:    

错误:“System.Data.OleDb.OleDbDataReader”类型未定义构造函数

正如错误消息所说; OleDbDataReader没有构造函数。

来自OleDbDataReader的文件;

要创建OleDbDataReader,必须调用 ExecuteReader 方法 的OleDbCommand对象,而不是直接使用构造函数。

您可以使用返回ExecuteReader OleDbDataReader的方法

OleDbDataReader dr = cmd.ExecuteReader();

在调用该方法之前,您需要添加参数值ExecuteReader

也使用using语句来处置您的OleDbConnectionOleDbCommandOleDbDataReader等;

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值(falsetrue(,并逐读取您的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;
      }
}