[NOPI][C#]Import EXCEL to C# datatable(from xls or xlsx)

need ddl 

npoi vision 2.1.3.1


aspx   


<td colspan="3">     

                  <telerik:RadAsyncUpload ID="Q_btnEXCELChk" runat="server" MaxFileInputsCount="1" Localization-Remove="移除"

                    Localization-Select="瀏覽" ><%--Style="padding: 8px 0px 0px 0px !important; width: 220px!important; font-family: Microsoft JhengHei;"--%>

                </telerik:RadAsyncUpload>

                   

                </td>

                <td colspan="3">

                       <asp:Label ID="Label2" runat="server" Text="" Width="20%"></asp:Label>

                    <asp:Button ID="Q_btnEXCEL" runat="server" Text="匯入預算" OnClick="Q_btnEXCEL_Click"/>

                </td>



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

 aspx.cs

using NPOI.HSSF.UserModel;

using NPOI.XSSF.UserModel;

using ICSharpCode.SharpZipLib.Zip;

       

protected void Q_btnEXCEL_Click(object sender, EventArgs e)

    {

        string MSG = string.Empty;

        UploadedFile file = Q_btnEXCELChk.UploadedFiles[0];

        //string FileNm = DateTime.Now.ToString("yyyyMMddhhmmss_") + this.USER.EMPNO + ".xls";

        //string fileth = "~/Apps/HDGBJ/Upload" + FileNm;

        //Q_btnEXCELChk.UploadedFiles[0].SaveAs(Server.MapPath(fileth));

        DataTable dtImport = new DataTable();


        if (file.GetExtension() == ".xls")

        {

            HSSFWorkbook workbook_I = new HSSFWorkbook(file.InputStream);

            HSSFSheet sheet_I = (HSSFSheet)workbook_I.GetSheetAt(0);


            if (sheet_I != null)

            {

                int DataRowFrom = 1;

                int DataColFrom = 0;

                int HeaderRowCount = 1;

                int RowCount = sheet_I.PhysicalNumberOfRows;

                //* 實際匯入資料筆數

                int DataRowCount = RowCount - HeaderRowCount;

                //* 表頭資料列的欄位總數 

                int DataColCount = sheet_I.GetRow(0).PhysicalNumberOfCells;


                #region 欄位


                dtImport.Columns.Add("SEG", typeof(string));

                dtImport.Columns.Add("CCID", typeof(string));

                dtImport.Columns.Add("ACCIDNM", typeof(string));

                dtImport.Columns.Add("M1", typeof(string));

                dtImport.Columns.Add("M2", typeof(string));

                dtImport.Columns.Add("M3", typeof(string));

                dtImport.Columns.Add("M4", typeof(string));

                dtImport.Columns.Add("M5", typeof(string));

                dtImport.Columns.Add("M6", typeof(string));

                dtImport.Columns.Add("M7", typeof(string));

                dtImport.Columns.Add("M8", typeof(string));

                dtImport.Columns.Add("M9", typeof(string));

                dtImport.Columns.Add("M10", typeof(string));

                dtImport.Columns.Add("M11", typeof(string));

                dtImport.Columns.Add("M12", typeof(string));

                //dtImport.Columns.Add("ITEMS", typeof(Int32));           

                //dtImport.Columns.Add("TRANSFEE", typeof(decimal));      

                #endregion


                #region 塞值--先塞入datatable在做處理

                for (int i = 1; DataRowCount > i; i++)  //列計數

                {


                    DataRow drImport = dtImport.NewRow();


                    for (int j = 0; 15 > j; j++)  //資料欄位計數

                    {

                        drImport[j] = sheet_I.GetRow(i).GetCell(j);


                        //drImport.Table.Rows[i-1][j]= sheet_I.GetRow(i).GetCell(j);

                        //dtImport.Rows[i-1][j] = 

                    }

                    dtImport.Rows.Add(drImport);

                }



                #endregion


            }

        }

        else if (file.GetExtension() == ".xlsx")

        {

            ///建立Excel 2007檔案

            XSSFWorkbook workbook_I = new XSSFWorkbook(file.InputStream);

            XSSFSheet sheet_I = (XSSFSheet)workbook_I.GetSheetAt(0);


            if (sheet_I != null)

            {

                int DataRowFrom = 1;

                int DataColFrom = 0;

                int HeaderRowCount = 1;

                int RowCount = sheet_I.PhysicalNumberOfRows;

                //* 實際匯入資料筆數

                int DataRowCount = RowCount - HeaderRowCount;

                //* 表頭資料列的欄位總數 

                int DataColCount = sheet_I.GetRow(0).PhysicalNumberOfCells;


                #region 欄位


                dtImport.Columns.Add("SEG", typeof(string));

                dtImport.Columns.Add("CCID", typeof(string));

                dtImport.Columns.Add("ACCIDNM", typeof(string));

                dtImport.Columns.Add("M1", typeof(string));

                dtImport.Columns.Add("M2", typeof(string));

                dtImport.Columns.Add("M3", typeof(string));

                dtImport.Columns.Add("M4", typeof(string));

                dtImport.Columns.Add("M5", typeof(string));

                dtImport.Columns.Add("M6", typeof(string));

                dtImport.Columns.Add("M7", typeof(string));

                dtImport.Columns.Add("M8", typeof(string));

                dtImport.Columns.Add("M9", typeof(string));

                dtImport.Columns.Add("M10", typeof(string));

                dtImport.Columns.Add("M11", typeof(string));

                dtImport.Columns.Add("M12", typeof(string));

                //dtImport.Columns.Add("ITEMS", typeof(Int32));           

                //dtImport.Columns.Add("TRANSFEE", typeof(decimal));      

                #endregion


                #region 塞值--先塞入datatable在做處理

                for (int i = 1; DataRowCount > i; i++)  //列計數

                {


                    DataRow drImport = dtImport.NewRow();


                    for (int j = 0; 15 > j; j++)  //資料欄位計數

                    {

                        drImport[j] = sheet_I.GetRow(i).GetCell(j);


                        //drImport.Table.Rows[i-1][j]= sheet_I.GetRow(i).GetCell(j);

                        //dtImport.Rows[i-1][j] = 

                    }

                    dtImport.Rows.Add(drImport);

                }



                #endregion


            }

        }

        else

        {

            this.Master.AjaxManager.Alert("檔案格式錯誤");

            MSG = "檔案格式錯誤";

            //檔案錯誤

        }


        if (MSG == "")

        {

            //整理datatable

            if (dtImport.Rows.Count > 0)

            {

                //移除沒有CCID的資料列

                for (int i = 0; dtImport.Rows.Count > i; i++)

                {

                    if (dtImport.Rows[i]["CCID"].ToString() == "")

                    {

                        // dt.Rows[i].Delete();

                        dtImport.Rows.RemoveAt(i);

                    }

                }

         

                

                db.Inport(dtImport, COMPID, Q_ddlDATAYEAR.SelectedValue.ToString(), Q_ddlYEARTYPE.SelectedValue.ToString());

            }


        }


    }

[SQL][sybase]use SQL server OPEN QUERY Sybase with parameter

 Declare @ps_houses char(2)

Declare @ps_housee char(2)

Declare @ps_dates char(8)

Declare @ps_datee char(8)


set @ps_houses = '01' 

set @ps_housee = '31'

set @ps_dates =  (select convert(varchar(8),getdate(),112))

set @ps_datee = (select convert(varchar(8),getdate(),112))


Declare @SQL_str varchar(3000)


set @SQL_str='SELECT distinct   

trf100s.send_no,      

         trf100s.tranio_no,      

         trf100s.raw_no,      

         trf100s.part_no,      

         saf300s.send_qty,      

         saf300s.scan_qty,    

         saf300s.send_qty - saf300s.scan_qty   as no_scanqty ,   

baf008.cust_no,   

baf008.cust_sname,

trf100.house_no,

baf014.house_name

    FROM trf100s  

LEFT JOIN trf100  ON trf100s.send_no = trf100.send_no   

LEFT JOIN baf008  ON baf008.cust_no = trf100s.cust_no   

LEFT JOIN saf300s ON trf100s.send_no = saf300s.send_no    

          and trf100s.tranio_no = saf300s.tranio_no   

and trf100s.part_no = saf300s.part_no

LEFT JOIN baf014 ON trf100.house_no = baf014.house_no    

   WHERE     

   saf300s.send_qty - saf300s.scan_qty   > 0   

and left(saf300s.tranio_no,2) <> ''DI''     

    and saf300s.barcode_yn = ''Y''      

and trf100.house_no between ''' + @ps_houses +''' and ''' +@ps_housee  + ''' and convert(char(8),trf100.send_date,112) between '''+ @ps_dates + ''' and '''+ @ps_datee


SET @SQL_str = 'SELECT * into TMP_LHDBTRP100 FROM OpenQuery(LHDB, ''' + REPLACE(rtrim(@SQL_str)+'''', '''', '''''')+ ''')'


    EXEC(@SQL_str)

[DataSet Bug]無法啟用條件約束。一或多個資料列的值違反非 Null、唯一或外部索引鍵條件約束

在使用TableAdapter作Query時發生 1. 原因為有些資料欄位Query出來後為null值 但是該欄位在dbDataSet的屬性AllowDBNull為False 因此把該欄位(或乾脆把全部欄位屬性AllowDBNull改為True 2. maxLength 檢...