关于通过Excel批量导入数据库的分析

Posted SenFanXie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于通过Excel批量导入数据库的分析相关的知识,希望对你有一定的参考价值。

前台代码

技术分享
 1 <body>
 2     <form id="form1" runat="server">
 3     <div style=" margin:90px 600px;">
 4      <table id="table1" cellspacing="0" >
 5         <tr>
 6             <td>Excel文件模板</td>
 7             <td>
 8             《<a href="信息表.xlsx">标准信息表下载</a> 9             </td>
10         </tr>
11         <tr>
12             <td>
13                 选择文件
14             </td>
15             <td>
16                 <asp:FileUpload ID="fileupload" runat="server"/>
17             </td>
18         </tr>
19         <tr>
20             <td>
21                 上传文件
22             </td>
23             <td>
24                 <asp:Button ID="buttonUpload" runat="server" Text="文件上传" OnClick="buttonUpload_Click"/>
25                 <asp:Label ID="point" Text="" runat="server"></asp:Label>
26             </td>
27         </tr>
28         <tr>
29             <td>
30                导入数据
31             </td>
32             <td>
33                 <asp:Button ID="buttonImport" Text="导入数据" runat="server" OnClick="buttonImport_Click"/>
34                 <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
35                 <asp:Label ID="Label2" runat="server" Text=""></asp:Label>
36             </td>
37         </tr>
38      </table>
39      <asp:Label ID="Label3" runat="server" Text=""></asp:Label>
40     </div>
41     </form>
42 </body>
View Code

在后台通过与标准表的对比 把数据导入数据库,如果已存在,则会更新数据库的数据

代码如下

技术分享
  1   //文件上传
  2         #region MyRegion
  3         protected void buttonUpload_Click(object sender, EventArgs e)
  4         {
  5             buttonUpload.Enabled = true;
  6             if (fileupload.HasFile)//判断文件是否为空
  7             {
  8                 try {
  9                     if (File.Exists(Server.MapPath("~/Upload/") + fileupload.FileName))
 10                     {
 11                         File.Delete(Server.MapPath("~/Upload/") + fileupload.FileName);
 12                     }
 13                     if (TypeName(fileupload.FileName))//文件扩展名判断
 14                     {
 15                         fileupload.PostedFile.SaveAs(Server.MapPath("~/Upload/") + fileupload.FileName);//文件保存 
 16                         //判断文件上传格式是否正确
 17                         int IsRight = CompareXls(Server.MapPath("~/Upload/") + fileupload.FileName, fileupload.FileName);
 18                         if (IsRight == 0)
 19                         {
 20                             Label2.Text = null;
 21                             Label3.Text = null;
 22                             point.Text = "格式错误,请对比‘信息表导入标准表格.xlsx‘";
 23                         }
 24                         else
 25                         {
 26                             Label2.Text = null;
 27                             Label3.Text = null;
 28                             point.Text = "文件上传成功,请导入数据!";
 29                             Label1.Text = fileupload.FileName;
 30                         }
 31                     }
 32                     else
 33                     {
 34                         Label2.Text = null;
 35                         Label3.Text = null;
 36                         point.Text = "导入文件格式不对!";
 37                     }
 38                 }
 39                 catch(Exception){
 40                     Label2.Text = null;
 41                     Label3.Text = null;
 42                     point.Text = "文件上传时发生错误!";
 43                 }
 44             }
 45             else
 46             {
 47                 Label2.Text=null;
 48                 Label3.Text=null;
 49                 point.Text="上传文件不能为空";
 50             }
 51         }
 52         #endregion
 53         //判断文件扩展名
 54         #region MyRegion
 55         public bool TypeName(string filename)
 56         {
 57             String type = filename.Substring(filename.LastIndexOf(".") + 1);
 58             if (type == "xls" || type == "xlsx")
 59             {
 60                 return true;
 61             }
 62             else
 63             {
 64                 return false;
 65             }
 66 
 67         }
 68         #endregion
 69         //判断文件上传格式
 70         #region MyRegion
 71         private int CompareXls(string filepath, string Sheet1name)
 72         {
 73             int isEqual = 1;
 74             try
 75             {
 76                 DataSet newXls, standardXls;
 77                 newXls = xsldata(filepath, "");
 78                 standardXls = StanderXls();
 79                 if (standardXls.Tables[0].Columns.Count != newXls.Tables[0].Columns.Count)
 80                 {
 81                     isEqual = 0;
 82                 }
 83                 else
 84                 {
 85                     string strnewXlsFields, strstandardXlsFields;
 86                     for (int i = 0; i < standardXls.Tables[0].Columns.Count; i++)
 87                     {
 88                         strstandardXlsFields = standardXls.Tables[0].Columns[i].ToString();
 89                         strnewXlsFields = newXls.Tables[0].Columns[i].ToString();
 90                         if (strnewXlsFields != strstandardXlsFields)
 91                         {
 92                             isEqual = 0;
 93                             break;
 94                         }
 95                     }
 96                 }
 97             }
 98             catch (Exception e)
 99             {
100                 isEqual = 0;
101             }
102             return isEqual;
103         }
104 
105         private DataSet StanderXls()
106         {
107             string Sheet1name = "Sheet1";
108             string strCon = "Provider=Microsoft.Ace.OleDb.12.0;;Data Source=" + Server.MapPath("~/import/") + "信息表.xlsx;Extended Properties=‘Excel 12.0;IMEX=1‘ ;";
109             System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
110             string strCom = string.Format("SELECT * FROM [{0}$]", Sheet1name);
111             Conn.Open();
112             System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
113             DataSet ds = new DataSet();
114             myCommand.Fill(ds);
115             Conn.Close();
116             return ds;
117         }
118 
119         private DataSet xsldata(string filepath, string Sheet1name)
120         {
121             if (Sheet1name == null || Sheet1name == "")
122             { Sheet1name = "Sheet1"; }
123             else
124             { Sheet1name = Sheet1name.Substring(0, Sheet1name.IndexOf(.)); }
125             string strCon = "Provider=Microsoft.Ace.OleDb.12.0;;Data Source=" + filepath + ";Extended Properties=‘Excel 12.0;IMEX=1‘ ;";
126             System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
127             string strCom = string.Format("SELECT * FROM [{0}$]", Sheet1name);
128             Conn.Open();
129             System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
130             DataSet ds = new DataSet();
131             myCommand.Fill(ds);
132             Conn.Close();
133             return ds;
134         } 
135         #endregion
136         //数据导入
137         #region MyRegion
138         protected void buttonImport_Click(object sender, EventArgs e)
139         {
140             string fp = Label1.Text;
141             if (string.IsNullOrEmpty(fp))
142             {
143                 point.Text = null;
144                 Label2.Text = "你还未上传文件,请先上传文件!";
145                 Label3.Text = null;
146             }
147             else
148             {
149                 ExcelToDataSource(Server.MapPath("~/upload/") + fp, "");
150                 Label1.Text = null;
151             }
152         }
153         //将数据从Excel转换到数据源
154         private void ExcelToDataSource(string filepath, string sheet1name)
155         {
156             BLL.Test testBll = new BLL.Test();
157             Model.Test testModel = new Model.Test();
158             List<Model.Test> testlist = testBll.GetModelList("");
159             DataSet ds = xsldata(filepath, "");
160             DataTable dt = ds.Tables[0];
161             DataRow dr = null;
162             int success = 0;
163             int count = 0;
164             int testCount = 0;
165             bool updatetest;
166             bool updateuserinfoflag;
167             for (int i = 0; i < dt.Rows.Count-1; i++)
168             {
169                 success++;
170                 count++;
171                 dr = dt.Rows[i];
172                 updatetest = false;
173                 if (!string.IsNullOrEmpty(dr[0].ToString()))
174                 {
175                     List<Model.Test> modellist = null;
176                     success++;
177                     testModel.Name = dr[0].ToString();
178                     testModel.Sex = dr[1].ToString();
179                     testModel.Age = Convert.ToInt32(dr[2].ToString());
180                     testModel.Password = dr[3].ToString();
181                     foreach (Model.Test item in testlist)
182                     {
183                         if (item.Name.Trim() == testModel.Name.Trim())
184                         {
185                             testModel.ID = item.ID;
186                             testBll.Update(testModel);
187                             updatetest = true;
188 
189                         }
190                     }
191                     if (updatetest == false)
192                     {
193                         testBll.Add(testModel);
194                         testCount++;
195                     }
196                 }
197             }
198             Label2.Text = "成功添加" + testCount + "行数据!" ;
199             if ((count) == dt.Rows.Count - 1)
200             {
201                 Label3.Text = null;
202             }
203             else
204             {
205                 Label3.Text = "请检查" + Label3.Text + "的数据,其中的‘所在机构’、‘从事专业’、‘教师姓名’等是否为空或填写有误!";
206             }
207 
208         } 
209         #endregion
View Code

 

以上是关于关于通过Excel批量导入数据库的分析的主要内容,如果未能解决你的问题,请参考以下文章

完整版excel上传导入读写批量数据并将反馈结果写入远程exel中

SpringBoot通过Ajax批量将excel中数据导入数据库

求一个能把EXCEL批量导入SQL数据库的ASP程序代码!!!

[转]Excel生成批量SQL语句,处理大量数据的好办法

2007版本excel多个sheet页数据通过ibatis批量导入数据库

python之路_excel批量导入数据