c#大批量Exce数据l导入数据库

protected void Button1_Click(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有文件
            {
                Response.Write("<script>alert('请您选择Excel文件')</script> ");
                return;//当无文件时,返回
            }
            string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
            if (IsXls != ".xlsx" && IsXls != ".xls")
            {
                Response.Write(FileUpload1.FileName);
                Response.Write("<script>alert('只可以选择Excel文件')</script>");
                return;//当选择的不是Excel文件时,返回
            }

            string filename = GetTimeStamp() + IsXls;
            string savePath = Server.MapPath(("~\\upload\\") + filename);//Server.MapPath 服务器上的指定虚拟路径相对应的物理文件路径
                                                                         //savePath ="D:\vsproject\Projects\exceltestweb\exceltestweb\uploadfiles\test.xls"
                                                                         //Response.Write(savePath);
            DataTable ds = new DataTable();
            FileUpload1.SaveAs(savePath);//将文件保存到指定路径

            DataTable dt = GetExcelDatatable(savePath);//读取excel数据

            SHelp _sql = new SHelp(0);

            DataTable _dtx = _sql.GetData("select MaxFid from t_systemmax where TabelName='t_inapply'");

            Int64 MaxFid = Convert.ToInt64(_dtx.Rows[0][0].ToString());

            dt.Columns.Add("Fid");

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                try
                {
                    while (dt.Rows[i][0].ToString() == "")
                    {
                        dt.Rows.RemoveAt(i);
                    }

                    MaxFid += 1;
                    dt.Rows[i]["Fid"] = MaxFid.ToString();
                }
                catch
                {
                    break;
                }


            }


            for (int i = 0; i < dt.Columns.Count; i++)
            {
                dt.Columns[i].ColumnName = dt.Columns[i].ColumnName.Trim();
            }

            dt.Columns["发货金额(含税)"].ColumnName = "发货金额";

            int x = _sql.SqlBulkCopyByDatatable("t_inapply", dt);

            if (x == -1)
            {
                Response.Write("<script>alert('上传数据列不一致!');</script>");
            }
            else
            {
                x = _sql.ExecuteNonQuery("update t_systemmax set MaxFid=(select isnull(MAX(Fid),0) from t_inapply) where TabelName='t_inapply'  update t_inapply set FDate=GETDATE() where FDate is null ");
                Response.Write("<script>alert('上传文件读取数据成功!');</script>");
            }



            File.Delete(savePath);//删除文件

        }
    }


    /// <summary>
    /// 从excel文件中读取数据
    /// </summary>
    /// <param name="fileUrl">实体文件的存储路径</param>
    /// <returns></returns>
    private static DataTable GetExcelDatatable(string fileUrl)
    {
        //支持.xls和.xlsx,即包括office2010等版本的;HDR=Yes代表第一行是标题,不是数据;
        string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileUrl + "; Extended Properties=\"Excel 12.0;HDR=Yes\"";
        System.Data.DataTable dt = null;
        //建立连接
        OleDbConnection conn = new OleDbConnection(cmdText);

        string tableName = "";
        try
        {
            //打开连接
            if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
            {
                conn.Open();

                 dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                tableName = dt.Rows[0][2].ToString().Trim();

                dt = null;
            }

            System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string strSql = "select * from ["+ tableName + "]";   //这里指定表明为Sheet1,如果修改过表单的名称,请使用修改后的名称
            OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dt = ds.Tables[0]; ;
            return dt;
        }
        catch (Exception exc)
        {
            throw exc;
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }
    }

   


    /// <summary>
    /// 获取时间戳
    /// </summary>
    /// <returns></returns>
    public string GetTimeStamp()
    {
        TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        return Convert.ToInt64(ts.TotalSeconds).ToString();
    }
/// <summary>
    /// 将表中资料批量插入到数据库
    /// 
    /// </summary>
    /// <param name="connectionString"></param>
    /// <param name="TableName"></param>
    /// <param name="dt"></param>
    public int SqlBulkCopyByDatatable(string TableName, DataTable dt)
    {
        using (this._conn = new SqlConnection(sqlAdd))
        {
            using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(sqlAdd, SqlBulkCopyOptions.UseInternalTransaction))
            {
                try
                {
                    sqlbulkcopy.DestinationTableName = TableName;
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
                    }
                    sqlbulkcopy.WriteToServer(dt);

                    return 1;
                }
                catch (System.Exception ex)
                {
                    return -1;
                }
            }
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值