2014-07-09 94 views
2

我試圖改變與MS Access數據庫密碼選項....錯誤:類型「System.Data.OleDb.OleDbDataReader」有沒有構造函數定義

請幫我人....

這裏的代碼: 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 [email protected]"; 
       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; 
    } 
} 

還要檢查PLS .....

Compilation Error Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0143: The type 'System.Data.OleDb.OleDbDataReader' has no constructors defined

源錯誤:

Line 36:    OleDbCommand cmd = new OleDbCommand(q, myCon); 
Line 37: 
Line 38:    OleDbDataReader reader = new OleDbDataReader(); 
Line 39:    
Line 40:  

回答

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 
} 
1

如錯誤消息所示; OleDbDataReader沒有構造函數。

documentation of OleDbDataReader;

To create an OleDbDataReader , you must call the ExecuteReader method of the OleDbCommand object, instead of directly using a constructor.

您可以使用ExecuteReader方法返回OleDbDataReader

OleDbDataReader dr = cmd.ExecuteReader(); 

而你需要添加您的參數值調用ExecuteReader方法之前

同樣使用using statement來處理您的OleDbConnection,OleDbCommandOleDbDataReader like;

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()) 
    { 
     // 
    } 
} 

而作爲史蒂夫mentionedOleDbDataReader.Read method回報boolean值(falsetrue),它讀取您的OleDbDataReader結果行通過行。您可能需要考慮使用此方法的結果,如,而語句。例如;

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

最後,我強烈懷疑您將密碼存儲爲純文本。 不要這樣做!使用SHA-512 hash

+0

+1但是也有一個非常錯誤的代碼的第二部分沒有檢查的結果reader.Read() – Steve

+0

@Steve是的。更新了我的答案。謝謝。 –

0

問題:您嘗試通過調用new OleDbDataReader()而應該創建一個使用OleDbCommand.ExecuteReader()讀者做出OleDbDataReader新實例。

在下面的代碼中注意使用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 [email protected]"; 
        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; 
     } 
} 
+0

感謝民間...但我再次得到的錯誤爲「對象引用未設置爲對象的實例」。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。 異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。 Source Error: Line 76:catch(Exception ex) Line 77:{ Line 78:throw ex; 79行:} 行80:} – prasath

+0

我修改了答案。你現在可以檢查嗎? – Hassan

相關問題