asp.net_Excel数据导入数据库

      之前做过一个这样的项目,需要把Excel的数据导入到数据库,并实时在gridview上面分页显示出来(数据大于gridview一页显示的数量的时候分页,这里是显示4条),现在先收集起来。


    DB db = new DB();
    static int num,fy; //excel数据条数,分页
    //批量添加
    protected void txtMoreadd_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
        {
            ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请您选择Excel文件')</script> ");
            return;//当无文件时,返回
        }
        string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
        if (IsXls != ".xls")
        {
            ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('只可以选择Excel文件')</script>");
            return;//当选择的不是Excel文件时,返回
        }
        string filename = FileUpload1.FileName;              //获取Execle文件名  DateTime日期函数
        string savePath = Server.MapPath(("upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
        FileUpload1.SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上
        DataSet ds = ExcelSqlConnection(savePath, filename);           //调用自定义方法
        DataRow[] dr = ds.Tables[0].Select();            //定义一个DataRow数组
        int rowsnum = ds.Tables[0].Rows.Count;
        num = dr.Length;
        if (rowsnum == 0)
        {
            ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('Excel表为空表,无数据!')</script>");   //当Excel表为空时,对用户进行提示
        }
        else
        {
            for (int i = 0; i < dr.Length; i++)
            {
                //前面除了你需要在建立一个“upfiles”的文件夹外,其他的都不用管了,你只需要通过下面的方式获取Excel的值,然后再将这些值用你的方式去插入到数据库里面
                string user_name = dr[i]["user_name"].ToString();
                string dept_id = dr[i]["dept_id"].ToString();
                string spc_id = dr[i]["spc_id"].ToString();
                string class_id = dr[i]["class_id"].ToString();
                string room = dr[i]["room"].ToString();
                string pic = dr[i]["pic"].ToString();

                string strsql = "insert into users(user_name,dept_id,spc_id,class_id,room,pic)values('" + user_name + "','" + dept_id + "','" + spc_id + "','" + class_id + "','" + room + "','" + pic + "')";  //添加到数据库
                db.sqlEx(strsql);
            }
            
            ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('Excle表成功导入" + num + "条数据!')</script>");
            upfilecheck();
        }
    }


    #region 连接Excel  读取Excel数据   并返回DataSet数据集合
    /// <summary>
    /// 连接Excel  读取Excel数据   并返回DataSet数据集合
    /// </summary>
    /// <param name="filepath">Excel服务器路径</param>
    /// <param name="tableName">Excel表名称</param>
    /// <returns></returns>
    public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName)
    {
        string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
        OleDbConnection ExcelConn = new OleDbConnection(strCon);
        try
        {
            string strCom = string.Format("SELECT * FROM [Sheet1$]");
            ExcelConn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "[" + tableName + "$]");
            ExcelConn.Close();
            return ds;
        }
        catch
        {
            ExcelConn.Close();
            return null;
        }
    }
    #endregion

    //gridview显示批量上传的数据
    public void upfilecheck()
    {
        string strsql2 = @"SELECT top " + num + @" users.user_name, department.dept_name, special.spc_name, class.class_name, 
        users.room FROM users INNER JOIN
        department ON users.dept_id = department.dept_id INNER JOIN
        special ON users.spc_id = special.spc_id INNER JOIN
        class ON users.class_id = class.class_id order by user_id desc";
        DataTable dt = db.reDt(strsql2);
        GridView1.DataSource = dt;
        GridView1.DataBind();
        Label3.Text = "共有:" + num + "条记录。";
        fy = 2;
    }

表的格式如下:  9条数据

一按批量添加按钮,就有在gridview上面显示,而且自动分好页:

大笑大笑大笑

付DB.cs文件代码:

using System;
.......

/// <summary>
///DB 的摘要说明
/// </summary>
public class DB
{
    public DB()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }

    public SqlConnection GetCon()
    {
        string strcon = ConfigurationManager.AppSettings["sql"];
        return new SqlConnection(strcon);
    }

    ///<summary>
    ///执行SQL语句
    ///</summary>
    ///<param name="cmdstr">SQL语句</param>
    ///<returns>返回值为int型:成功返1,失败返0</returns>
    public int sqlEx(string cmdstr)
    {
        SqlConnection con = GetCon(); //连接数据库
        con.Open();//打开连接
        SqlCommand cmd = new SqlCommand(cmdstr, con);
        try
        {
            cmd.ExecuteNonQuery();//执行SQL语句并返回受影响的行数
            return 1;//成功返回1
        }
        catch
        {
            return 0;//失败返回0
        }
        finally
        {
            con.Dispose();//释放连接对象资源,比close彻底
        }
    }

    ///<summary>
    ///执行SQL查询语句
    ///</summary>
    ///<param name="cmdstr">查询语句</param>
    ///<returns>返回DataTable数据表</returns>
    public DataTable reDt(string cmdstr)
    {
        SqlConnection con = GetCon();
        SqlDataAdapter da = new SqlDataAdapter(cmdstr, con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return (ds.Tables[0]);

    }

    ///<summary>
    ///执行SQL查询语句
    ///</summary>
    ///<param name="cmdstr">查询语句</param>
    ///<returns>返回SqlDataReader对象dr</returns>
    public SqlDataReader reDr(string str)
    {
        SqlConnection con = GetCon();//连接数据库
        con.Open();//并打开了连接
        SqlCommand cmd = new SqlCommand(str, con);
        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;//返回SqlDataReader对象dr
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值