using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;
 using System.Data.OleDb;
 using System.Collections;
 
 namespace ADO.NET与EXCEL
 {
     public partial class Form1 : Form
     {
         ArrayList Tables =new ArrayList();
         public Form1()
         {
             InitializeComponent();
         }
         /*在关系数据库提供的各种对象中(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,
          * 它由指定工作簿中的工作表和定义的命名区域组成。命名区域被视为“表”,而工作表被视为“系统表”)
          * 这里我们将ADO.NET Excel读取也当作一个“数据库”来对待,然后利用OleDbConnection.GetOleDbSchemaTable 方法,要获取所需的架构信息
         */
         //1.檔案位置
         private const string FileName = "C:\\Users\\Administrator\\Desktop\\Book1.xls";
         //2.提供者名稱
         private const string ProviderName = "Microsoft.Jet.OLEDB.4.0;";
         //3.Excel版本,Excel 8.0 針對Excel2000及以上版本,Excel5.0 針對Excel97。
         private const string ExtendedString = "'Excel 8.0;";
         //4.第一行是否為標題
         private const string Hdr = "Yes;";
         //5.IMEX=1 通知驅動程序始終將「互混」數據列作為文本讀取
         private const string IMEX = "0';";
         //=============================================================
         string SheetName = "sheet1";
         //連線字串
         string cs =
                 "Data Source=" + FileName + ";" +
                 "Provider=" + ProviderName +
                 "Extended Properties=" + ExtendedString +
                 "HDR=" + Hdr +
                 "IMEX=" + IMEX;
 
 
         //方法1:逐行讀取
         private void ReadByRange()
         {
             this.listBox1.Items.Clear();
             OleDbConnection cn = new OleDbConnection(cs);
             {
                 cn.Open();
                 //工作表名稱需要加$字串
                 string qs = "select * from[" + SheetName + "$]";
                 try
                 {
                     OleDbCommand cmd = new OleDbCommand(qs, cn);
 
                     OleDbDataReader dr = cmd.ExecuteReader();
                     {
                         while (dr.Read())
                         {
                             int Col = dr.FieldCount;
                             this.listBox1.Items.Add(dr[0].ToString() + "\t" + dr[1].ToString() + "\t" + dr[2].ToString());
                         }
                     }
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show(ex.Message);
                 }
                 finally
                 {
                     cn.Close();
                 }
             }
         }
 
         // 方法2:绑定到DataGridView上
         private void ReadByDataGridView()
         {
             OleDbConnection cn = new OleDbConnection(cs);
             {
                 cn.Open();
                 string qs = "select * from[" + SheetName + "$]";
                 try
                 {
                     OleDbDataAdapter dr = new OleDbDataAdapter(qs, cn);
                     {
                         DataTable dt = new DataTable();
                         dr.Fill(dt);
                         this.dataGridView1.DataSource = dt;
                     }
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show(ex.Message);
                 }
                 finally
                 {
                     cn.Close();
                 }
             }
         }
         //往EXCLE中插入行
         private void Add_Lines()
         {
 
             OleDbConnection cn = new OleDbConnection(cs);
             try
             {
                 if (cn.State == ConnectionState.Closed) cn.Open();
                 string qs = "INSERT INTO [" + SheetName + "$] VALUES('" + this.Txb_AddSno.Text + "','" + this.Txb_AddSname.Text + "','" + this.Txb_AddSsex.Text + "','" + this.Txb_AddAddress.Text + "')";
                 OleDbCommand cmd = new OleDbCommand(qs, cn);
                 {
                     //增加資料
                     cmd.ExecuteNonQuery();
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
             finally
             {
                 cn.Close();
             }
         }
         //枚举EXCEL工作表,判斷工作表是否存在
         private void Search_Tables()
         {
 
             OleDbConnection cn = new OleDbConnection(cs);
             try
             {
                 if (cn.State == ConnectionState.Closed) cn.Open();
                 DataTable dt = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//GetOleDbSchemaTable作用是返回一份表的集合(保持这所有表的新表)(具体未知)
                 //取得工作表數量,法一
                 foreach (DataRow dr in dt.Rows)
                 {
                     Tables.Add((String)dr["TABLE_NAME"]);
                 }
                 foreach (string name in Tables)
                 {
                     this.label1.Text +="  "+ name;
                 }
                 //取得工作表數量,法二
               /*  int TableCount = dt.Rows.Count;
                 for (int i = 1; i < TableCount; i++)
                 {
                     string sn = dt.Rows[i][2].ToString().Trim();
                     Console.WriteLine(sn);
                     if (sn == SheetName + "$")
                     {
                         //判斷工作表是否存在
                         // SheetNameExist = true;
                         break;
                     }
                 }
            */ }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
         }
 
         //在EXCEL中建立一个新表
         private void Create_Table(string Table_Name)
         {
 
             //建立工作表
             OleDbConnection cn = new OleDbConnection(cs);
             try
             {
                 if (cn.State == ConnectionState.Closed) cn.Open();
                 string qs = "CREATE TABLE [" + Table_Name + "] ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
                 //qs = "CREATE TABLE Table_Name ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
                 OleDbCommand cmd = new OleDbCommand(qs, cn);
                 {
                     //新增Excel工作表
                     cmd.ExecuteNonQuery();
                     //增加資料
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
             finally
             {
                 cn.Close();
             }
         }
         private void Btn_Lib_Click(object sender, EventArgs e)
         {
             try
             {
                 ReadByRange();
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
         }
 
         private void button1_Click(object sender, EventArgs e)
         {
             try
             {
                 ReadByDataGridView();
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
 
         }
 
         private void Btn_Add_Click(object sender, EventArgs e)
         {
             try
             {
                 Add_Lines();
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
         }
 
         private void Btn_New_Table_Click(object sender, EventArgs e)
         {
             try
             {
                 Create_Table(this.Txb_Table_Name.Text.Trim());
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
         }
 
         private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
             //打开某程序所用的方法!!打开IE并跳到所指明的网站
             //System.Diagnostics.Process.Start("iexplore.exe", "http://www.dotblogs.com.tw/yc421206/archive/2009/07/08/9255.aspx");
             //第2种用法!!打开电脑设置的默认浏览器并跳转到相关网站
             this.linkLabel1.Links[0].LinkData = "http://www.dotblogs.com.tw/yc421206/archive/2009/07/08/9255.aspx";
             System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
         }
 
         private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
         {
             this.linkLabel2.Links[0].LinkData = "http://blog.csdn.net/yinyaling/article/details/5326582";
             System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
         }
 
         private void button2_Click(object sender, EventArgs e)
         {
             try
             {
                 Search_Tables();
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
         }
     }
 }

以下是界面设计:

posted on 2012-10-20 15:32  逐梦儿  阅读(267)  评论(0)    收藏  举报