将Excel文件数据库导入SQL Server
将Excel文件数据库导入SQL Server的三种方案//方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server
openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel files(*.xls)|*.xls";
if(openFileDialog.ShowDialog()==DialogResult.OK)
{
FileInfo fileInfo = new FileInfo(openFileDialog.FileName);
string filePath = fileInfo.FullName;
string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0";
try
{
OleDbConnection oleDbConnection = new OleDbConnection(connExcel);
oleDbConnection.Open();
//获取excel表
DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
//获取sheet名,其中[0][1]...[N]: 按名称排列的表单元素
string tableName = dataTable.Rows[0][2].ToString().Trim();
tableName = "[" + tableName.Replace("'","") + "]";
//利用SQL语句从Excel文件里获取数据
//string query = "SELECT classDate,classPlace,classTeacher,classTitle,classID FROM " + tableName;
string query = "SELECT 日期,开课城市,讲师,课程名称,持续时间 FROM " + tableName;
dataSet = new DataSet();
//OleDbCommand oleCommand = new OleDbCommand(query, oleDbConnection);
//OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCommand);
OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query,connExcel);
oleAdapter.Fill(dataSet,"gch_Class_Info");
//dataGrid1.DataSource = dataSet;
//dataGrid1.DataMember = tableName;
dataGrid1.SetDataBinding(dataSet,"gch_Class_Info");
//从excel文件获得数据后,插入记录到SQL Server的数据表
DataTable dataTable1 = new DataTable();
SqlDataAdapter sqlDA1 = new SqlDataAdapter(@"SELECT classID, classDate,
classPlace, classTeacher, classTitle, durativeDate FROM gch_Class_Info",sqlConnection1);
SqlCommandBuilder sqlCB1 = new SqlCommandBuilder(sqlDA1);
sqlDA1.Fill(dataTable1);
foreach(DataRow dataRow in dataSet.Tables["gch_Class_Info"].Rows)
{
DataRow dataRow1 = dataTable1.NewRow();
dataRow1["classDate"] = dataRow["日期"];
dataRow1["classPlace"] = dataRow["开课城市"];
dataRow1["classTeacher"] = dataRow["讲师"];
dataRow1["classTitle"] = dataRow["课程名称"];
dataRow1["durativeDate"] = dataRow["持续时间"];
dataTable1.Rows.Add(dataRow1);
}
Console.WriteLine("新插入 " + dataTable1.Rows.Count.ToString() + " 条记录");
sqlDA1.Update(dataTable1);
oleDbConnection.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
//方案二: 直接通过SQL语句执行SQL Server的功能函数将Excel文件转换到SQL Server数据库
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel files(*.xls)|*.xls";
SqlConnection sqlConnection1 = null;
if(openFileDialog.ShowDialog()==DialogResult.OK)
{
string filePath = openFileDialog.FileName;
sqlConnection1 = new SqlConnection();
sqlConnection1.ConnectionString = "server=(local);integrated security=SSPI;initial catalog=Library";
//import excel into SQL Server 2000
/*string importSQL = "SELECT * into live41 FROM OpenDataSource" +
"('Microsoft.Jet.OLEDB.4.0','Data Source=" + "/"" + "E://022n.xls" + "/"" +
"; User ID=;Password=; Extended properties=Excel 5.0')...[Sheet1$]";*/
//export SQL Server 2000 into excel
string exportSQL = @"EXEC master..xp_cmdshell
'bcp Library.dbo.live41 out " + filePath + "-c -q -S" + "/"" + "/"" +
" -U" + "/"" + "/"" + " -P" + "/"" + "/"" + "/'";
try
{
sqlConnection1.Open();
//SqlCommand sqlCommand1 = new SqlCommand();
//sqlCommand1.Connection = sqlConnection1;
//sqlCommand1.CommandText = importSQL;
//sqlCommand1.ExecuteNonQuery();
//MessageBox.Show("import finish!");
SqlCommand sqlCommand2 = new SqlCommand();
sqlCommand2.Connection = sqlConnection1;
sqlCommand2.CommandText = exportSQL;
sqlCommand2.ExecuteNonQuery();
MessageBox.Show("export finish!");
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
if(sqlConnection1!=null)
{
sqlConnection1.Close();
sqlConnection1 = null;
}
//方案三: 通过到入Excel的VBA dll,通过VBA接口获取Excel数据到DataSet
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "Excel files(*.xls)|*.xls";
ExcelIO excelio = new ExcelIO();
if(openFile.ShowDialog()==DialogResult.OK)
{
if(excelio!=null)
excelio.Close();
excelio = new ExcelIO(openFile.FileName);
object[,] range = excelio.GetRange();
excelio.Close();
DataSet ds = new DataSet("xlsRange");
int x = range.GetLength(0);
int y = range.GetLength(1);
DataTable dt = new DataTable("xlsTable");
DataRow dr;
DataColumn dc;
ds.Tables.Add(dt);
for(int c=1; c<=y; c++)
{
dc = new DataColumn();
dt.Columns.Add(dc);
}
object[] temp = new object[y];
for(int i=1; i<=x; i++)
{
dr = dt.NewRow();
for(int j=1; j<=y; j++)
{
temp[j-1] = range[i,j];
}
dr.ItemArray = temp;
ds.Tables[0].Rows.Add(dr);
}
dataGrid1.SetDataBinding(ds,"xlsTable");
if(excelio!=null)
excelio.Close();
}
相关文章:

Android----PopupWindow
Android的对话框有两种:PopupWindow和AlertDialog。它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意 AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的 PopupWindow的位置按照有无偏移分&#x…

GitLab 在中国成立公司极狐,GitHub 还会远吗?
作者 | 宋慧 责编 | 苏宓出品 | CSDN(ID:CSDNnews)开源的种子已在中国落地开花。今天,中国的开源圈再次迎来一大盛事:全球第二大开源代码托管和项目管理平台 GitLab与红杉宽带等基金正式宣布成立中国合资公司极狐信…

消除危害 让BYOD策略更安全的几个秘诀
自带设备办公(BYOD)已经不是什么新鲜的事情,在近些年,随着移动设备的发展,员工利用自带设备办公已经成为一件非常平常的事情。 但是由于出于安全问题的考虑,一些企业禁止员工通过自带设备连接到公司网络中进行办公。他们不允许个人…

图神经网络如何对知识图谱建模? | 赠书
几乎所有早期的知识图谱嵌入的经典方法都是在对每个三元组打分,在实体和关系的表示中并没有完全考虑到整幅图的结构。早期,图神经网络的方法在知识图谱嵌入中并没有被重视,主要由于:早期的图神经网络更多是具有同种类型节点和边的…

浅析ado.net获取数据库元数据信息
写这个文章源于早先对ADO.Net获取数据库元数据上的认识,去年我在阅读ADO.Net Core Reference的时候曾经注意过DataSet的FillSchema的这个方法。这方面,在我之前的随笔中提到过Typed DataSet,而FillSchem与WriteXmlSchema的结合使用可以获得数…

账户密码策略修改
由于是虚拟测试环境所以AD 和 Exchange安装在同一台虚拟机上,所以修改账户密码策略已达到降低密码是设置的复杂度。 1.打开 --开始--管理工具--组策略管理 2.选择--Default Domain Policy 右键编辑 3.选择计算机设置--策略--安全设置--账户策略--密码策略 4.调整--密…

什么是新IP的四层网络技术
新IP技术共有四层:物理底层、网络服务、控制服务和编排。通过这四个层级实现网络虚拟化和软件定义网络,下面就来详细说一说什么是新IP的四层网络技术。 物理底层 新IP技术依然是一种基于硬件的技术,脱离不了物理底层,所有的虚拟软…

按拼音模糊匹配查询条件的生成类
转载了好几个地方,很难确定最早的出处。将源码贴出来先。1usingSystem; 2usingSystem.Text; 3usingSystem.IO; 45namespacets6{ 7 class test 8 { 9 private static string[] startChars {"啊", "芭", "擦","搭…

Java架构技术文档:并发编程+设计模式+常用框架+JVM+精选视频
本篇文章是我们整理的一份架构师的成长路线,包括了并发编程、设计模式、常用框架、中间件、微服务与分布式、常用工具、JVM、MySQL、数据结构与算法,还有架构师精选视频、架构师成长路线高清大图。又是新的一年,每一年都会有人在成为架构师的…

linux tune2fs简解(每日一令之五)
1:命令简介Linux下的文件检测命令,且可以自行定义自检周期2:用法[rootuyhd000225 ~]# tune2fs --help tune2fs 1.39 (29-May-2006) tune2fs:无效选项 -- - Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g group][-i interva…

物联网技术正颠覆传统医疗行业
如果你或你的爱人最近正在接受治疗,你可能会觉察到一些很酷的新设备可以辅助诊断和治疗。然而,你可能没有意识到,一部分这些设备已连接到互联网,成为物联网生态系统的一个重要组成部分。 到底如何连接核磁共振成像仪、CT扫描仪或实…

数组的进一步使用
数组是数据结构中最基本的结构形式,它是一种顺序式的结构,存储的是同一类型的数据。每个数组元素都拥有下标(index)和元素值(value),下标方便存取数据,而元素值就是被存储的数据。 数…

百度香港二次上市,12 岁开发者、AI 机器人同台敲响“芯片代码锣”
整理 | AI科技大本营(ID:rgznai100)今日,继 2005 年百度在纳斯达克上市后,百度在香港的第二次上市。上市首日开盘价254港元每股,截至发稿,为 252 港元每股,总市值约为 7129 亿港元。现场“敲锣人…

Linux启动流程(二)
//...根据grub内核映像所在路径,读取内核映像,并进行解压缩操作。并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立1.start_kernel(init/main.c)中调用一系列初始化函数:(1) 在屏幕上打印出当前的内核版本信息…

写代码可能是成为软件工程师最容易的部分
当然,写代码是超级重要的,但是我认为它只是整个过程中的一小部分,且不一定是最难学的。 学习如何写代码要花些时间,但是只要有足够的训练(每天写代码,坚持数年),你就能真正擅长它。 …

不是“重复”造轮子,百度飞桨框架2.0如何俘获人心
2016 年,百度 PaddlePaddle 打响了国产深度学习框架开源的第一枪。 2019 年 4 月,在 Wave Summit 深度学习开发者峰会上,首次发布了PaddlePaddle 的中文名“飞桨”,开始强调自己更适合中国开发者,以及更加专注于深度学…

基于Sql Server 2008的分布式数据库的实践(一)
原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选择“属性”。左侧选择“安全性”,选中右侧的“SQL S…

HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。
了解当用户对一个.aspx页面提出请求时,后台的Web服务器的动作流程。当对这个流程了解后,我们就会明白HttpHandler和HttpModule的作用了。 首先,来了解一下IIS系统。它是一个程序,负责对网站的内容进行管理,以及对客户的…

WebGL初探
目前,我们有很多方案可以快速的接触到 WebGL 并绘制复杂的图形,但最后发现我们忽视了很多细节性的东西。当然,这对初学 WebGL 是有必要的,它能迅速提起我们对 WebGL 的学习兴趣。当学习到更加深入的阶段时,我们更想了解…

Linux下用C语言最基本的程序开发与调试
1.建一个目录2.写代码,建一个hello.c文件代码:view plaincopy to clipboardprint?#include "stdio.h" main() { printf("Hello Linux.\n") } #include "stdio.h" main() { printf("Hello Linux.\n")…

全面升级!星环科技基础软件再升级,赋能数字中国建设
3月24日,星环科技举行2021线上发布会,支持10种主流数据模型的多模数据平台和数据云产品、实现AI建模的全生命周期管理人工智能等产品新版本齐齐亮相。 星环科技坚持核心技术自主原创,专注于大数据基础平台、分布式关系型数据库、数据开发与智…

脚本中echo显示内容带颜色显示
脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e格式如下:echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"例如:echo -e "\033[41;36m something here \033[0m"其中41的位置代表底色…

Java 8默认方法会破坏你的(用户的)代码
Java 8的默认方法试图尝试更进一步简化Java API。不幸的是,这一最近的语言扩展带来了一系列复杂的规则,但只有少部分Java开发者意识到这一点。这篇文章告诉你为什么引入默认方法会破坏你的(用户的)代码。 起初看来,默认…

JPA多对多关联
关于JPA多对多关系,这是使用学生与教师来表示。一个Student由多个Teacher教,同样一个Teacher也可以教多个学生。Student类如下: 1 package com.yichun.bean;2 3 import java.util.HashSet;4 import java.util.Set;5 6 import javax.persisten…

上市之后,青云存储平台 QingStor 也要“进军”云原生
作者 | 夕颜头图 | 下载于东方IC出品 | CSDN云计算(ID:CSDNcloud)3 月 16 日,北京青云科技股份有限公司(以下简称“青云科技”)登录科创板,昔日里频频出现在公众视野的云计算企业,终…

SQL Server 存储过程的分页方案比拼
建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI…

未来黑客入侵的不仅有电脑,还有人脑?
提到黑客入侵,我们能够知道的领域有很多,比如企业数据库、金融系统、个人信息、个人账户等。随着时代的变迁,人工智能、云计算、物联网等相继崛起,可能给黑客攻击的领域变得越发宽广。可是如果说黑客能攻击控制的不仅仅是电脑&…

不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令
我的BLOG里有一篇文章介绍了关于SQL注入的基本原理和一些方法。最让人感兴趣的也许就是前面介绍的利用扩展存储过程xp_cmdshell来运行操作系统的控制台命令。这种方法也非常的简单,只需使用下面的SQL语句:EXEC master.dbo.xp_cmdshell dir c:/但是越来越…

谷歌低调了 5 年的 Fuchsia OS,终于有望面世了!
种种迹象表明,低调了多年的 Fuchsia OS 可能就要出首个开发者版本了!整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)千呼万唤始出来,等待了五年,谷歌 Fuchsia OS 的首个开发者版本终于有望面世了&#…

chrom扩展开发-入门
2019独角兽企业重金招聘Python工程师标准>>> 先了解一下chrome的两种功能延伸方式: * 扩展(Extension) 1.指的是通过调用 Chrome 提供的 Chrome API 来扩展浏览器功能的一种组件,工作在浏览器层面,使用 HT…