iT邦幫忙

0

[winform] 資料庫連接 使用oop

c#
  • 分享至 

  • xImage

各位前輩好:
我對物件導向概念不熟,因為想把連接資料庫,用物件導向的方式,避免程式重複,所以改了如下,但執行到此行就會產生錯誤,資料庫也的確開啟了,但會產生以下錯誤訊息,不知道有何方法可以解決?
OleDbDataReader reader = checkempty.ExecuteReader();
//System.InvalidOperationException: 'ExecuteReader 必須有開啟與可用的 Connection。連接目前的狀態已關閉。'

另外想請問 OleDbConnection Database_mdb() 是指覆寫的意思嗎?

internal class Insertdata: Database 原本用public 不行改成internal才可以,不知道為什麼會有錯誤
CS0060 不一致的存取範圍: 基底類別 'Database' 比類別 'Form1.Insertdata' 的存取範圍小 sendermail F:\sendermail_V10_20221225\sendermail\Form1.cs 138 使用中

謝謝各位大神

Database 類別 獨立一個檔

 class Database
    {
      
     public OleDbConnection Database_mdb() 
     {
         DataTable myDataTable = new DataTable();
         var DBPath = Application.StartupPath + @"\database\email.mdb"; 
         return new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + DBPath);
        
        }
    }
internal class Insertdata: Database
{
    public void Indata(Form1 f1)
    {
       FunctionTool FunctionTool = new FunctionTool();//函式庫
       Database_mdb().Open();
       string txtempty = "select * from euser";
       OleDbCommand checkempty = new OleDbCommand(txtempty,Database_mdb());
                
        OleDbDataReader reader = checkempty.ExecuteReader();
        //System.InvalidOperationException: 'ExecuteReader 必須有開啟與可用的 Connection。連接目前的狀態已關閉。'
}
是不是單純你connection沒有open,execute之前都要open資料庫,結束後要記得close,存取範圍的問題應該是因為Database沒有public的關係吧
mayyola iT邦研究生 2 級 ‧ 2022-12-27 22:29:18 檢舉
謝謝p大, Database_mdb().Open(); 我有open 資料庫的確也有被開啟@ @(應該沒錯吧..)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
實習工程師
iT邦新手 2 級 ‧ 2022-12-27 11:59:33
最佳解答

internal class Insertdata: Database 原本用public 不行改成internal才可以,不知道為什麼會有錯誤
CS0060 不一致的存取範圍: 基底類別 'Database' 比類別 'Form1.Insertdata' 的存取範圍小 sendermail F:\sendermail_V10_20221225\sendermail\Form1.cs 138 使用中

如果你單純寫一個 class Database , 預設是 private。
Database 存取範圍太小,導致 Insertdata 去繼承的時候,無法去存取

mayyola iT邦研究生 2 級 ‧ 2022-12-27 22:27:11 檢舉

謝謝實習工程師,解決了我的一個問題/images/emoticon/emoticon41.gif

不會,一起加油~

我要發表回答

立即登入回答