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()); } } } }
以下是界面设计:

浙公网安备 33010602011771号