C# 错误:类型为';System.Data.OleDb.OleDbDataReader';没有定义构造函数

C# 错误:类型为';System.Data.OleDb.OleDbDataReader';没有定义构造函数,c#,asp.net,C#,Asp.net,我正在尝试使用ms access数据库更改密码选项 请帮帮我,伙计们 代码如下: default.aspx.cs protected void Button1_Click(object sender, EventArgs e) { try { OleDbConnection myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings["vhgroupconnection"].Connect

我正在尝试使用ms access数据库更改密码选项

请帮帮我,伙计们

代码如下: 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:    

正如MSDN明确指出的那样,
要创建OleDbDataReader,必须调用OleDbCommand对象的ExecuteReader方法,而不是直接使用构造函数。

您不能使用
new
对其进行实例化,这就是您正在执行的操作,也是您出现错误的原因。删除有问题的行并将其更改为此以消除错误:

OleDbDataReader reader = cmd.ExecuteReader();
另外,请记住使用
使用
块以确保资源得到正确处置

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
}
正如错误消息所说;没有构造函数

来自

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

您可以使用返回OleDbDataReader的方法

OleDbDataReader dr = cmd.ExecuteReader();
在调用
ExecuteReader
方法之前,需要添加参数值

还可用于处理您的
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())
    {
       //
    }  
}
作为Steve,返回
boolean
值(
true
of
false
),并逐行读取您的
OleDbDataReader
结果。您可能需要考虑使用类似于while语句的方法的结果。比如,

while(reader.Read())
{
    //Reads your results until the last row..
}

最后一句话,我强烈怀疑你将密码存储为纯文本不要那样做使用。

问题:您尝试通过调用
新建OleDbDataReader()
来创建
OleDbDataReader的新实例,而应该使用
OleDbCommand.ExecuteReader()
创建一个读卡器

在下面的代码中,注意使用
using
语句(对于
OleDbDataReader
,这应确保连接关闭或读卡器关闭)


+但是代码的第二部分也非常错误,没有检查reader.Read()的结果,谢谢。。。但我再次得到错误“对象引用未设置为对象的实例”。说明:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。源错误:第76行:catch(Exception ex)第77行:{78行:throw ex;79行:}80行:}我修改了答案。你现在能查一下吗?
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;
      }
}