Excel到数据库的导入三部曲

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

前段时间考试系统要新添加一个功能,要把学生表的信息批量导入,也就是需要从excel中导入到数据库表,小女子不才,找了好长时间才解决。

  一、如果表是没有建立的,我们需要在数据库表中重新建立一个表盛放excel数据的时候:

  在sql server中的导入语句:

  SELECT * intocity2 FROM OpenDataSource( 'Micros  前段时间考试系统要新添加一个功能,要把学生表的信息批量导入,也就是需要从excel中导入到数据库表,小女子不才,找了好长时间才解决。

  一、如果表是没有建立的,我们需要在数据库表中重新建立一个表盛放excel数据的时候:

  在sql server中的导入语句:

  SELECT * intocity2 FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'DataSource="f:\test.xls";User ID=Admin;Password=;Extendedproperties=Excel 5.0')...[Sheet1$]

  这里需要注意的是,如果直接写这个语句,会出现这样的错误:

  SQL Server 阻止了对组件'Ad HocDistributed Queries' 的STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用'Ad Hoc Distributed Queries'。有关启用'Ad HocDistributed Queries' 的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"。

  所以,我们这里需要启动服务:

  启动语句为:

execsp_configure 'show advanced options',1
reconfigure
execsp_configure 'Ad Hoc Distributed Queries',1
reconfigure

  当然,用完之后要记得关闭:

  关闭语句为:

execsp_configure 'Ad Hoc Distributed Queries',0
reconfigure
execsp_configure 'show advanced options',0
reconfigure

  因为考试系统是基于asp.net实现的,所以,一下是asp.net的实现代码,需要注意的是,因为语句中存在”,\等特殊符号,所以,我们需要使用转义字符来使这些特殊符号成为字符串类型,这里是一些常用的转义字符符号:http://baike.baidu.com/view/73.htm

   protectedvoid btntoLaad_Click(object sender, EventArgs e)
{
 
SqlConnectionmycon = new SqlConnection("server=.;database=qingniao;uid=sa;pwd=123");
string sqlstr = "SELECT * into cityFROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=\"f:\\test.xls\";User ID=Admin;Password=;Extended properties=Excel5.0')...[Sheet1$]";
 
 
       SqlCommand cmd = new SqlCommand(sqlstr, mycon);
 
       mycon.Open();
 
       cmd.ExecuteNonQuery();
 
       mycon.Close();
}

  这样,数据库中会建立一个city表,来存储excel中的数据。

  二、将excel表导入到已经存在的数据库表

  这里需要注意的是,excel表中的数据必须要和数据库表中的数据一致

  比如,如果数据库表的字段为

  则相应的excel的表字段为:

oft.Jet.OLEDB.4.0', 'DataSource="f:\test.xls";User ID=Admin;Password=;Extendedproperties=Excel 5.0')...[Sheet1$]

 

  这里需要注意的是,如果直接写这个语句,会出现这样的错误:

  SQL Server 阻止了对组件'Ad HocDistributed Queries' 的STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure 启用'Ad Hoc Distributed Queries'。有关启用'Ad HocDistributed Queries' 的详细信息,请参阅SQL Server 联机丛书中的"外围应用配置器"。

  所以,我们这里需要启动服务:

  启动语句为:

execsp_configure 'show advanced options',1
reconfigure
execsp_configure 'Ad Hoc Distributed Queries',1
reconfigure

  当然,用完之后要记得关闭:

  关闭语句为:

execsp_configure 'Ad Hoc Distributed Queries',0
reconfigure
execsp_configure 'show advanced options',0
reconfigure

  因为考试系统是基于asp.net实现的,所以,一下是asp.net的实现代码,需要注意的是,因为语句中存在”,\等特殊符号,所以,我们需要使用转义字符来使这些特殊符号成为字符串类型,这里是一些常用的转义字符符号:http://baike.baidu.com/view/73.htm

   protectedvoid btntoLaad_Click(object sender, EventArgs e)
{
 
SqlConnectionmycon = new SqlConnection("server=.;database=qingniao;uid=sa;pwd=123");
string sqlstr = "SELECT * into cityFROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source=\"f:\\test.xls\";User ID=Admin;Password=;Extended properties=Excel5.0')...[Sheet1$]";
 
 
       SqlCommand cmd = new SqlCommand(sqlstr, mycon);
 
       mycon.Open();
 
       cmd.ExecuteNonQuery();
 
       mycon.Close();
}

  这样,数据库中会建立一个city表,来存储excel中的数据。

  二、将excel表导入到已经存在的数据库表

  这里需要注意的是,excel表中的数据必须要和数据库表中的数据一致

  比如,如果数据库表的字段为

  则相应的excel的表字段为:





protectedvoid btnExist_Click(object sender, EventArgs e)
    {
        SqlConnection mycon = new SqlConnection("server=.;database=qingniao;uid=sa;pwd=123");
        string sqlstr = " insert intocity1 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'DataSource=\"f:\\test.xls\";User ID=Admin;Password=;Extendedproperties=Excel 5.0')...[Sheet1$]";
 
    
        SqlCommand cmd = new SqlCommand(sqlstr,mycon);
 
        mycon.Open();
 
        cmd.ExecuteNonQuery();
 
        mycon.Close();
    }

  这里同样需要开启服务,和第一种的方式一样。

  三、既然已经存在的表,一般都会存在一些设置,比如说主键、外键或者是其他,如果主键或者外键冲突,就会出现导入失败的问题。所以,我们需要对excel表中的数据进行判断。

  则先需要把数据导入到datatable中

  protected void btnLeadingIn_Click(objectsender, EventArgs e)
    {
 
        DataTable dt=new DataTable();
        dt = CreateExcelDataSource("F:\\abc.xls");
        SqlConnection sqlCon = con();
        sqlCon.Open();
 
 
        GridView1.DataSource = dt;
        GridView1.DataBind();
        for (int i = 0; i < dt.Rows.Count;i++)
        {
           //导入数据库,把数据写入数据库应该就是非常简单了,这里就不多写了
        }
 
    }
 
 
    public static DataTableCreateExcelDataSource(string url)
    {
 
        DataTable dt = null;
       
       // string connetionStr ="Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + url+ ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
        string connetionStr = "Provider=Microsoft.Jet.OleDb.4.0;"+ "data source=" + url + ";Extended Properties='Excel 8.0;HDR=YES; IMEX=1'";
        string strSql = "select * from[Sheet1$]";
        OleDbConnection oleConn = new OleDbConnection(connetionStr);
        OleDbDataAdapter oleAdapter = new OleDbDataAdapter(strSql,connetionStr);
        try
        {
            dt = new DataTable();
            oleAdapter.Fill(dt);
 
            return dt;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            oleAdapter.Dispose();
            oleConn.Close();
            oleConn.Dispose();
        }
    }
 

  当然,我感觉我这里把datatable中的数据一条一条的取出来判断至少是非常耗时间耗内存的,而且这里最好加上回滚事物,因为在我们导入过程中会经常出现这样活那样的问题,采用事物,可以在出错的时候把数据回滚到没有导入之前的状态,防止意外事件发生,这里我就不往上加了。

  以上是三种是我们实现了的excel导入,当然,我想方法还不止这些,当然,除了导入,还有的就是从数据库表导出到excel表中,因为我做的那部分系统没有涉及到,所以这里就不再提了。

  下面说一下我在解决的过程中绕的弯路:

  一、我没有把导入数据库的种种做法弄清楚,比如是直接创建表呢还是在已经存在的表中导入,所以以至于刚开始总是找不到合适的方法。

  二、在后来的查找过程中,我发现我有一个很大的毛病,就是我的关键字是在“asp.net中、、、、、”,其实,既然是往数据库中导入,asp.net只是一个执行一下,所以,因为有了关键字的约束,查出来的资料少不说,而且还形成了一种思维定式,除了asp.net之外的其他都一概不看。

  三、对查不来的信息不能加以理解,只是能用就用,不能用就换,也就是我因为转义字符串那一块弄了很长时间的原因,因为当我们在sql执行查询语句没有错误的时候,需要把它放在asp.net中执行,因为这些语句需要string字符串来显示,而这个执行语句中有包含引号,所以需要转义字符,在解决引号的问题之后,我发现还是不正确,一直折腾了好久才发现是路径F:\test.xls中“\t“是table的转义字符,所以这里需要两个\来转义\,这就是应该写成这样“F:\\test.xls”,而当我写成这样的时候,我才想起来,其实最开始查询的时候所有的代码都是这样的,只是那些我没用上,当时也没多想,以为路径就应该是这样的,最终导致还继续在这个上面栽跟头。



 








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
26天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课18 通过pg_bulkload适配pfs实现批量导入提速
本文介绍了如何修改 `pg_bulkload` 工具以适配 PolarDB 的 PFS(Polar File System),从而加速批量导入数据。实验环境依赖于 Docker 容器中的 loop 设备模拟共享存储。通过对 `writer_direct.c` 文件的修改,替换了一些标准文件操作接口为 PFS 对应接口,实现了对 PolarDB 15 版本的支持。测试结果显示,使用 `pg_bulkload` 导入 1000 万条数据的速度是 COPY 命令的三倍多。此外,文章还提供了详细的步骤和代码示例,帮助读者理解和实践这一过程。
42 0
|
5月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
942 0
|
3月前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
170 8
|
3月前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
3月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
4月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
64 1
|
6月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
5月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
659 1
|
6月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
288 0
|
7月前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
182 1

热门文章

最新文章