110,534
社区成员
发帖
与我相关
我的任务
分享
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();
}
}