在数据库编程中,常会遇到要把数据库表信息导入Excel中, 有时则是把Excel内容导入数据库中。在这里,将介绍一种比较方便快捷的方式,也是比较普遍的。其实,这方法你并不陌生。原理很简单,把数据库表或Excel内容读取到dataset类型的变量中,再逐条插入到你想要导入的地方。不管是Excel转SqlServer,还是SqlServer转Excel,也是适用的。
其实,Excel的也可以用sql语句来操作的。说到这里,你也大概知道怎样做吧!接下来,通过一个实例来慢慢讲解。(该实例下载地址)
首先,提供该实例的数据库和表:
数据库名为:MyDataBase
表名为: CutClassTable
表创建语句如下:
该实例运行图:
一.Excel 导入到 SqlServer
大概步骤:
a.用sql语句中“select * from [Sheet1$]”语句获取 Excel内容,存放到dataset类型变量中。
b.用insert 语句把dataset内容插入到SqlServer里面。
源代码如下:
运行结果:
二.SqlServer导入Excel
步骤:(同上)
源代码如下:
运行结果:
知识点讲解:
a.Excel的数据库操作命名空间为“System.Data.OleDb”;
b.Excel中的表其实是工作区,新建一个Excel,你会看到左下角会有3个工作区(分别为Sheet1, Sheet2, Sheet3)。一般数据存放在Sheet1中。
c.Excel的数据库连接字符串为@"Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '" + strFileName + "';Extended Properties=Excel 8.0";
也可以如下:@"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = '" + strSaveFileName + "';Extended Properties='Excel 8.0;HDR=NO'";
参数一 | Provider = Microsoft.Jet.OLEDB.4.0 | 服务提供商 |
参数二 | Data Source = '" + strFileName + "' | Excel路径 |
参数三 | Extended Properties=Excel 8.0" | 扩展属性,这里是提供Excel8.0的oleDb数据库操作功能 |
在第二个连接字符串中,新增加了字段”HDR=NO“,表示若Excel里没有字段名,则用自动采用F1,F2。。作为字段名。(其实,我尝试过,是不行的。)还有一点要注意:在Extended Properties=后面可以再接其他扩展属性字段,但要用单引号' '来括起来,否则会报错:未找到可安装的ISAM;即语法错误。
d.StingBuider与String的区别和用法
Stringbuilder其实也是字符串。只不过,String是静态的字符串,而Stringbuilder是动态的 。为什么这么说?String 一当创建,它的大小已经是固定的了,如果在它后面再连接字符串,它会创建一个新的String实例,借于容纳更多的字符。所以,说String是静态的。相反,StringBuilder则类似于动态数组,每当连接新的字符串时,它会动态地申请空间,而不需要重新再创建一个。 其方法如下:
属性和方法名 |
使用
|
---|---|
StringBuilder.Length | 当期长度 |
StringBuilder.Capacity | 当前容量,能容纳的最大字符数目 |
StringBuilder.Append(string strChar) |
将信息追加到当前 StringBuilder 的结尾。 |
StringBuilder.AppendFormat(string strForm, string strMultiType ) |
用带格式文本替换字符串中传递的格式说明符。 |
StringBuilder.Insert(int index, string strInsertChar) |
将字符串或对象插入到当前 StringBuilder 对象的指定索引处。 |
StringBuilder.Remove(int start, int end) |
从当前 StringBuilder 对象中移除指定数量的字符。 |
StringBuilder.Replace(sting strOld, string strNew) |
替换指定索引处的指定字符。 |
详细用法,请参考MSDN:http://msdn.microsoft.com/zh-cn/library/2839d5h5(VS.80).aspx
最后,补充几点:
1.在SqlServer导入Excel例子中,我是采用新建一个表的方法,再往里面插入。其实,你可以直接往Sheet1里面插入数据,这样更直接,更方便。我要如此做是迫于无奈的,因为调用“insert into [Sheet1$](F1, F2, F3,F4) values(...)”中,总是提示无F2,F3,F4字段。无奈啊,HDR=NO/YES, 均试过,都不行。还想过,直接删掉Sheet1,再建个,可惜,也是夭折了。这里,就不发唠叨了。
2.导入Excel的方法还有几种,这里大概讲一下原理。其中一种,是通过创建Excel对象,采用“wSheet.Cells[ x, y] = "修改或添加数据"”的方式,详情见我相关的文章。
3.对于Excel, Access, SqlServer三者间或其他数据库的数据导入,这种方法也是适用的。
http://download.csdn.net/source/2237306
希望对大家有用!下一篇会讲到Word文档的数据导入以及在word文档里边动态设计表格并插入数据做成报表样式。