线程加委托
- C# code
-
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; using System.Threading; using System.IO; namespace DbTools { internal class DbToolFunc { public delegate void ErrorHandler(string errorMessage); public event ErrorHandler errorMessage; public delegate void DataCompletedHandler(DataSet data); public event DataCompletedHandler dataCompleted; private Thread _threadShow; public DbToolFunc() { } public DbToolFunc(string xlsPathName) { _xlsPathName = xlsPathName; } private string _xlsPathName = null; public string xlsFileName { set { this._xlsPathName = value; } } private DataSet _errordata = null; public DataSet ErrorData { get { return this._errordata; } } private void GetDataProc() { OleDbConnection objConn = null; try { DataSet ds = new DataSet(); if (String.IsNullOrEmpty(_xlsPathName)) { if (this.errorMessage != null) { if (this.errorMessage != null) this.errorMessage("文件名没有指定!"); } return; } if (!File.Exists(_xlsPathName)) { if (this.errorMessage != null) { if (this.errorMessage != null) this.errorMessage("文件不存在!"); } return; } string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + _xlsPathName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'"; objConn = new OleDbConnection(strConn); objConn.Open(); DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); OleDbDataAdapter sqlada = new OleDbDataAdapter(); foreach (DataRow dr in schemaTable.Rows) { string strSql = "Select * From [" + dr[2].ToString().Trim() + "]"; OleDbCommand objCmd = new OleDbCommand(strSql, objConn); sqlada.SelectCommand = objCmd; sqlada.Fill(ds, dr[2].ToString().Trim()); } objConn.Close(); if (this.dataCompleted != null) this.dataCompleted(ds); } catch (Exception ex) { objConn.Close(); if (this.errorMessage != null) this.errorMessage(ex.Message); } } public void GetDataSetFromExcel() { if (this._threadShow != null && this._threadShow.ThreadState == ThreadState.Running) { return; } this._threadShow = new Thread(new ThreadStart(GetDataProc)); this._threadShow.Start(); } }