2011-12-17 82 views
0

我有一個關於通過ms訪問數據庫連接的作業。C#數據庫連接

我準備我的數據庫並將其保存爲dbMert並把它調試/ bin中

這是我用來連接數據庫CustomerDatabase類:

static class CustomerDatabase 
{ 

    static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbMert.mdb"; 
    static OleDbConnection connection = null; 
    static OleDbCommand command = null; 


    public static void ConnectToDatabase() 
    { 
     if (connection == null) 
     { 
      connection = new OleDbConnection(connectionstring); 
      command = new OleDbCommand(); 
      command.Connection = connection; 
      command.CommandText = "select * from Customer"; 
     } 
    }  

    public static DataTable executeSelect(string sql) 
    { 
     ConnectToDatabase(); 
     DataTable dt = null; 
     dt = new DataTable(); 
     command.CommandText = sql; 
     OpenConnection(); 
     OleDbDataReader datareader = command.ExecuteReader(); 
     dt.Load(datareader); 
     datareader.Close(); 
     CloseConnection(); 
     return dt; 
    } 

    public static void OpenConnection() 
    { 
     try 
     { 
      if (connection != null) 
      { 
       connection.Open(); 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

    public static void CloseConnection() 
    { 
     if (connection != null) 
     { 
      connection.Close(); 
     } 
    } 


} 

}

形式:在構造函數中我嘗試連接數據庫

public Form1() 
{ 
    InitializeComponent(); 
    CustomerDatabase.ConnectToDatabase(); 
} 

and in form's loa迪試圖把元組的DataGridView但沒有任何反應:S不管其他事情(如不保持一個連接開放,使用using報表等),你沒有連接您的新裝入DataTable

private void Form1_Load(object sender, EventArgs e) 
{ 
    string sql1 = "select * from Customer"; 
    DataTable dt = CustomerDatabase.executeSelect(sql1); 
} 

回答

0

試着寫簡單的代碼。我建議你使用OleDbDataAdaper,它的Fill()方法很容易填充DataTable

您可以使用| DataDirectory |如果您使用位於Bin \ Debug文件夾下的數據庫(.mdb)。

static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0; 
          Data Source=|DataDirectory|\dbMert.mdb"; 

或者

static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0; 
           Data Source=x:\full_path\dbMert.mdb"; 

或者

static string connectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0; 
           Data Source=x:\full_path\dbMert.mdb"; 

static class Test 
{ 
    static string connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbMert.mdb"; 
    public static DataTable executeSelect(string sql) 
    { 
     DataTable dt = new DataTable(); 
     OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connectionString); 
     adapter.Fill(dt); 
     return dt; 
    } 
} 

添加下面的的Form_Load處理程序代碼,

string sql1 = "select * from Customer"; 
DataTable dt = Test.executeSelect(sql1); 
DataGridView1.DataSource=dt; 
+0

對不起,但沒有任何更改:S – snnlaynnkrdsm

+0

沒有任何與代碼worng。 – snnlaynnkrdsm

+0

@「Provider = Microsoft.ACE.OLEDB.4.0; Data Source = dbMert.mdb」;但我認爲我必須安裝oledb 4.0,因爲實際問題錯誤是當我嘗試調試「oledb 4.0未在本地計算機上註冊」時 – snnlaynnkrdsm

2

DataGridView。你的Form1_Load方法只是加載數據到DataTable,然後有效地將其扔掉。

我懷疑你想要的東西,如:在方法結束

dataGridView.DataSource = dt; 

編輯:請注意,這也是非常糟糕的主意OpenConnection代碼:

catch (Exception ex) 
{ 
} 

,基本上說,「如果出現問題,不要打擾記錄事實或改變如何其餘的代碼工作 - 只要繼續下去,就好像什麼都沒發生過一樣。「

爲什麼你會捕捉異常?

+0

我加入,但沒有changed.Datagridview仍然是空的:S – snnlaynnkrdsm

+0

@mertPRG:您是否嘗試過調試進去,看到'DataTable'是否有任何行結束了?你是否在視圖上將AutoGenerateColumns設置爲true? –

+0

microsoft.ace.oledb.12.0'提供者未在本地計算機上註冊我嘗試調試時出現此錯誤。 – snnlaynnkrdsm

0

當我將DB文件移動到bin/debug時,錯誤消息顯示「4.0未安裝」。

但是,當我將它移動到bin時,問題就解決了。

我的代碼:

 con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= ..\\dbMert.mdb"; 
     con.Open(); 


    recordları 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 
     ds.Tables.Add(dt); 
     OleDbDataAdapter da = new OleDbDataAdapter(); 



     da = new OleDbDataAdapter("Select * from Customer", con); 
     da.Fill(dt); 

     dataGridView1.DataSource = dt; 






     foreach (DataRow row in dt.Rows) 
     { 
      foreach (DataColumn col in dt.Columns) 
       if(col.ToString() == "emailAdress") 
       comboBox1.Items.Add(row[col]); 
     } 




     con.Close();