惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
Forbes - Security
Forbes - Security
The Last Watchdog
The Last Watchdog
TaoSecurity Blog
TaoSecurity Blog
Schneier on Security
Schneier on Security
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
Project Zero
Project Zero
O
OpenAI News
W
WeLiveSecurity
Security Archives - TechRepublic
Security Archives - TechRepublic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
H
Hacker News: Front Page
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
Help Net Security
Help Net Security
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
S
Security @ Cisco Blogs
Latest news
Latest news
AWS News Blog
AWS News Blog
U
Unit 42
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
博客园 - 司徒正美
B
Blog RSS Feed
C
Check Point Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker
Google Online Security Blog
Google Online Security Blog
Jina AI
Jina AI
aimingoo的专栏
aimingoo的专栏
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Last Week in AI
Last Week in AI
月光博客
月光博客
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
小众软件
小众软件

博客园 - GodSpeed

如何开始对项目进行管理(三) 如何开始对项目进行管理(二) 如何开始对项目进行管理(一) 负载均衡随记 ASP.NET应用程序生命周期趣谈(五) IIS7瞎说 ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期 ASP.NET应用程序生命周期趣谈(三) HttpModule ASP.NET应用程序生命周期趣谈(二) ASP.NET应用程序生命周期趣谈(一) C#和sqlserver数字数据类型学习 白话设计模式--实践应用--Chain of Responsibility(职责链)和factory模式 项目管理读书笔记--Manage it --识别和避免schedule games(9)总结 项目管理读书笔记--Manage it --识别和避免schedule games(8) 项目管理读书笔记--Manage it --识别和避免schedule games(7) 项目管理读书笔记--Manage it --识别和避免schedule games(6) 项目管理读书笔记--Manage it --识别和避免schedule games(5) 项目管理读书笔记--Manage it --识别和避免schedule games(4) 项目管理读书笔记--Manage it --识别和避免schedule games(3) - GodSpeed 项目管理读书笔记--Manage it --识别和避免schedule games(2)
Office编程(二)C#读取Excel并存入数据库,通过XML自定义表名,是否重建并插入数据 - GodSpeed - 博客园
GodSpeed · 2009-12-17 · via 博客园 - GodSpeed

在之前操作了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了,并且系统自动认为该列是数字型。这个问题困扰我很久,到现在也没能解决。