天天看點

WinForm通過Excel作為中間媒體實作導入導出小工具

在實際開發中,為了保護内網系統,有些系統的内外網是分開的,會遇到内外網互動的情況,如何實作内外網互動的,很多情況是通過内外網擺渡機、光閘、或者網閘去共享資料,但是我們現在沒有這些工具,需要實作内外網資料互動,現在給出一種通過Excel表的方式去互動資料。

WinForm背景功能代碼:

public partial class DataOperatingInterface : Form

    {

        private static readonly string strDataSource = "Wwsj-Excel";

        public DataOperatingInterface()

        {

            InitializeComponent();

        }

        private void btnExport_Click(object sender, EventArgs e)

        {

            try

            {

                #region 代碼

                DialogResult exportDir = fbdExport.ShowDialog();//是調用檔案浏覽器控件;         

                if (exportDir == System.Windows.Forms.DialogResult.OK)//是判斷檔案浏覽器控件是否傳回ok,即使用者是否确定選擇。如果确定選擇,則彈出使用者在檔案浏覽器中選擇的路徑:

                {

           //MessageBox.Show(fbdExport.SelectedPath);//展示視窗

                    #region ①資料庫的連接配接

                    GS.DataBase.IDbAccess iDb_WwsjNqzj = GS.DataBase.DbAccessFactory.CreateInstance(ConfigurationManager.AppSettings["Conn_WwsjNqzj"], ConfigurationManager.AppSettings["Dbtype_WwsjNqzj"]);                   

                    #endregion

                    #region ②解析資料庫

                    EstateMonth em = new EstateMonth();

                    string strStartTime = string.Empty;

                    string strEndTime = string.Empty;

                    Filter exportFilter = new Filter();

                    if (string.IsNullOrEmpty(dtpStartTime.Text))

                    {

                        MessageBox.Show("請選擇開始時間!");

                        return;

                    }

                    if (string.IsNullOrEmpty(dtpEndTime.Text))

                    {

                        MessageBox.Show("請選擇截止時間!");

                        return;

                    }

                    strStartTime = dtpStartTime.Text;

                    strEndTime = dtpEndTime.Text;

                    exportFilter.StartTime = strStartTime;

                    exportFilter.EndTime = strEndTime;

                    exportFilter.Path = fbdExport.SelectedPath;

                    em.ExportUnitRegData(iDb_WwsjNqzj, exportFilter, strDataSource);

                    #endregion

                    MessageBox.Show("資料生成成功!路徑:【" + fbdExport.SelectedPath + "】");

                }

                else

                {

                    MessageBox.Show("請選擇導出的路徑!");

                }

                #endregion

            }

            catch (Exception ex)

            {

                MessageBox.Show("異常:" + ex.ToString());

            }

        }

        private void btnImport_Click(object sender, EventArgs e)

        {

            try

            {

                #region 打開檔案路徑進行操作

                DialogResult importDir = fbdImport.ShowDialog();//是調用檔案浏覽器控件;         

                if (importDir == System.Windows.Forms.DialogResult.OK)//是判斷檔案浏覽器控件是否傳回ok,即使用者是否确定選擇。如果确定選擇,則彈出使用者在檔案浏覽器中選擇的路徑:

                {

                    //MessageBox.Show(fbdImport.SelectedPath);//展示視窗

                    #region ①資料庫的連接配接

                    GS.DataBase.IDbAccess iDb_WwsjWqzj = GS.DataBase.DbAccessFactory.CreateInstance(ConfigurationManager.AppSettings["Conn_WwsjWqzj"], ConfigurationManager.AppSettings["Dbtype_WwsjWqzj"]);

                    #endregion

                    string ImportPath = fbdImport.SelectedPath;

                    EstateMonth emImport = new EstateMonth();

                    Filter importFilter = new Filter();

                    importFilter.Path = fbdImport.SelectedPath;

                    emImport.ImportUnitRegData(iDb_WwsjWqzj, importFilter, strDataSource);

                    MessageBox.Show("資料導入成功!");

                }

                else

                {

                    MessageBox.Show("請選擇導入的路徑");

                }

                #endregion

            }

            catch (Exception ex)

            {

                MessageBox.Show("異常:" + ex.ToString());

            }

            #region 打開檔案進行操作

            初始化一個OpenFileDialog類

            //OpenFileDialog fileDialog = new OpenFileDialog();

            如果我們要為彈出的選擇框中過濾檔案類型,可以設定OpenFileDialog的Filter屬性。比如我們隻允許使用者選擇.xls檔案,可以作如下設定:

            //fileDialog.Filter = "(*.xls)|*.xls";

            判斷使用者是否正确的選擇了檔案

            //if (fileDialog.ShowDialog() == DialogResult.OK)

            //{

            //    //擷取使用者選擇檔案的字尾名

            //    string extension = Path.GetExtension(fileDialog.FileName);

            //    //聲明允許的字尾名

            //    string[] str = new string[] { ".gif", ".jpge", ".jpg" };

            //    if (!((IList)str).Contains(extension))

            //    {

            //        MessageBox.Show("僅能上傳gif,jpge,jpg格式的圖檔!");

            //    }

            //    else

            //    {

            //        //擷取使用者選擇的檔案,并判斷檔案大小不能超過20K,fileInfo.Length是以位元組為機關的

            //        FileInfo fileInfo = new FileInfo(fileDialog.FileName);

            //        if (fileInfo.Length > 20480)

            //        {

            //            MessageBox.Show("上傳的圖檔不能大于20K");

            //        }

            //        else

            //        {

            //            //在這裡就可以寫擷取到正确檔案後的代碼了

            //        }

            //    }

            //}

            #endregion

        }

    }

Common類庫:

Model:

public class Filter

    {

        /// <summary>

        /// 開始時間

        /// </summary>

        public string StartTime { get; set; }

        /// <summary>

        /// 截至時間

        /// </summary>

        public string EndTime { get; set; }

        /// <summary>

        /// 路徑

        /// </summary>

        public string Path { get; set; }

    }

EstateMonth類:

public class EstateMonth

    {

        #region 推送資料部分

        /// <summary>

        /// 内網WWDATA向外網WWSJ推送資料

        /// </summary>

        /// <param name="iDb">資料庫源(查詢)</param>

        /// <param name="strStartTime">開始時間</param>

        /// <param name="strEndTime">結束時間</param>

        /// <param name="strDataSource">資料來源:标志</param>

        public void ExportUnitRegData(GS.DataBase.IDbAccess iDb, Filter modelFilter, string strDataSource)

        {

            string strLogCaseNo = String.Empty;

            string strLogYWH = String.Empty;

            try

            {

                string strSql = String.Empty;

                DataSet dsSqlList = new DataSet();

                List<string> lstSqlKey = new List<string>();

                DataSet dsData = new DataSet();

                DataSet dsSendData = new DataSet();

                Hashtable ht = new Hashtable();

                List<string> lstCompara = new List<string>();

                DataSet tempData = new DataSet();//推送查詢資料

                #region 1.查詢有哪些表的資料需要推送以及其查詢方式

                strSql = string.Format("select SQL,TARGETKEY,TARGETTABLE,DATAIN from ESTATEINTERACTIVE where DATAIN in ('77')");

                dsSqlList = iDb.GetDataSet(strSql);

                foreach (DataRow drSqlList in dsSqlList.Tables[0].Rows)

                {

                    strSql = drSqlList["SQL"].ToString();

                    string strTargeKeg = drSqlList["TARGETKEY"].ToString();

                    string strTargeTABLE = drSqlList["TARGETTABLE"].ToString();

                    string strDataIn = drSqlList["DATAIN"].ToString();

                    ///SQL TARGETKEYTARGETTABLE

                    ///select * from BDC_BDCDJ where 業務号='#業務号#'業務号 BDC_BDCDJ

                    lstSqlKey.Add(strSql + "," + strTargeKeg + "," + strTargeTABLE + "," + strDataIn);//

                    string strColumn = string.Empty;

                    #region 判斷Where後面的條件strColumn

                    if (JudgeHelper.HasChinese(strTargeKeg))

                    {

                        strColumn = "推送日期";

                    }

                    else

                    {

                        strColumn = "TSRQ";

                    }

               #endregion

                    string strExcelSql = "select * from " + strTargeTABLE + " Where 1=1 ";

                    if (iDb.DataBaseType.ToString() == "ORACLE")

               {

       if (!string.IsNullOrEmpty(modelFilter.StartTime)) {

                            strExcelSql += " and " + strColumn + ">=to_date('" + modelFilter.StartTime + "','yyyy-mm-dd hh24:mi:ss') ";

                            //strExcelSql += " and " + strColumn + ">=to_date('" + modelFilter.StartTime + "','yyyy-mm-dd hh24:mi:ss') ";

       }

       if (!string.IsNullOrEmpty(modelFilter.EndTime)) {

       strExcelSql += " and " + strColumn + "<=to_date('" + modelFilter.EndTime + "','yyyy-mm-dd hh24:mi:ss') ";

                            //strExcelSql += " and " + strColumn + "<=to_date('" + modelFilter.EndTime + " 23:59:59" + "','yyyy-mm-dd hh24:mi:ss') ";

       }

               }

                    else if (iDb.DataBaseType.ToString() == "SQLSERVER")

               {

                        if (!string.IsNullOrEmpty(modelFilter.StartTime)){

                            strExcelSql += " and " + strColumn + ">='" + modelFilter.StartTime + "'";

                        }

                        if (!string.IsNullOrEmpty(modelFilter.EndTime)){

                            strExcelSql += " and " + strColumn + "<='" + modelFilter.EndTime + "'";

                            //strExcelSql += " and " + strColumn + "<='" + modelFilter.EndTime + " 23:59:59" + "'";

                        }

               }

                    dsData = iDb.GetDataSet(strExcelSql);

                    ExcelHelper.GetExcelByDataSet(iDb, dsData, strTargeKeg, strTargeTABLE, modelFilter.Path, strDataSource);

                }

                #endregion

            }

            catch (Exception ee)

            {

                Log.SaveLog(iDb, ee.ToString(), "SendUnitRegData", "SendUnitRegData", "Wwsj-Excel", 1, strDataSource);

            }

        }

        /// <summary>

        /// 從指定檔案夾路徑(Path)選擇Excel表導入制定資料庫(iDb)

        /// </summary>

        /// <param name="iDb">目标外網中間庫</param>

        /// <param name="modelFilter"></param>

        /// <param name="strDataSource"></param>

        public void ImportUnitRegData(GS.DataBase.IDbAccess iDb, Filter modelFilter, string strDataSource)

        {

            string strLogCaseNo = String.Empty;

            string strLogYWH = String.Empty;

            try

            {

                string strSql = String.Empty;

                DataSet dsSqlList = new DataSet();

                List<string> lstSqlKey = new List<string>();

                DataSet dsData = new DataSet();

                DataSet dsSendData = new DataSet();

                Hashtable ht = new Hashtable();

                DataSet tempData = new DataSet();//推送查詢資料

                #region 1.查詢有哪些表的資料需要推送以及其查詢方式

                strSql = string.Format("select SQL,TARGETKEY,TARGETTABLE,DATAIN from ESTATEINTERACTIVE where DATAIN in ('77')");

                dsSqlList = iDb.GetDataSet(strSql);

                foreach (DataRow drSqlList in dsSqlList.Tables[0].Rows)

                {

                    strSql = drSqlList["SQL"].ToString();

                    string strTargeKeg = drSqlList["TARGETKEY"].ToString();

                    string strTargeTABLE = drSqlList["TARGETTABLE"].ToString();

                    string strDataIn = drSqlList["DATAIN"].ToString();

                    lstSqlKey.Add(strSql + "," + strTargeKeg + "," + strTargeTABLE + "," + strDataIn);//

                    string strColumn = string.Empty;

                    ExcelHelper.GetExcelDataCommon(iDb, iDb, strTargeTABLE, modelFilter.Path, strDataSource);

                }

                #endregion

            }

            catch (Exception ee)

            {

                Log.SaveLog(iDb, ee.ToString(), "ImportUnitRegData", "ImportUnitRegData", "Wwsj-Excel", 1, strDataSource);

            }

        }

        /// <summary>

        /// WFPROCESSGLOB/WFCASEINF/WFPROCESS 根據受理編号CASENO發送資料 DataIn=14

        /// </summary>

        /// <param name="iDb">業務庫(源)</param>

        /// <param name="iDb_OL">前置機(目标庫)</param>

        /// <param name="ds_List">根據受理編号擷取對應表資料集合</param>

        /// <param name="strTargeTable">儲存的目标表</param>

        /// <param name="strCaseNo">受理編号</param>

        public void SendWwsjDataByCaseNo(GS.DataBase.IDbAccess iDb, GS.DataBase.IDbAccess iDb_OL, DataSet ds_List, string strTargeTable, string strTargeKeg, string strCaseNo, string strYwh, string strDataSource, List<string> lstCompare)

        {

            try

            {

                #region 表進行循環

                foreach (DataRow row_st in ds_List.Tables[0].Rows)//周遊與該受理編号有關的資料資訊

                {

                    Hashtable ht = new Hashtable();

                    foreach (DataColumn col_st in ds_List.Tables[0].Columns)

                    {

                        if (!string.IsNullOrEmpty(row_st[col_st].ToString()))

                        {

                            ht.Add(col_st.ColumnName, row_st[col_st]);

                        }

                    }

                    #region 判斷字段是否為中文"推送日期"并作處理,以表的第二列為準

                    if (JudgeHelper.HasChinese(ds_List.Tables[0].Columns[1].ColumnName))

                    {

                        if (ht.ContainsKey("推送日期"))

                        {

                            ht.Remove("推送日期");//删除原來的

                            ht.Add("推送日期", DateTime.Now.ToString());//添加個新的(可能存在像擺渡機一樣,存在兩次推送,中間表已存在"TSRQ")

                        }

                        else

                        {

                            ht.Add("推送日期", DateTime.Now.ToString());//添加個新的

                        }

                    }

                    else

                    {

                        if (ht.ContainsKey("TSRQ"))

                        {

                            ht.Remove("TSRQ");//删除原來的

                            ht.Add("TSRQ", DateTime.Now.ToString());//添加個新的(可能存在像擺渡機一樣,存在兩次推送,中間表已存在"TSRQ")

                        }

                        else

                        {

                            ht.Add("TSRQ", DateTime.Now.ToString());//添加個新的

                        }

                    }

                    #endregion

                    #region 儲存字段主鍵做處理--關鍵字段

                    if (strTargeTable == "WFPROCESSGLOB" || strTargeTable == "WFPROCESS")

                    {

                        iDb_OL.SaveData(strTargeTable, ht, "PID");

                    }

                    else if (strTargeTable == "WFCASEINF")

                    {

                        iDb_OL.SaveData(strTargeTable, ht, "CID");

                    }

                    else if (strTargeTable == "BDC_QLR")

                    {

                        iDb_OL.SaveData(strTargeTable, ht, "權利人ID");

                    }

                    else//DATAIN=12; //BDC_WWSH;

                    {

                        iDb_OL.SaveData(strTargeTable, ht, strTargeKeg);

                    }

                    #endregion

                    #region 删除表已推送的資料,但是會有修改的資料,再次推送的時候需要删除以前推送的記錄

                    if (!lstCompare.Contains(strCaseNo))

                    {

                        //DeleteOLData(iDb, iDb_OL, strYwh);

                        lstCompare.Add(strCaseNo);

                    }

                    #endregion

                }

                #endregion

            }

            catch (Exception e)

            {

                Log.SaveLog(iDb, e.ToString(), "SendWwsjDataByCaseNo", "SendWwsjDataByCaseNo", strCaseNo + "|" + strYwh, 1, strDataSource);

            }

        }

        #endregion

    }

Excel表類:

using NPOI.HSSF.UserModel;

using NPOI.SS.UserModel;

using NPOI.XSSF.UserModel;

using System;

using System.Collections;

using System.Collections.Generic;

using System.Data;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Common

{

    public class ExcelHelper

    {

        /// <summary>

        /// 把DataSet轉為Excel

        /// </summary>

        /// <param name="ds">資料集合</param>

        /// <param name="sheetKeys">腳本關鍵字</param>

        /// <param name="sheetName">表名</param>

        /// <param name="sPath">生成路徑: 檔案(sheetName$sheetKeys)</param>

        public static void GetExcelByDataSet(GS.DataBase.IDbAccess iDb_Log, DataSet ds, string sheetKeys, string sheetName, string sPath, string strDataSource)

        {

            try

            {

                IWorkbook fileWorkbook = new HSSFWorkbook();//一個dataset對應一個WookBook

                foreach (DataTable dt in ds.Tables)

                {

                    ISheet sheet = fileWorkbook.CreateSheet(sheetName + "$" + sheetKeys);//sheet頁名為 表名+$+關鍵字 如 bdc_djzb$業務号

                    #region 表頭

                    IRow row = sheet.CreateRow(0);

                    for (int i = 0; i < dt.Columns.Count; i++)

                    {

                        ICell cell = row.CreateCell(i);

                        cell.SetCellValue(dt.Columns[i].ColumnName);

                    }

                    #endregion

                    #region 資料

                    for (int i = 0; i < dt.Rows.Count; i++)

                    {

                        IRow row1 = sheet.CreateRow(i + 1);

                        for (int j = 0; j < dt.Columns.Count; j++)

                        {

                            ICell cell = row1.CreateCell(j);

                            cell.SetCellValue(dt.Rows[i][j].ToString());

                        }

                    }

                    #endregion

                }

                #region 轉為位元組數組

                MemoryStream stream = new MemoryStream();

                fileWorkbook.Write(stream);

                var buf = stream.ToArray();

                if (!System.IO.Directory.Exists(sPath))

                {

                    System.IO.Directory.CreateDirectory(sPath);

                }

                #endregion

                #region 根據檔案版本設定EXCEL名字

                //DirectoryInfo DireInfo = new DirectoryInfo(sPath);

                string[] fileList = Directory.GetFiles(sPath, string.Format(@"{0}*", sheetName));

                int count = Convert.ToInt32(fileList.Length) + 1;

                sPath = System.IO.Path.Combine(sPath, string.Format("{0}${1}.xls", sheetName, count));

                //儲存為Excel檔案

                using (FileStream fs = new FileStream(sPath, FileMode.OpenOrCreate, FileAccess.Write))

                {

                    fs.Write(buf, 0, buf.Length);

                    fs.Flush();

                }

                #endregion

            }

            catch (Exception ex)

            {

                Log.SaveLog(iDb_Log, ex.ToString(), "GetExcelByDataSet", "GetExcelByDataSet", "Wwsj-Excel", 1, strDataSource);

                throw;

            }

        }

        /// <summary>

        /// 擷取最新的EXCEL檔案

        /// </summary>

        /// <param name="direPath"></param>

        /// <param name="patten"></param>

        /// <returns></returns>

        public static FileInfo GetLastExcel(string direPath, string patten)

        {

            DirectoryInfo direInfo = new DirectoryInfo(direPath);

            FileInfo[] fileList = direInfo.GetFiles(patten);

            List<FileInfo> list = new List<FileInfo>(fileList);

            list.Sort(new Comparison<FileInfo>(delegate(FileInfo a, FileInfo b)

            {

                return b.CreationTime.CompareTo(a.CreationTime);

            }));

            if (list.Count > 0)

            {

                return list[0];

            }

            return null;

        }

        //将EXCEL 檔案資料存入資料庫

        public static void ExcelToDataBase(GS.DataBase.IDbAccess iDb, GS.DataBase.IDbAccess iDb_OL, FileInfo fileLast, string strDataSource)

        {

            if (fileLast == null)

            {

                return;

            }

            ISheet sheet = null;

            IWorkbook workbook = null;

            DataTable data = new DataTable();

            //int startRow = 0;

            try

            {

                // fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);

                if (fileLast.Name.IndexOf(".xlsx") > 0) // 2007版本

                {

                    workbook = new XSSFWorkbook(fileLast.FullName);

                }

                else if (fileLast.Name.IndexOf(".xls") > 0) // 2003版本

                {

                    workbook = new HSSFWorkbook(fileLast.Open(FileMode.OpenOrCreate));

                }

                //循環sheet 表

                sheet = workbook.GetSheetAt(0);

                if (sheet != null)

                {

                    string sheetName = sheet.SheetName.Split('$')[0];

                    string sheetKeys = sheet.SheetName.Split('$')[1];

                    IRow firstRow = sheet.GetRow(0);//擷取表頭

                    int cellCount = firstRow.LastCellNum;//sheet頁列數

                    int rowCount = sheet.LastRowNum;

                    IRow rowNow = null;

                    string value;

                    ArrayList colunmName = new ArrayList();

                    for (int j = 0; j < cellCount; j++) //周遊列 擷取表頭

                    {

                        colunmName.Add(firstRow.GetCell(j).StringCellValue);

                    }

                    for (int jj = 1; jj <= rowCount; jj++)//周遊行

                    {

                        Hashtable ht = new Hashtable();

                        rowNow = sheet.GetRow(jj);

                        for (int k = 0; k < cellCount; k++)//周遊列

                        {

                            value = rowNow.GetCell(k).StringCellValue;

                            ht.Add(colunmName[k], value);

                        }

                        #region 判斷Where後面的條件strColumn

                        //string strTsrq = "";

                        //if (JudgeHelper.HasChinese(sheetKeys))

                        //{

                        //    strTsrq = "推送日期";

                        //}

                        //else

                        //{

                        //    strTsrq = "TSRQ";

                        //}

                        //iDb_OL.SaveData(sheetName, ht, sheetKeys + "," + strTsrq);

                        #endregion

                        iDb_OL.SaveData(sheetName, ht, sheetKeys);

                    }

                }

            }

            catch (Exception ex)

            {

                Log.SaveLog(iDb, ex.ToString(), "ExcelToDataBase", "ExcelToDataBase", "Wwsj-Excel", 1, strDataSource);

            }

        }

        /// <summary>

        /// 讀取EXCEL資料到資料庫 

        /// </summary>

        /// <param name="iDb">庫A(A->B)</param>

        /// <param name="iDb_OL">庫B(A->B)</param>

        /// <param name="WwsjTableName">庫B表名</param>

        /// <param name="sPath">Escel檔案目錄</param>

        /// <param name="strDataSource">資料來源</param>

        public static void GetExcelDataCommon(GS.DataBase.IDbAccess iDb, GS.DataBase.IDbAccess iDb_OL,string WwsjTableName, string sPath, string strDataSource)

        {

            try

            {

                string[] TableInfo = WwsjTableName.Split(',', ',');

                for (int i = 0; i < TableInfo.Length; i++)

                {

                    //sheetName = TableInfo[i].Split(':', ':')[0];//表名

                    //sheetKeys = TableInfo[i].Split(':', ':')[1];//關鍵字名

                    string patten = TableInfo[i] + "*";

                    FileInfo fileLast = GetLastExcel(sPath, patten);

                    ExcelToDataBase(iDb, iDb_OL, fileLast, strDataSource);

                }

            }

            catch (Exception ex)

            {

                Log.SaveLog(iDb, ex.ToString(), "GetExcelDataCommon", "GetExcelDataCommon", "Wwsj-Excel", 1, strDataSource);

            }

        }

    }

}

JudgeHelper類:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Common

{

    public class JudgeHelper

    {

        #region 判斷字元串是否為中文

        /// <summary>

        /// 判斷字元串中是否包含中文

        /// </summary>

        /// <param name="str">需要判斷的字元串</param>

        /// <returns>判斷結果</returns>

        public static bool HasChinese(string str)

        {

            return System.Text.RegularExpressions.Regex.IsMatch(str, @"[\u4e00-\u9fa5]");

        }

        #endregion

    }

}

Log類:

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Common

{

    public class Log

    {

        #region 日志異常記錄

        /// <summary>

        /// 記錄異常,供共享監管系統查詢

        /// </summary>

        /// <param name="iDb"></param>

        /// <param name="strMessage">異常資訊</param>

        /// <param name="strOperate">操作資訊</param>

        /// <param name="strFuctionName">函數名(共享監管系統進行重複調用方法時使用)</param>

        /// <param name="strFunctionKey">函數參數值(共享監管系統進行重複調用方法時使用)</param>

        /// <param name="iLevel">嚴重程度(1最嚴重)</param>

        public static void SaveLog(GS.DataBase.IDbAccess iDb, string strMessage, string strOperate, string strFuctionName, string strFunctionKey, int iLevel, string strDataSource)

        {

            Hashtable ht = new Hashtable();

            ht.Add("MESSAGE", strMessage);

            ht.Add("TIME", DateTime.Now.ToString());

            ht.Add("FUNCTIONNAME", strFuctionName);

            ht.Add("FUNCTIONKEY", strFunctionKey);

            ht.Add("OPERATE", strOperate);

            ht.Add("FUNCTIONLEVEL", iLevel);

            ht.Add("DATASOURCE", strDataSource);

            iDb.AddData("ESTATEINTERACTIVELOG", ht);

        }

        #endregion

    }

}

引用Excel的三個DLL:

NPOI.dll、NPOI.OOXML.dll、NPOI.OpenXml4Net.dll

配置說明:

-------------------------------------------------------------------------------

---------------------------------資料導出--------------------------------------

-------------------------------------------------------------------------------

導出資料時需要部署:

--先查詢ESTATEINTERACTIVE表指定DATA in('77')的表,然後根據這些表去資料庫

--查找同名的資料,解析資料并在指定檔案夾下生成Excel表;

------------------------建标隻針對一個資料(内網中間庫)--------------------------

一、建表

-- Create table ESTATEINTERACTIVE

create table ESTATEINTERACTIVE

(

  sqlname     VARCHAR2(50),

  sql         VARCHAR2(2000),

  targetkey   VARCHAR2(50),

  targettable VARCHAR2(50),

  datain      VARCHAR2(2),

  datasource  VARCHAR2(50)

)

--插入要推送資料表資訊

INSERT INTO ESTATEINTERACTIVE(SQLNAME,SQL,TARGETKEY,TARGETTABLE,DATAIN,DATASOURCE) 

VALUES('BDC_PROGRESS','select * from BDC_PROGRESS where 受理編号=''#受理編号#''','受理編号','BDC_PROGRESS','77','1')

--建立日志表ESTATEINTERACTIVELOG

create table ESTATEINTERACTIVE

(

  sqlname     VARCHAR2(50),

  sql         VARCHAR2(2000),

  targetkey   VARCHAR2(50),

  targettable VARCHAR2(50),

  datain      VARCHAR2(2),

  datasource  VARCHAR2(50)

)

-------------------------------------------------------------------------------

---------------------------------資料導入--------------------------------------

-------------------------------------------------------------------------------

說明:

導入資料時需要部署:

先查詢ESTATEINTERACTIVE表指定DATA in('77')的表,然後根據這些表去指定檔案夾

查找同名的Excel表,解析Excel表并将資料儲存在資料庫;

------------------------建标隻針對一個資料(外網中間庫)--------------------------

一、建表

-- Create Oracle table ESTATEINTERACTIVE

create table ESTATEINTERACTIVE

(

  sqlname     VARCHAR2(50),

  sql         VARCHAR2(2000),

  targetkey   VARCHAR2(50),

  targettable VARCHAR2(50),

  datain      VARCHAR2(2),

  datasource  VARCHAR2(50)

)

-- Create Sqlserver table ESTATEINTERACTIVE

CREATE TABLE ESTATEINTERACTIVE(

SQLNAME varchar(50) NULL,

SQL varchar(2000) NULL,

TARGETKEY varchar(50) NULL,

TARGETTABLE varchar(50) NULL,

DATAIN varchar(2) NULL,

DATASOURCE varchar(50) NULL

)

--插入要推送資料表資訊

INSERT INTO ESTATEINTERACTIVE(SQLNAME,SQL,TARGETKEY,TARGETTABLE,DATAIN,DATASOURCE) 

VALUES('BDC_PROGRESS','select * from BDC_PROGRESS where 受理編号=''#受理編号#''','受理編号','BDC_PROGRESS','77','1')

--建立要推送表BDC_PROGRESS

-- Create Oracle table

create table BDC_PROGRESS

(

  id0  NUMBER,

  受理編号 VARCHAR2(32),

  登記類型 VARCHAR2(50),

  申請人  VARCHAR2(60),

  證件号  VARCHAR2(50),

  聯系方式 VARCHAR2(30),

  收件時間 VARCHAR2(30),

  目前環節 VARCHAR2(30),

  推送日期 DATE

)

-- Add comments to the columns 

comment on column BDC_PROGRESS.id0

  is '序列号';

comment on column BDC_PROGRESS.受理編号

  is '受理編号';

comment on column BDC_PROGRESS.登記類型

  is '登記大類';

comment on column BDC_PROGRESS.申請人

  is '業務申請人';

comment on column BDC_PROGRESS.證件号

  is '身份證号';

comment on column BDC_PROGRESS.聯系方式

  is '電話号碼';

comment on column BDC_PROGRESS.收件時間

  is '收件時間';

comment on column BDC_PROGRESS.目前環節

  is '目前辦理環節';

comment on column BDC_PROGRESS.推送日期

  is '推送日期';

--Create Sqlserver Table

create table BDC_PROGRESS

(

  id0  int,

  受理編号 VARCHAR(32),

  登記類型 VARCHAR(50),

  申請人  VARCHAR(120),

  證件号  VARCHAR(50),

  聯系方式 VARCHAR(30),

  收件時間 VARCHAR(30),

  目前環節 VARCHAR(30),

  推送日期 datetime

)

--建立日志表ESTATEINTERACTIVELOG

--Oracle

CREATE TABLE ESTATEINTERACTIVELOG(

  MESSAGE clob NULL,

  TIME date NULL,

  FUNCTIONKEY varchar(500) NULL,

  OPERATE varchar(500) NULL,

  FUNCTIONLEVEL Number NULL,

  FUNCTIONNAME varchar(500) NULL,

  DATASOURCE varchar(50) NULL

)

--SqlServer

CREATE TABLE ESTATEINTERACTIVELOG(

MESSAGE text NULL,

TIME datetime NULL,

FUNCTIONKEY varchar(500) NULL,

OPERATE varchar(500) NULL,

FUNCTIONLEVEL int NULL,

FUNCTIONNAME varchar(500) NULL,

DATASOURCE varchar(50) NULL

)

--資料庫配置: 每個功能隻需要配置對應的一個資料庫連接配接

<!--外網收件内網推送内網前置機-->

<!--<add key="Conn_WwsjNqzj" value="Data Source=.\SQL2008R2;Initial Catalog=NWWDATA;User ID=sa;Password=sa;"/>

<add key="Dbtype_WwsjNqzj" value="SQLSERVER" />-->

<add key="Conn_WwsjNqzj" value="Data Source=orcl;User ID=BDCBZB;Password=BDCBZB;" />

<add key="Dbtype_WwsjNqzj" value="ORACLE" />

<!--外網收件内網推送外網前置機-->

<!--<add key="Conn_WwsjWqzj" value="Data Source=.\SQL2008R2;Initial Catalog=WWWDATA;User ID=sa;Password=sa;"/>

<add key="Dbtype_WwsjWqzj" value="SQLSERVER" />-->

<add key="Conn_WwsjWqzj" value="Data Source=bdcbzb;User ID=bdcbzb;Password=bdcbzb;" />

<add key="Dbtype_WwsjWqzj" value="ORACLE" />

操作說明:

導出:

需要選擇“開始時間”和“結束時間”,并點選“導出”按鈕,選擇Excel表生成路徑,等待執行,操作成功會用提示"資料生成成功!路徑:【Excel生成路徑】"

導入:

導入隻需要點選“導出”按鈕,選擇要導入的Excel表所在的路徑就行;等待執行,執行成功會提示“資料導入成功!”