• ASP.NET Excel导入Sql Server数据库(转)


    先看界面图

    实现的基本思想:

    1,先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹。

    2,使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Excel文件当做一个数据库来读。在联系数据库语句中,Data Source就是该文件在服务器上得物理路径

    3,将第二步中读出的数据以DataTable对象返回。

    4,遍历DataTable对象,然后到Sql Server数据库中查询,是否存在该条数据。如果存在,可以做更新,或者不做处理;如果不存在,则插入数据。

    注意:在遍历DataTable的时候,可是使用dt.Rows[i]["Name"].ToString();Name为Name列的表头,所以Excel中列的顺序就无关紧要了。当然,前提是你知道Excel里列中各表头的名字。如果Excel中列的顺序固定,即可按下面代码中的方式进行。

    添加的引用:

    using System;  
    using System.Data;  
    using System.Data.OleDb;  
    using System.Data.SqlClient;  
    using System.IO;  
    using System.Text;  
    using System.Web;  
    using System.Web.UI;  

    代码:

    private DataTable  xsldata()  
            {  
               if(fuload.FileName == "")  
                {  
                    lbmsg.Text = "请选择文件";  
                    return null;  
                }  
                string fileExtenSion;  
                fileExtenSion = Path.GetExtension(fuload.FileName);  
                if(fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx")  
                {  
                    lbmsg.Text = "上传的文件格式不正确";  
                    return null;  
                }  
                try  
                {  
                    string FileName = "App_Data/" + Path.GetFileName(fuload.FileName);  
                    if(File.Exists(Server.MapPath(FileName)))  
                    {  
                        File.Delete(Server.MapPath(FileName));  
                    }  
                    fuload.SaveAs(Server.MapPath(FileName));  
                    //HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES  
                    string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";  
                    string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties="Excel 12.0;HDR=YES"";  
                    OleDbConnection conn;  
                    if(fileExtenSion.ToLower() == ".xls")  
                    {  
                        conn = new OleDbConnection(connstr2003);  
                    }  
                    else  
                    {  
                        conn = new OleDbConnection(connstr2007);  
                    }  
                    conn.Open();  
                    string sql = "select * from [Sheet1$]";  
                    OleDbCommand cmd = new OleDbCommand(sql, conn);  
                    DataTable dt = new DataTable();  
                    OleDbDataReader sdr = cmd.ExecuteReader();  
      
                    dt.Load(sdr);  
                    sdr.Close();  
                    conn.Close();  
                    //删除服务器里上传的文件  
                    if(File.Exists(Server.MapPath(FileName)))  
                    {  
                        File.Delete(Server.MapPath(FileName));  
                    }  
                    return dt;  
                }  
                catch(Exception e)  
                {  
                    return null;  
                }  
            }  
      
            protected void Btn_Export_Excel_To_DB_Click(object sender, EventArgs e)  
            {  
                try{  
      
                    DataTable dt = xsldata();  
      
                    //dataGridView2.DataSource = ds.Tables[0];  
                    int errorcount = 0;//记录错误信息条数  
                    int insertcount = 0;//记录插入成功条数  
      
                    int updatecount = 0;//记录更新信息条数  
      
                    string strcon = "server=localhost;database=database1;uid=sa;pwd=sa";  
                    SqlConnection conn = new SqlConnection(strcon);//链接数据库  
                    conn.Open();  
      
                    for(int i = 0; i < dt.Rows.Count; i++)  
                    {  
                        string Name = dt.Rows[i][0].ToString();//dt.Rows[i]["Name"].ToString(); "Name"即为Excel中Name列的表头  
                        string Sex = dt.Rows[i][1].ToString();  
                        int Age = Convert.ToInt32(dt.Rows[i][2].ToString());  
                        string Address = dt.Rows[i][3].ToString();  
                        if(Name != "" && Sex != "" && Age != 0 && Address != "")  
                        {  
                            SqlCommand selectcmd = new SqlCommand("select count(*) from users where Name='" + Name + "' and Sex='" + Sex + "' and Age='" + Age + "' and Address=" + Address, conn);  
                            int count = Convert.ToInt32(selectcmd.ExecuteScalar());  
                            if(count > 0)  
                            {  
                                updatecount++;  
                            }  
                            else  
                            {  
                                SqlCommand insertcmd = new SqlCommand("insert into users(Name,Sex,Age,Address) values('" + Name + "','" + Sex + "'," + Age + ",'" + Address + "')", conn);  
                                insertcmd.ExecuteNonQuery();  
                                insertcount++;  
                            }  
                        }  
                        else  
                        {  
                            errorcount++;  
                        }  
                    }  
                    Response.Write((insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!"));  
                }  
                catch(Exception ex)  
                {  
      
                }  
            }  
  • 相关阅读:
    python基础之列表的坑
    python基础之字典篇
    坦克大战[源码] 你懂得
    java例程练习(键盘事件)
    android基础(对话框风格Activity实现)
    android基础(Activity)
    android基础(开发环境搭建)
    android基础(android程序的后台运行问题)
    java(敲 七)
    java例程练习(匿名类用法)
  • 原文地址:https://www.cnblogs.com/yellowcool/p/7448133.html
Copyright © 2020-2023  润新知