.NET 學習

.NET 學習生活感想... 万事成蹉跎..... 贵在坚持 及时整理自己做过和学过的东西

博客园 首页 新随笔 联系 订阅 管理

1.首先用ExcelReader类实现读取Excel数据

2.定义一个泛型方法负责根据不同的BO汇入数据

3.实现代码

  1>ExcelReaer类

代码
/// <summary>
    
/// 操作Excel幫助類
    
/// 2010-08-02
    
/// </summary>
    public class ExcelReader : IDisposable
    {
        
#region Variables
        
private int[] _PKCol;
        
private string _strExcelFilename;
        
private bool _blnMixedData=true;
        
private bool _blnHeaders=false;        
        
private string _strSheetName;
        
private string _strSheetRange;
        
private bool _blnKeepConnectionOpen=false;
        
private OleDbConnection _oleConn; 
        
private OleDbCommand _oleCmdSelect;
        
private OleDbCommand _oleCmdUpdate;
        
#endregion

        
#region properties

        
private string _StrWhere;
        
/// <summary>
        
/// 匯入條件: where 之後條件
        
/// </summary>
        public string StrWhere
        {
            
get
            {
                
return _StrWhere;
            }
            
set
            {
                _StrWhere 
= value;
            }
        } 

        
public int[] PKCols
        {
            
get {return _PKCol;}
            
set {_PKCol=value;}
        }

        
public string ColName(int intCol)
        {
            
string sColName="";
            
if (intCol<26)
                sColName
= Convert.ToString(Convert.ToChar((Convert.ToByte((char'A')+intCol)) );
            
else
            {
                
int intFirst = ((int) intCol / 26);
                
int intSecond = ((int) intCol % 26);
                sColName
= Convert.ToString(Convert.ToByte((char'A')+intFirst);
                sColName 
+= Convert.ToString(Convert.ToByte((char'A')+intSecond);
            }
            
return sColName;
        }

        
public int ColNumber(string strCol)
        {
            strCol 
= strCol.ToUpper(); 
            
int intColNumber=0;
            
if (strCol.Length>1
            {
                intColNumber 
= Convert.ToInt16(Convert.ToByte(strCol[1])-65);  
                intColNumber 
+= Convert.ToInt16(Convert.ToByte(strCol[1])-64)*26
            }
            
else
                intColNumber 
= Convert.ToInt16(Convert.ToByte(strCol[0])-65);  
            
return intColNumber;
        }

        
public String[] GetExcelSheetNames(){
            System.Data.DataTable dt 
= null;
            
try{
                
if (_oleConn ==null) Open();
                
// Get the data table containing the schema
                dt = _oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                
if(dt == null){
                    
return null;
                }
                String[] excelSheets 
= new String[dt.Rows.Count];
                
int i = 0;
                
// Add the sheet name to the string array.
                foreach(DataRow row in dt.Rows){
                    
string strSheetTableName = row["TABLE_NAME"].ToString();
                    excelSheets[i] 
= strSheetTableName.Substring(0,strSheetTableName.Length-1); 
                    i
++;
                }
                
return excelSheets;
            }
            
catch(Exception){
                
return null;
            }
            
finally{
                
// Clean up.
                if(this.KeepConnectionOpen==false){
                    
this.Close();
                }
                
if(dt != null){
                    dt.Dispose();
                    dt
=null;
                }
            }
        }
                                                            
        
public string ExcelFilename
        {
            
get { return _strExcelFilename;}
            
set { _strExcelFilename=value;}
        }
        
public string SheetName
        {
            
get { return _strSheetName;}
            
set { _strSheetName=value;}
        }
        
public string SheetRange
        {
            
get {return _strSheetRange;}
            
set 
            {
                
if (value.IndexOf(":")==-1throw new Exception("Invalid range length"); 
                _strSheetRange
=value;}
        }        
        
public bool KeepConnectionOpen
        {
            
get { return _blnKeepConnectionOpen;}
            
set {_blnKeepConnectionOpen=value;}
        }
        
public bool Headers
        {
            
get { return _blnHeaders;}
            
set { _blnHeaders=value;}
        }
        
public bool MixedData
        {
            
get {return _blnMixedData;}
            
set {_blnMixedData=value;}
        }
        
#endregion

        
#region Methods
        
        
#region Excel Connection
        
private string ExcelConnectionOptions()
        {
            
string strOpts="";
            
if (this.MixedData ==true)
                strOpts 
+= "Imex=2;";
            
if (this.Headers==true)
                strOpts 
+= "HDR=Yes;";
            
else    
                strOpts 
+= "HDR=No;";
            
return strOpts;
        }
        
        
private string ExcelConnection()
        {
            
return
                
@"Provider=Microsoft.Jet.OLEDB.4.0;" + 
                
@"Data Source=" + _strExcelFilename  + ";" + 
                
@"Extended Properties=" + Convert.ToChar(34).ToString() + 
                
@"Excel 8.0;"+ ExcelConnectionOptions() + Convert.ToChar(34).ToString(); 
        }
        
#endregion


        
#region Open / Close
        
public void Open()
        {
            
try
            {
                
if (_oleConn !=null)
                {
                    
if (_oleConn.State==ConnectionState.Open)
                    {
                        _oleConn.Close();
                    }
                    _oleConn
=null;
                }

                
//Server.MapPath("MyWebSite");

                

                
//MapPath("XX");

                
if (System.IO.File.Exists(_strExcelFilename)==false)
                {
                    
throw new Exception("Excel file " + _strExcelFilename +  "could not be found.");
                }
                _oleConn 
= new OleDbConnection(ExcelConnection());  
                _oleConn.Open();                   
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
        }

        
public void Close()
        {
            
if (_oleConn !=null)
            {
                
if (_oleConn.State != ConnectionState.Closed) 
                    _oleConn.Close(); 
                _oleConn.Dispose();
                _oleConn
=null;
            }
        }
        
#endregion

        
#region Command Select
        
private bool SetSheetQuerySelect()
        {
            
try
            {
                
if (_oleConn == null)
                {
                    
throw new Exception("Connection is unassigned or closed."); 
                }

                
if (_strSheetName.Length ==0)
                    
throw new Exception("Sheetname was not assigned."); 

                _oleCmdSelect 
=new OleDbCommand(
                    
@"SELECT * FROM [" 
                    
+ _strSheetName + "$"
                 
                    
+ _strSheetRange
                    
+ "]" + _StrWhere , _oleConn);   
            
                
return true;
            }            
            
catch (Exception ex)
            {
                
throw ex;
            }
            

        }
        
#endregion

        
#region simple utilities
        
private string AddWithComma(string strSource,string strAdd)
        {
            
if (strSource !="") strSource = strSource += "";
            
return strSource + strAdd;
        }

        
private string AddWithAnd(string strSource,string strAdd)
        {
            
if (strSource !="") strSource = strSource += " and ";
            
return strSource + strAdd;
        }
        
#endregion

        
private OleDbDataAdapter SetSheetQueryAdapter(DataTable dt)
        {
            
// Deleting in Excel workbook is not possible
            
//So this command is not defined
            try
            {
                
if (_oleConn == null)
                {
                    
throw new Exception("Connection is unassigned or closed."); 
                }


                
if (_strSheetName.Length ==0)
                    
throw new Exception("Sheetname was not assigned."); 
                
                
if (PKCols == null)
                    
throw new Exception("Cannot update excel sheet with no primarykey set."); 
                
if (PKCols.Length<1
                    
throw new Exception("Cannot update excel sheet with no primarykey set."); 
                    
                OleDbDataAdapter oleda 
= new OleDbDataAdapter(_oleCmdSelect);                 
                
string strUpdate="";
                
string strInsertPar="";
                
string strInsert="";
                
string strWhere="";
                
                
                
for (int iPK=0;iPK<PKCols.Length;iPK++)
                {
                    strWhere 
= AddWithAnd(strWhere,dt.Columns[iPK].ColumnName +  "=?"); 
                }
                strWhere 
=" Where "+strWhere;

                
for (int iCol=0;iCol<dt.Columns.Count;iCol++)
                {
                    strInsert
= AddWithComma(strInsert,dt.Columns[iCol].ColumnName);
                    strInsertPar
= AddWithComma(strInsertPar,"?");
                    strUpdate
= AddWithComma(strUpdate,dt.Columns[iCol].ColumnName)+"=?";
                }

                
string strTable = "["+ this.SheetName + "$" + this.SheetRange + "]";  
                strInsert 
= "INSERT INTO "+ strTable + "(" + strInsert +") Values (" + strInsertPar + ")";
                strUpdate 
= "Update " + strTable + " Set " + strUpdate + strWhere;
                
                
                oleda.InsertCommand 
= new OleDbCommand(strInsert,_oleConn);
                oleda.UpdateCommand 
= new OleDbCommand(strUpdate,_oleConn); 
                OleDbParameter oleParIns 
= null;
                OleDbParameter oleParUpd 
= null;
                
for (int iCol=0;iCol<dt.Columns.Count;iCol++)
                {
                    oleParIns 
= new OleDbParameter("?",dt.Columns[iCol].DataType.ToString());
                    oleParUpd 
= new OleDbParameter("?",dt.Columns[iCol].DataType.ToString());
                    oleParIns.SourceColumn 
=dt.Columns[iCol].ColumnName;
                    oleParUpd.SourceColumn 
=dt.Columns[iCol].ColumnName;
                    oleda.InsertCommand.Parameters.Add(oleParIns);
                    oleda.UpdateCommand.Parameters.Add(oleParUpd);
                    oleParIns
=null;
                    oleParUpd
=null;
                }

                
for (int iPK=0;iPK<PKCols.Length;iPK++)
                {
                    oleParUpd 
= new OleDbParameter("?",dt.Columns[iPK].DataType.ToString());
                    oleParUpd.SourceColumn 
=dt.Columns[iPK].ColumnName;
                    oleParUpd.SourceVersion 
= DataRowVersion.Original;
                    oleda.UpdateCommand.Parameters.Add(oleParUpd);
                }
                
return oleda;
            }            
            
catch (Exception ex)
            {
                
throw ex;
            }
            
        }

        
#region command Singe Value Update
        
private bool SetSheetQuerySingelValUpdate(string strVal)
        {
            
try
            {
                
if (_oleConn == null)
                {
                    
throw new Exception("Connection is unassigned or closed."); 
                }

                
if (_strSheetName.Length ==0)
                    
throw new Exception("Sheetname was not assigned."); 

                _oleCmdUpdate 
=new OleDbCommand(
                    
@" Update [" 
                    
+ _strSheetName 
                    
+ "$" + _strSheetRange
                    
+ "] set F1=" + strVal, _oleConn);   
                
return true;
            }            
            
catch (Exception ex)
            {
                
throw ex;
            }
            

        }
        
#endregion

        

        
public void SetPrimaryKey(int intCol)
        {
            _PKCol 
= new int[1] { intCol };            
        }

        

        
private void SetPrimaryKey(DataTable dt)
        {
            
try
            {
                
if (PKCols!=null)
                {
                    
//set the primary key
                    if (PKCols.Length>0)
                    {
                        DataColumn[] dc;
                        dc 
= new DataColumn[PKCols.Length];
                        
for (int i=0;i<PKCols.Length;i++)
                        {
                            dc[i] 
=dt.Columns[PKCols[i]]; 
                        }
                
                        
                        dt.PrimaryKey 
= dc;

                    }
                }
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
        }

         
public DataTable GetTable()
        {
            
return GetTable("ExcelTable");
        }
        
public DataTable GetTable(string strTableName)
        
        {
            
try
            {
                
//Open and query
                if (_oleConn ==null) Open();
                
if (_oleConn.State != ConnectionState.Open)
                    
throw new Exception("Connection cannot open error."); 
                
if (SetSheetQuerySelect()==falsereturn null;

                
//Fill table
                OleDbDataAdapter oleAdapter = new OleDbDataAdapter();   
                oleAdapter.SelectCommand 
= _oleCmdSelect;   
                DataTable dt 
= new DataTable(strTableName+"1");
                oleAdapter.FillSchema(dt, SchemaType.Source);  
                oleAdapter.Fill(dt);
                
if (this.Headers ==false)
                {
                    
if (_strSheetRange.IndexOf(":")>0)
                    {
                        
string FirstCol = _strSheetRange.Substring(0,_strSheetRange.IndexOf(":")-1); 
                        
int intCol = this.ColNumber(FirstCol);
                        
for (int intI=0;intI<dt.Columns.Count;intI++)
                        {
                            dt.Columns[intI].Caption 
=ColName(intCol+intI);
                        }
                    }
                }
                SetPrimaryKey(dt);
                
//Cannot delete rows in Excel workbook
                dt.DefaultView.AllowDelete =false;
            
                
//Clean up
                _oleCmdSelect.Dispose();
                _oleCmdSelect
=null;
                oleAdapter.Dispose();
                oleAdapter
=null;
                
if (KeepConnectionOpen==false) Close();
                
return dt;            

            }
            
catch (Exception ex)
            {
                
throw ex;
            }
        }

        
private void CheckPKExists(DataTable dt)
        {
            
if (dt.PrimaryKey.Length==0
                
if (this.PKCols !=null)
                {
                    SetPrimaryKey(dt);
                }
                
else
                    
throw new Exception("Provide an primary key to the datatable"); 
        }
        
public DataTable SetTable(DataTable dt)
        {
            
try
            {
                DataTable dtChanges 
= dt.GetChanges();
                
if (dtChanges == nullthrow new Exception("There are no changes to be saved!"); 
                CheckPKExists(dt);
                
//Open and query
                if (_oleConn ==null) Open();
                
if (_oleConn.State != ConnectionState.Open)
                    
throw new Exception("Connection cannot open error."); 
                
if (SetSheetQuerySelect()==falsereturn null;

                
//Fill table
                OleDbDataAdapter oleAdapter = SetSheetQueryAdapter(dtChanges);        
                
                oleAdapter.Update(dtChanges); 
                
//Clean up
                _oleCmdSelect.Dispose();
                _oleCmdSelect
=null;
                oleAdapter.Dispose();
                oleAdapter
=null;
                
if (KeepConnectionOpen==false) Close();
                
return dt;            
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
        }

        
#region Get/Set Single Value

        
public void SetSingleCellRange(string strCell)
        {
            _strSheetRange 
= strCell + ":" + strCell;
        }

        
public object GetValue(string strCell)
        {
            SetSingleCellRange(strCell);
            
object objValue=null;
            
//Open and query
            if (_oleConn ==null) Open();
            
if (_oleConn.State != ConnectionState.Open)
                
throw new Exception("Connection is not open error."); 

            
if (SetSheetQuerySelect()==falsereturn null;
            objValue 
= _oleCmdSelect.ExecuteScalar();

            _oleCmdSelect.Dispose();
            _oleCmdSelect
=null;    
            
if (KeepConnectionOpen==false) Close();
            
return objValue;
        }

        
public void SetValue(string strCell,object objValue)
        {
            
            
try
            {

                SetSingleCellRange(strCell);
                
//Open and query
                if (_oleConn ==null) Open();
                
if (_oleConn.State != ConnectionState.Open)
                    
throw new Exception("Connection is not open error."); 
                
                
if (SetSheetQuerySingelValUpdate(objValue.ToString())==falsereturn;
                objValue 
= _oleCmdUpdate.ExecuteNonQuery(); 

                _oleCmdUpdate.Dispose();
                _oleCmdUpdate
=null;    
                
if (KeepConnectionOpen==false) Close();
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
            
finally
            {
                
if (_oleCmdUpdate != null)
                {
                    _oleCmdUpdate.Dispose();
                    _oleCmdUpdate
=null;
                }
            }
            
        }
        
#endregion
        

        
#endregion

        
#region Dispose / Destructor
        
public     void Dispose()
        {
            
if (_oleConn !=null)
            {
                _oleConn.Dispose();
                _oleConn
=null;
            }
            
if (_oleCmdSelect!=null)
            {
                _oleCmdSelect.Dispose(); 
                    _oleCmdSelect
=null;
            }
            
// Dispose of remaining objects.
        }
#endregion
    
        
#region CTOR
        
public ExcelReader()
        {
            
//
            
// TODO: Add constructor logic here
            
//
        }
        
/// <summary>
        
/// 默認有表頭
        
/// </summary>
        
/// <param name="filName"></param>
        
/// <param name="sheetName"></param>
        public ExcelReader(string fileName, string sheetName)
        {
            
if (string.IsNullOrEmpty(fileName) == true)
            { 
throw new ArgumentNullException("文件名不能為空!"); }
            
if (string.IsNullOrEmpty(sheetName) == true) { throw new ArgumentNullException("Excel文件中Sheet Name不能為空!");
            }
            
this.ExcelFilename = fileName;
            
this.SheetName = sheetName;
            
//this.Headers = true;
        }
        
/// <summary>
        
/// 初始化
        
/// </summary>
        
/// <param name="filName">表名稱和路徑</param>
        
/// <param name="sheetName">Excel中Sheet name</param>
        
/// <param name="isHeaders">是否有表頭,默認是false</param>
        public ExcelReader(string fileName,string sheetName,bool isHeaders)
        {
            
if (string.IsNullOrEmpty(fileName) == true)
            { 
throw new ArgumentNullException("文件名不能為空!"); }
            
if (string.IsNullOrEmpty(sheetName) == true)
            {
                
throw new ArgumentNullException("Excel文件中Sheet Name不能為空!");
            }
            
            
this.ExcelFilename = fileName;
            
this.SheetName     = sheetName;
            
this.Headers       = isHeaders;
        }
        
#endregion
    }

 

     2>汇入数据的业务逻辑类

 

代码
 /// <summary>
    
/// 匯入數據業務邏輯
    
/// 2010-08-01
    
/// </summary>
    public class ImportDataLogic
    {
       
       
#region 匯入MRF單
        
        
public static ImportDataDelegate<MP_MRF> CreateMP_MRFImportDataDelegate()
        {
            
return delegate (Session session, object [] args) 
            {
                DataRow row;
                User currentUser;
                Init(session, args, 
out row, out currentUser);

                MP_MRF mrf 
= new MP_MRF(session);
                mrf.OrderNO 
= row["PRODUCTIONNO"].ToString();
                mrf.Plnt 
= row["PLANT"].ToString();
                mrf.Material 
= row["MATERIAL"].ToString();
                mrf.Description 
= row["MATERIAL_DESCRIPTION"].ToString();
                mrf.Order_Qty 
= int.Parse(row["ORDER_QTY"].ToString());
                mrf.QtyOfOuter 
= int.Parse(row["QTY/OUTER"].ToString());
                mrf.Unit 
= row["BASE_UNIT"].ToString();
                mrf.COMPONENT 
= row["COMPONENT"].ToString();
                mrf.COMPONENT_DESCRIPTION 
= row["COMPONENT_DESCRIPTIO"].ToString();
                mrf.COMPONENT_QTY 
= int.Parse(row["COMPONENT_QTY"].ToString());
                mrf.COMPONENT_SCRAP 
= decimal.Parse(row["COMPONENT_SCRAP"].ToString());
                mrf.COMPONT_UNIT 
= row["COMPONT_UNIT"].ToString();
                mrf.Start_Date 
= DateTime.Now;
                mrf.Finish_Date 
=DateTime.Now;
                mrf.Write_Date 
= DateTime.Now;
                mrf.Create_Date 
= DateTime.Now;
                mrf.Create_Uid 
= currentUser;
                mrf.Write_Uid 
= currentUser; //mrf.Save();
                
                
return mrf;
            };
        }

        
public static ValidateDataDelegate<MP_MRF> CreateMP_MRFValidateDataDelegate()
        {
            
return (mrf, args) =>
            {
                
if(mrf != null)
                   
return mrf.Plnt.Length <= 4 ;//在此写入验证逻辑
                return false;
            };
        }
        
#endregion
        
#region Mothed
       
     

        
/// <summary>
        
/// 初始化匯入對象帶masterObject
        
/// </summary>
        
/// <param name="session"></param>
        
/// <param name="args"></param>
        
/// <param name="masterObject"></param>
        
/// <param name="currentUser"></param>
        
/// <param name="row"></param>
        private static void Init(Session session, object[] args, out object masterObject, out User currentUser, out DataRow row)
        {
            masterObject 
= null;
            currentUser 
= null;
            row 
= null;
            
if (args != null)
            {
                masterObject 
= args[0];
                row 
= (DataRow)args[1];
                currentUser 
= session.GetObjectByKey<User>(SecuritySystem.CurrentUserId);
            }
            
else { throw new ArgumentNullException("args"); }
        }
        
/// <summary>
        
/// 初始化匯入對象
        
/// </summary>
        
/// <param name="session"></param>
        
/// <param name="args"></param>
        
/// <param name="row"></param>
        
/// <param name="currentUser"></param>
        private static void Init(Session session, object[] args, out DataRow row, out User currentUser)
        {
            
if (args == null)
            { 
throw new ArgumentNullException("args"); }
            
//object masterObject = args[0];
            row = (DataRow)args[1];
            currentUser 
= session.GetObjectByKey<User>(SecuritySystem.CurrentUserId);
        }
        
        
/// <summary>
        
/// 將對象轉換為字符且截取兩端空格
        
/// </summary>
        
/// <param name="obj"></param>
        
/// <returns></returns>
        private static  string ToStingTrim(object obj)
        {
            
if (obj == null)
            { 
return ""; }
            
return obj.ToString ().Trim();
        }
        
/// <summary>
        
/// 
        
/// </summary>
        
/// <param name="obj"></param>
        
/// <returns></returns>
        private static int ToInt(object obj)
        {
            
if (obj == null) { 
                
//throw new  ArgumentNullException("Object");
                return 0;
            }
            
return int.Parse(obj.ToString());
        } 
        
#endregion
    }

 

       3>汇入数据管理类

   

代码
 /// <summary>
    
/// 匯入數據代理
    
/// </summary>
    
/// <typeparam name="T"></typeparam>
    
/// <param name="sessin"></param>
    
/// <param name="args"></param>
    
/// <returns></returns>
    public delegate  T ImportDataDelegate<T>(Session sessin, params object[] args);

    
/// <summary>
    
/// 驗證要匯入數據代理
    
/// </summary>
    
/// <typeparam name="T"></typeparam>
    
/// <param name="data"></param>
    
/// <param name="args"></param>
    
/// <returns></returns>
    public delegate bool ValidateDataDelegate<T>(T data, params object[] args);

    
/// <summary>
    
/// 
    
/// </summary>
    public class ImportDataManager
    {
        
/// <summary>
        
/// 匯入對象到ListView
        
/// </summary>
        
/// <typeparam name="T"></typeparam>
        
/// <param name="dt">DataTable</param>
        
/// <param name="importDataDelegate"></param>
        
/// <param name="customValidateDataDelegate"></param>
        
/// <param name="listView"></param>
        
/// <returns></returns>
        public static int ImportData<T>(DataTable dt,ImportDataDelegate<T> importDataDelegate, ValidateDataDelegate<T> customValidateDataDelegate, ListView listView) where T : IXPSimpleObject
        {
            
if (listView == null)
            {
                
throw new ArgumentNullException("listView");
            }
            UnitOfWork uow 
= null;
            
int countOK = 0;
            
try
            {
                
if (listView.ObjectSpace == null)
                {
                    
throw new ArgumentNullException("listView.ObjecSpace");
                }
                uow 
= new UnitOfWork(listView.ObjectSpace.Session.DataLayer);//
                using (NestedUnitOfWork nestedUOW = uow.BeginNestedUnitOfWork()) {
                    PropertyCollectionSource pcs 
= listView.CollectionSource as PropertyCollectionSource;
                    
object masterObject = pcs != null ? nestedUOW.GetObjectByKey(pcs.MasterObjectType, nestedUOW.GetKeyValue(pcs.MasterObject)) : null;
                    
foreach (DataRow row in dt.Rows){
                         T obj 
= importDataDelegate(nestedUOW, masterObject, row);
                        
#region Validate Object
                         
if (obj != null)
                         {
                             
bool isValid = false;
                             
try
                             {
                                 RuleSetValidationResult validationResult 
= Validator.RuleSet.ValidateTarget(obj,new ContextIdentifiers(DefaultContexts.Save.ToString()));
                                 isValid 
= validationResult.State != ValidationState.Invalid && (customValidateDataDelegate != null ? customValidateDataDelegate(obj, masterObject) : true);
                                 
if (isValid)
                                 {
                                     nestedUOW.CommitChanges();
                                 }
                             }
                             
catch (Exception )
                             {
                                 isValid 
= false;
                             }
                             
finally
                             {
                                 
if (isValid)
                                 {
                                     countOK
++;
                                 }
                             }
                         }
                        
#endregion
                    }
                }
                uow.CommitChanges();
            }
            
catch (Exception commitException){
                
try {
                    uow.RollbackTransaction();
                }
                
catch (Exception rollBackException){
                    
throw new Exception(String.Format("異常類型 {0} 撤銷匯入數據 {1} type.\n錯誤信息:{2}\n堆棧跟蹤:{3}", rollBackException.GetType(), typeof(T), rollBackException.Message, rollBackException.StackTrace), rollBackException);
                }
                
throw new UserFriendlyException(new Exception(String.Format("匯入失敗!\n異常類型 {0} 當匯入數據 {1} 類型.\n錯誤信息 = {2}\n堆棧跟蹤:{3}\n沒有記錄匯入.", commitException.GetType(), typeof(T), commitException.Message, commitException.StackTrace)));
            }
            
finally{
                uow.Dispose();
                uow 
= null;
            }
            listView.ObjectSpace.Refresh();
            
return countOK;
        }

        
public static void ImportData<T>(DataTable dt,ImportDataDelegate<T> importDataDelegate, ValidateDataDelegate<T> customValidateDataDelegate, ListView listView,bool notifyAboutResults)  where  T : IXPSimpleObject
        {
            
int countOK = ImportData<T>(dt,importDataDelegate,customValidateDataDelegate,listView);
            
if(notifyAboutResults == true)
            {
                
throw new UserFriendlyException(new Exception(string.Format("已經匯入{0}條記錄!", countOK)));
            }
        }
    }

4.调用方法:

     

代码
string fileName = "";
string sheetName = "Sheet1";
bool isHeader = true;
ExcelReader er 
= null;
DataTable dt 
= null;
OpenFileDialog ofd 
= new OpenFileDialog();
ofd.Filter 
= "Excel 文件|*.xls";
ofd.ShowDialog();
fileName 
= ofd.FileName;
if (string.IsNullOrEmpty(fileName) == truereturn;
er 
= new ExcelReader(fileName, sheetName, isHeader);
er.MixedData 
= true;
er.KeepConnectionOpen 
= true;

dt 
= er.GetTable();
ImportDataManager.ImportData
<WH_IL>(dt, ImportDataLogic.CreateDummyWH_ILImportDataDelegate(),
                            ImportDataLogic.CreateWH_ILValidateDataDelegate(), listView, 
true);

 

 

 

posted on 2010-08-09 16:05  Tonyyang  阅读(903)  评论(2编辑  收藏  举报
欢迎转载,转载请注明出处:http://www.cnblogs.com/Tonyyang/