簡易 MS Access 資料庫查閱器

摘要:簡易 MS Access 資料庫查閱器

自行安裝了 .Net 後,就一直想要用 .Net 內建的資料庫功能開啟 MS Access 資料庫,不過,試了好幾次都試不出來... 今天找了一堆資料,總算是試出來了 ^_^


  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Data.OleDb;  
  6. using System.Drawing;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.   
  10. namespace testDB  
  11. {  
  12.   public partial class Form1 : Form  
  13.   {  
  14.     /// The connection to the database  
  15.     private OleDbConnection oleDbConnection;  
  16.     private OleDbDataAdapter oleDbDataAdapter = null;  
  17.     private string AppTitle = "簡易 MS Access 資料庫查閱器";  
  18.     public Form1()  
  19.     {  
  20.       InitializeComponent();  
  21.       oleDbConnection = new OleDbConnection();  
  22.     }  
  23.   
  24.     private void button1_Click(object sender, EventArgs e)  
  25.     {  
  26.       // 參考 VB.NET 取得 MS Access 資料庫表格名稱的方式  
  27.       // http://www.vbdotnetheaven.com/UploadFile/mahesh/GettingDBSchema04232005053116AM/GettingDBSchema.aspx?ArticleID=66412256-6bcf-4113-afbc-d3dd8b3cff00  
  28.       if (openFileDialog.ShowDialog() == DialogResult.OK)  
  29.       {  
  30.         this.label1.Text = openFileDialog.FileName;  
  31.         string conect = "Provider=Microsoft.jet.oledb.4.0;Data Source=" + openFileDialog.FileName;  
  32.         oleDbConnection.ConnectionString = conect;  
  33.         oleDbConnection.Open();  
  34.         DataTable schemaTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,  
  35.           new object[] { nullnullnull"TABLE" });  
  36.         // this.dataGridView1.DataSource = schemaTable; // 顯示全部的資料  
  37.   
  38.         DataTable TableList = new DataTable("Table");  
  39.         DataColumn newdc = new DataColumn("Table");     // Column 名稱為 "Table"  
  40.         TableList.Columns.Add(newdc);  
  41.         DataRowCollection rowcoll = TableList.Rows;  
  42.         for (int i = 0; i < schemaTable.Rows.Count; i++)  
  43.         {  
  44.           DataRow rd = schemaTable.Rows[i];  
  45.           if (rd["TABLE_TYPE"].ToString() == "TABLE")  
  46.           {  
  47.             rowcoll.Add(new object[] { rd["TABLE_NAME"] });  
  48.           }  
  49.         }  
  50.         this.dataGridView1.DataSource = TableList;        // 只顯示表格名稱  
  51.         oleDbConnection.Close();  
  52.         this.Text = AppTitle + " Double Click 表格名稱以快速檢視";  
  53.       }  
  54.     }  
  55.   
  56.     private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)  
  57.     {  
  58.       DataTable dt = (DataTable)this.dataGridView1.DataSource;  
  59.       // MessageBox.Show(dt.Rows[e.RowIndex][0].ToString());  
  60.       string sel = "SELECT * FROM " + dt.Rows[e.RowIndex][0].ToString();  
  61.       if (oleDbDataAdapter != null)  
  62.       {  
  63.         oleDbDataAdapter.Dispose();  
  64.         oleDbDataAdapter = null;  
  65.       }  
  66.       this.Text = AppTitle + " 選擇資料表 " + dt.Rows[e.RowIndex][0].ToString();  
  67.   
  68.       try  
  69.       {  
  70.         // 參考 http://www.mcse.ms/archive107-2005-6-1706157.html  
  71.         // 把資料表放入 DataGridView (.Net2.0) 中  
  72.         oleDbDataAdapter = new OleDbDataAdapter(sel, oleDbConnection);  
  73.         OleDbCommandBuilder oleDbCommandBuilder = new OleDbCommandBuilder(oleDbDataAdapter);  
  74.         oleDbDataAdapter.UpdateCommand = oleDbCommandBuilder.GetUpdateCommand();  
  75.         DataSet ds = new DataSet();  
  76.         this.Text = AppTitle + " 讀取資料表 " + dt.Rows[e.RowIndex][0].ToString();  
  77.         oleDbDataAdapter.Fill(ds, dt.Rows[e.RowIndex][0].ToString());  
  78.         this.dataGridView2.DataSource = ds.Tables[0];  
  79.         this.Text = AppTitle + " 讀完資料表 " + dt.Rows[e.RowIndex][0].ToString();  
  80.       }  
  81.       catch  
  82.       {  
  83.         this.Text = AppTitle + " 空的資料表 " + dt.Rows[e.RowIndex][0].ToString();  
  84.       }  
  85.       oleDbConnection.Close();  
  86.     }  
  87.   }