在之前操作了EXCEL存入数据库之后,我发现存在好多问题,这次加以改进。

本次主要进行的工作有:

1,创建一个XML文件,主要在里面定义数据库表名,是否重建表,excel文件路径,是否导入该文件。

2,操作该XML读取信息并根据属性值创建数据库表,插入数据等。

XML文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<Files>
  <File Finished="false">
    <TableName  IsExist="false">
      Interments
    </TableName>
    <Path>
      C:\\projects\\CMS\\UserData\\CemeCare_Excel\\Interment Records (through 8-1-2009).xls
    </Path>
  </File>
  <File Finished="false">
    <TableName  IsExist="false">
      Plots
    </TableName>
    <Path>
      C:\\projects\\CMS\\UserData\\CemeCare_Excel\\PLOT FILES (Sections 1 - 99).xls
    </Path>
  </File>

</Files>

有了这个XML,我们就可以自由定位xls数据文件位置,并可以自己给表设定名字。对于多个excel插入一个表的情况,则只需指定IsExist="false"即可。

相关代码如下:

代码


        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            string xmlFile = "ImportFiles.xml";
            doc.Load(xmlFile);

XmlNode node = doc.SelectSingleNode("Files");

foreach (XmlNode xn in node.ChildNodes)
            {
                if (xn.Attributes["Finished"].Value.ToString().ToLower() == "false")
                {
                    XmlNode tableNode = xn.FirstChild;
                    XmlNode pathNode = xn.LastChild;
                    string tableName = tableNode.InnerText.Trim();
                    string path = pathNode.InnerText.Trim();

string fileName = System.IO.Path.GetFullPath(path);
                    DataSet ds = ImportExcel(fileName);

if (tableNode.Attributes["IsExist"].Value == "false")
                    {
                        CreateTable(tableName, ds.Tables[0]);
                    }
                    ToDataBase(ds, tableName);
                }
            }
            Console.WriteLine("Finished");
            Console.ReadLine();
        }

private static void CreateTable(string tableName, DataTable dt)
        {
            string sql = "IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + tableName + "]') AND type in (N'U'))"
                         + "   DROP TABLE [dbo].[" + tableName + "]"
                         + "  ";
            Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteNonQuery("server=local;database=TestData;uid=sa;pwd=;", CommandType.Text, sql);

string sqlCreate = @"CREATE TABLE [dbo].[" + tableName + "](";
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                sqlCreate = sqlCreate + "["+dt.Columns[i].ColumnName + "] " + "nvarchar(255) null";
                if (i != dt.Columns.Count - 1)
                {
                    sqlCreate = sqlCreate + ",";
                }
            }
            sqlCreate = sqlCreate + " ) ON [PRIMARY]";
            Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteNonQuery("server=local;database=TestData;uid=sa;pwd=;", CommandType.Text, sqlCreate);
        }

关于数据访问我就没有细写,大家可以根据自己的数据访问层情况自由改动就可以了。本文没什么技术含量,但真的对我的DataMigration帮助很大,使转移过程更自动化并且可配置,并且这是真实的应用。欢迎筒子们拍砖。

另有一个问题,也就是因为这个问题才导致的这些代码的出现:大家在使用sqlserver的import data时有没有出现这样一种状况---某列数据大多是(特别是前100行)数字,但是后来有些是数字+字符,这样在import结束后,那些带字符的数据就变成null了,并且系统自动认为该列是数字型。这个问题困扰我很久,到现在也没能解决。

转载于:https://www.cnblogs.com/GodSpeed/archive/2009/12/17/1626626.html

Office编程(二)C#读取Excel并存入数据库,通过XML自定义表名,是否重建并插入数据...相关推荐

  1. java读取excel(java读取excel表格存入数据库)

    怎么用java读取excel 里面的数据 * excel文件的读入和更新 * 使用的是jxl 技术. public static void main(String[] args) throws Row ...

  2. Spring boot读取Excel并存入PG数据库(一)

    Spring boot读取Excel并存入PG数据库(一) 目录 一.前言 二.项目需求 三.数据库表设计 四.代码实现和测试 五.总结 一.前言 进入9月以来,一直忙于项目,特别是临近国庆节这半个月 ...

  3. R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称、将数据写入Excel文件新的表单(sheet)中、将文件保存为xls文件格式(而不是xlsx)

    R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称.将数据写入Excel文件新的表单(sheet)中.将文件保存为xls文件格式(而不是xlsx) 目录

  4. C# 获取Excel工作薄中Sheet页(工作表)名集合

    #region 获取Excel工作薄中Sheet页(工作表)名集合/// <summary> /// 获取Excel工作薄中Sheet页(工作表)名集合/// </summary&g ...

  5. C# 获取Excel工作薄中Sheet页(工作表)名集合

    #region 获取Excel工作薄中Sheet页(工作表)名集合/// <summary> /// 获取Excel工作薄中Sheet页(工作表)名集合/// </summary&g ...

  6. 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...

  7. TeraData数据库,将Excel文件存入数据库并取出打开

    TeraData数据库 字段类型 :BLOB 错误提示:LOBs are not allowed to be selected in Record or Indicator modes. 控制面板-- ...

  8. 读取excel并将其转换为xml

    1.前言 项目开发过程中需要读取excel文档,并将excel文档中的内容转化为xml文档并保存在本地文件中. 比如要读取如下格式的excel文档: 通过代码实例中如下的代码段可以运行excel中有空 ...

  9. thinkphp使用phpoffice读取Excel并写入数据库

    读取Excel 使用Thinkphp5.1+Office扩展,composer添加依赖 "require": {"php": ">=5.6.0& ...

最新文章

  1. H5面试题---介绍js的基本数据类型
  2. 为何 IntelliJ IDEA 比 Eclipse 更好?
  3. C#与.NET程序员面试宝典 1.4.3 笔试(举例微软、雅虎笔试题目)
  4. 在路上---学习篇(一)Python 数据结构和算法 (4) --希尔排序、归并排序
  5. Python编码风格规范
  6. 单例模式android应用场景,应用最广的模式-单例模式(结合Android源码)
  7. E20180327-hm
  8. Springboot04整合Druid
  9. AcWing 836. 合并集合
  10. 智能优化算法:类电磁机制算法 - 附代码
  11. Atitit.软件硕士  博士课程 一览表 attilax 总结
  12. [xshell] xshell 及 xftp 官网无法下载解决
  13. html 中 div 盒子上下垂直居中显示
  14. Restful风格详解
  15. pyftpdlib 创建ftpserver
  16. minecraft兑换码领取!
  17. APP测试的主要内容
  18. 主流的大数据BI软件有哪些?
  19. 国家开放大学计算机应用基础终结性考试(大作业).zip
  20. C#实现发送和接收邮件的winform邮箱(保存至MySQL本地数据库)Mail Client

热门文章

  1. IPV6 IPV4双栈互通与静态路由
  2. class.forname找不到类_自媒体情感类文章素材怎么找?
  3. java 解决死锁_如何解决java中的死锁问题
  4. java 一次最多insert多少条数据_万J,一次Insert/Update数十万条记录,有什么办法提高效率么?...
  5. python中类的属性一般来说_python中实例属性和类属性之间的关系
  6. 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?
  7. 在线图表分析制作_(漂亮)象形柱状图表制作 在线图表制作工具
  8. ruby on rails连接mysql_ruby on rails 连接mysql数据库
  9. Java虚拟机(六)——虚拟机栈
  10. 设计模式004:抽象工厂模式