Execl数据导入数据库:

注意事项:execl中的列名与列数要与数据库的列名和列数一致、值类型一致,列名不一致的话可在导入的时候,给字段起别名,确定保持一致

v 界面代码:

<div>

导入Execl路径:

<asp:FileUpload ID="FileUpload1" runat="server" />

<asp:Button ID="ExeclToSql" runat="server" Text="导入数据库" Width="120px"    onclick="ExeclToSql_Click" />

</div>

v 后台cs代码:

protected void ExeclToSql_Click(object sender, EventArgs e)

{

string excelFile = "";

//string excelFile = FileUpload1.FileName;

System.Web.HttpPostedFile postFile = FileUpload1.PostedFile;

DataSet ds = new DataSet();

OleDbConnection conn = new OleDbConnection();

try

{

//判断路径是否为空

if (postFile.FileName != String.Empty)

{

//新建文件名

string fileName = Guid.NewGuid().ToString() + ".xls";

//文件上传服务器目录路径

string absPath = Request.PhysicalApplicationPath + ("upload\\"); if (!System.IO.Directory.Exists(absPath)) System.IO.Directory.CreateDirectory(absPath); //上传文件,要检查一下是否建立了相关目录

//保存文件至服务器

postFile.SaveAs(absPath + fileName);

//文件全部路径

excelFile = absPath + fileName;

try

{

//value代表数据库的字段名,*代表execl的字段

string ss = "INSERT INTO 数据库表名(value)  SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=" + excelFile + ";Extended Properties=Excel 8.0')...[sheet1$]";

//注意:改方法为封装好的SQL执行语句,请用自己封装的连接数据库执行增删改查的类方法

DbHelperSQL.ExecuteSql(ss);

Page.RegisterStartupScript("js", "<script>alert('导入数据成功!')</script>");

}

catch

{

Page.RegisterStartupScript("js", "<script>alert('导入数据失败!')</script>");

}

}

else

{

throw new Exception("请上传文件!");

}

}

catch

{

Page.RegisterStartupScript("js", "<script>alert('错误!')</script>");

}

}

或者用以下类方法:

public class ExcelToSQL

{

//string  sqlcon = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

public SqlConnection sqlcon = new SqlConnection("连接字符串");        //创建SQL连接

public SqlCommand sqlcom;          //创建SQL命令对象

public ExcelToSQL()

{

if (sqlcon.State.ToString() == "Open")

sqlcon.Close();

}

public int ImportSql(string excelPath, string tableName)  //导入的Excel的路径,数据库里的表名

{

if (!TableExist(tableName)) //表名是否存在

return (int)ImportState.tableNameError;

DataTable dt = ExcelToDataTable(excelPath);//把Excel里的数据转换为DataTable,并返回DataTable

if (dt == null)

{

return (int)ImportState.excelFormatError;//转换失败

}

ArrayList tableField = GetTableField(tableName);   //表格的列名称  (得到数据库表的列名)

string columnName = "MGUID,"; //Excel里的列名,增加一个ID列,如果ID自动递增则不需要增加ID列,只需要columnName=“”就可以了。

for (int i = 0; i < dt.Columns.Count; i++)

{

columnName += dt.Columns[i].ColumnName + ",";

string currentColumn = dt.Columns[i].ToString().ToUpper(); //当前列名

for (int j = 0; j < tableField.Count; j++)

{

if (tableField[j].ToString().ToUpper() == dt.Columns[i].ToString().ToUpper())

break;   //跳出本层和上一层循环,continue是跳出本层循环,如果用continue,会继续执行j++

//Excel里的字段必须在Sql中都有

if ((tableField[j].ToString().ToUpper() != dt.Columns[i].ToString().ToUpper()) && j == tableField.Count - 1)

return (int)ImportState.fieldMatchError;

}

}

int m = columnName.LastIndexOf(',');

columnName = columnName.Remove(m);  //移除最后一个逗号

sqlcom = new SqlCommand();

sqlcom.Connection = sqlcon;

sqlcon.Open();

sqlcom.CommandType = CommandType.Text;

for (int h = 0; h < dt.Rows.Count; h++)

{

string value = "'" + System.Guid.NewGuid().ToString() + "'" + ","; //如果ID自动递增ID列不需要增加了,那么value的初始值只需要value=“”就可以了。

for (int k = 0; k < dt.Columns.Count; k++) //根据列名得到值

{

value += "'" + dt.Rows[h][k].ToString() + "'" + ",";

}

value = value.Remove(0, 1);

int n = value.LastIndexOf(',');

value = value.Remove(n);    //移除最后一个逗号

n = value.LastIndexOf("'");

value = value.Remove(n);

try

{

string sql = "insert into " + tableName + "(" + columnName + ") values('" + value + "')";

sqlcom.CommandText = sql;

string sss = sqlcom.ExecuteNonQuery().ToString();

}

catch (Exception err)

{

string erroe = err.Message;

return (int)ImportState.dataTypeError;

}

}

sqlcon.Close();

sqlcom.Dispose();

return (int)ImportState.right;

}

public DataTable ExcelToDataTable(string excelPath)  //把Excel里的数据转换为DataTable,并返回DataTable

{

string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;IMEX=1'";

System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);

string strCom = "SELECT * FROM [库存数量$]";

DataTable dt;

try

{

Conn.Open();

System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);

DataSet ds = new DataSet();

myCommand.Fill(ds, "[库存数量$]");

Conn.Close();

dt = ds.Tables[0];

}

catch (Exception err)

{

return null;

}

return dt;

}

public bool TableExist(string tableName) //查看数据库里是否有此表名

{

sqlcom = new SqlCommand();

sqlcom.Connection = sqlcon;

sqlcom.CommandType = CommandType.Text;

try

{

sqlcon.Open();

string sql = "select name from sysobjects where type='u'";

sqlcom.CommandText = sql;

SqlDataReader sqldr = sqlcom.ExecuteReader();

while (sqldr.Read())

{

if (sqldr.GetString(0).ToUpper() == tableName.ToUpper())

return true;

}

}

catch { return false; }

finally

{

sqlcon.Close();

}

return false;

}

public ArrayList GetTableField(string tableName)  //得到数据库某一个表中的所有字段

{

ArrayList al = new ArrayList();

sqlcom = new SqlCommand();

sqlcom.Connection = sqlcon;

sqlcom.CommandType = CommandType.Text;

try

{

sqlcon.Open();

string sql = "SELECT b.name FROM sysobjects a INNER JOIN syscolumns b ON a.id = b.id WHERE (a.name = '" + tableName + "')";

sqlcom.CommandText = sql;

SqlDataReader sqldr = sqlcom.ExecuteReader();

while (sqldr.Read())

{

al.Add(sqldr.GetString(0));

}

}

finally

{

sqlcon.Close();

}

return al; //返回的是表中的字段

}

public enum ImportState

{

right = 1, //成功

tableNameError = 2,//表名不存在

fieldMatchError = 3,//excel里的字段和数据库表里的字段不匹配

dataTypeError = 4, //转换数据类型时发生错误

excelFormatError = 5,//Excel格式不能读取

}

public void Alert(string str)

{

HttpContext.Current.Response.Write("<script language='javascript'>alert('" + str + "');</script>");

}

}

EXECL文件导入数据库的更多相关文章

  1. 读取Execl表 导入数据库

    不知不觉博客园园林都两年多了,我是今年毕业的应届生,最近公司项目需要改动,很多的数据需要导入,很多的实体类需要些.考虑到这些问题自己写了两个winform版的小工具,一个是读取Execl数据导入数据库 ...

  2. C# ASP.NET CSV文件导入数据库

    原文:C# ASP.NET CSV文件导入数据库 using System; using System.Collections.Generic; using System.Text; using Sy ...

  3. 【DRP】採用dom4j完毕XML文件导入数据库

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lantingxv_jing/article/details/37762523     xml文件在如 ...

  4. 将.dat文件导入数据库

    *最近在搞文本分类,就是把一批文章分成[军事].[娱乐].[政治]等等. 但是这个先需要一些样本进行训练,感觉文本分类和"按图索骥"差不多,训练的文章样本就是"图&quo ...

  5. PHP读取CSV大文件导入数据库的示例

    对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象. 为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的. 下面这个函数是读取CSV文件中指 ...

  6. CSV文件导入数据库和导出数据库

    实例一: <?php $filename = 'test'; //导出文件 header("Content-type: application/vnd.ms-excel; charse ...

  7. 记tp5.1使用composer PhpOffice的xlsx表格文件导入数据库

    在项目环境下composer require phpoffice/phpspreadsheet在项目中引用use PhpOffice\PhpSpreadsheet\IOFactory; 下面是 上传x ...

  8. mongodb csv 文件导入数据库,删除特定字段

    1. 导入数据库 mongoimport -h host_ip -p port -d db_name -c collection_name --fields name1,name2,name3,nam ...

  9. 《mysql必知必会》学习_sql文件导入数据库_20180724_欢

    解决问题1:MySQL中导入sql文件. 步骤1:show databases;#看看我有什么数据库 步骤2:use hh;#我要用hh这个数据库,返回database changed说明打开成功. ...

随机推荐

  1. Rest(Restful)风格的Web API跟RPC风格的SOAP WebService--这些名词都啥意思?

    经常看到这些词汇,也有baidu或google过,但记忆里总是模糊,不确定,以至于别人问及的时候,总说不清楚.开篇随笔记录下.大家有补充或者意见的尽请留文. 本文顺序: 一.Rest(Restful) ...

  2. mysql主从复制显示正常,数据没同步现象。

    当时在一个服务器上开启了多实例,主从复制结构图如下: 当时在192.168.10.3的服务器上用show slave status;显示的是正常的复制的,两个线程都为yes,并且读与写的pos也一直在 ...

  3. [Architect] Abp 框架原理解析(5) UnitOfWork

    本节目录 介绍 分析Abp源码 实现UOW 介绍 UOW(全称UnitOfWork)是指工作单元. 在Abp中,工作单元对于仓储和应用服务方法默认开启.并在一次请求中,共享同一个工作单元. 同时在Ab ...

  4. SpringMVC基础——@ModelAttribute和@SessionAttribute

    一.@ModelAttribute 注解 对方法标注 @ModelAttribute 注解,在调用各个目标方法前都会去调用 @ModelAttribute 标记的注解.本质上来说,允许我们在调用目标方 ...

  5. Sql Server来龙去脉系列之四 数据库和文件

        在讨论数据库之前我们先要明白一个问题:什么是数据库?     数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...

  6. 关于SVN删除后的文件不能重新添加(正常途径不行)

    在你自己的机器上(即SVN客户端),把“新建test”文件夹标记为删除,然后提交,在删除之前可以备份“新建test”文件夹,提交后,在当前文件夹下更新SVN.然后把你刚刚备份的文件夹重新放到该目录下. ...

  7. csharp: Procedure with DAO(Data Access Object) and DAL(Data Access Layer)

    sql script code: CREATE TABLE DuCardType ( CardTypeId INT IDENTITY(1,1) PRIMARY KEY, CardTypeName NV ...

  8. SharpGL学习笔记(十六) 多重纹理映射

    多重纹理就把多张贴图隔和在一起.比如下面示例中,一个表现砖墙的纹理,配合一个表现聚光灯效果的灰度图,就形成了砖墙被一个聚光灯照亮的效果,这便是所谓的光照贴图技术. 多重纹理只在OpenGL扩展库中才提 ...

  9. javascript函数中的三个技巧【一】

    在学习javascript中,函数是非常重要的,现在我来谈谈对函数的理解以及在工作和用法中的一些技巧 技巧一. [作用域安全的构造函数] 构造函数其实就是一个使用new操作调用的函数 function ...

  10. Bootstrap 我的学习记录4 轮播图的使用和理解

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...