Ejemplo n.º 1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        //直接下載 FileInfoObj 物件並自動清除 2016.11.18
        FileInfoObj oFile = FileInfoObj.getFileInfoObj();

        if (oFile != null && oFile.FileSize > 0)
        {
            string strFileNme  = oFile.FileName;
            byte[] binFileBody = oFile.FileBody;

            FileInfoObj.Clear();
            Util.ExportBinary(binFileBody, strFileNme);
        }
        else
        {
            labMsg.Text = Util.getHtmlMessage(Util.HtmlMessageKind.ParaError, RS.Resources.Msg_ParaError);
        }
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 儲存暫存資料
    /// </summary>
    protected void SaveQueue()
    {
        FileInfoObj oFileInfo = FileInfoObj.getFileInfoObj();

        if (oFileInfo.FileSize > 0)
        {
            //將上傳 Excel 內容轉成DataSet
            DataSet ds = Util.getDataSetFromExcel(Util.getStream(oFileInfo.FileBody));
            FileInfoObj.Clear();

            try
            {
                //將上傳結果暫存到資料庫
                if (ds != null && !ds.Tables[0].IsNullOrEmpty())
                {
                    DataTable dt = ds.Tables[0];
                    //計算 PKey
                    var PKeys = Util.getAppKey(_DBName, _AppKeyID, dt.Rows.Count);
                    //更名及新增所需欄位
                    dt.Columns[0].ColumnName = "Col01";
                    dt.Columns[1].ColumnName = "Col02";
                    dt.Columns[2].ColumnName = "Col03";
                    dt.Columns.Add("PUser");
                    dt.Columns.Add("PKey");
                    dt.Columns.Add("UpdUser");
                    dt.Columns.Add("UpdTime");

                    string   strUserID = UserInfo.getUserInfo().UserID;
                    DateTime dateNow   = DateTime.Now;

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        //處理自訂欄位的值
                        dt.Rows[i]["PUser"]   = strUserID;      //記錄暫存資料是由那個 UserID 上傳
                        dt.Rows[i]["PKey"]    = PKeys.Item1[i];
                        dt.Rows[i]["UpdUser"] = strUserID;
                        dt.Rows[i]["UpdTime"] = dateNow;
                    }

                    //批量存入 MS-SQL
                    SqlConnection conn = new SqlConnection(DbHelper.getConnectionStrings(_DBName).ConnectionString);
                    conn.Open();
                    using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
                    {
                        //設定一批寫入筆數
                        sqlBC.BatchSize = 1000;
                        //設定逾時的秒數
                        sqlBC.BulkCopyTimeout = 60;
                        //設定要寫入的資料表
                        sqlBC.DestinationTableName = "TestBulkQueue";

                        //資料欄位對應
                        sqlBC.ColumnMappings.Add("PUser", "PUser");
                        sqlBC.ColumnMappings.Add("PKey", "PKey");
                        sqlBC.ColumnMappings.Add("Col01", "TabName");
                        sqlBC.ColumnMappings.Add("Col02", "FldName");
                        sqlBC.ColumnMappings.Add("Col03", "Value");
                        sqlBC.ColumnMappings.Add("UpdUser", "UpdUser");
                        sqlBC.ColumnMappings.Add("UpdTime", "UpdTime");

                        //** 進階應用 **
                        //設定 NotifyAfter 屬性,以便在每複製指定筆數後自動呼叫指定事件
                        //sqlBC.NotifyAfter = 10000;
                        //sqlBC.SqlRowsCopied += sqlBC_SqlRowsCopied;

                        //開始寫入
                        sqlBC.WriteToServer(dt);
                    }
                    conn.Dispose();

                    txtAction.Value = "WaitDataVerify";
                    ucLightBox.Show(true);
                }
                else
                {
                    ShowMsg("Excel 無資料");
                }
            }
            catch (Exception ex)
            {
                ShowMsg(ex.Message);
            }
        }
    }