1.1使用对象连接OLE DB 数据源
OLE DB 数据源包含具有OLE DB 驱动程序的任何数据源,如SQL Server、Access、Excel、Oracle等。
OLE DB 数据源连接字符串必须提供provide属性及其值。
语法格式为
1
|
OleDbConnection mycon =
new
OleDbConnection(provider=提供者;DataSource=“文件路径”);
|
下面以一个案列学习一下
(1)使用OleDb方式读取Excel里的数据,并将Excel里的数据导入SqlServer数据库里
新建一个空白网站命名DataBindDemo,添加一个web窗体命名为ReadExcel.aspx;添加一个ASP.NET文件夹里的App_Data文件用来存放Excel表;
添加一个OleDBHelper.cs,OleDB数据源操作类这样会简化一些重复的操作(这里没用到,但可以为日后用提供方便),你只需要把他引入到你的后
台代码里就行了,很方便实用。
1.ReadExcel.aspx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<%@ Page Language=
"C#"
AutoEventWireup=
"true"
CodeBehind=
"ReadExcel.aspx.cs"
Inherits=
"DataBindDemo.ReadExcel"
%>
<!DOCTYPE html>
<html xmlns=
"http://www.w3.org/1999/xhtml"
>
<head runat=
"server"
>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=utf-8"
/>
<title></title>
</head>
<body>
<form id=
"form1"
runat=
"server"
>
<div>
<asp:Button www.ysgj1688.com ID=
"Button1"
runat=
"server"
OnClick=
"Button1_Click"
Text=
"导入"
/>
</div>
</form>
</body>
</html>
|
2.ReadExcel.aspx.www.baohuayule.net cs后台代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.www.duobaoyule2.cn WebControls; using System.Data.OleDb; using System.Data; using System.Data.SqlClient; namespace DataBindDemo { public partial class ReadExcel : System.Web.UI.Page { protected www.douniu178.com void Page_Load(object sender, EventArgs e) { string strConn = string.Format(@"Provider=Microsoft.Jet.Oledb.4.0; Data Source={0};Extended Properties='www.feifanyule.cn/ Excel 8.0;HDR=Yes;IMEX=1;'", "|DataDirectory|test.xls"); /*相当于连接字符串 后面那个是Excel标的相对路径一定要写对,不过这里也可以改成绝对路径;直接访问你的电脑上的表, 路径要写对,例如:Data Source=D:/test.xls; 针对如果上连接字符串 对相关属性进行说明如下:"HDR=Yes;”指示第一行中包含列名, 而不是数据,"IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。 Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。*/ OleDbConnection conn = new OleDbConnection(strConn); //连接上Excel表 try//进行异常处理 { conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [stuInfo$]",conn); //执行sql语句,找到表名为stuInfo的表 DataTable dt = new DataTable();//创建一个存储数据的表 adapter.Fill(dt);//将数据填充到datatable中 this.Session["dt"] = dt;//将数据存储在网站 Response.Write(dt.Rows[0]["stuNO"]+":"+dt.Rows[0]["stuName"]);//这样写是一行一行的输出,这里的["stuNO"]要跟Excel表中的对应 Response.Write(dt.Rows[1]["stuNO"] + ":" + dt.Rows[1]["stuName"]); Response.Write(dt.Rows[2]["stuNO"] + ":" + dt.Rows[2]["stuName"]); conn.Close(); } catch(Exception ex) { Response.Write(ex.Message); } } //加载到数据库里 protected void Button1_Click(object sender, EventArgs e) { DataTable dt = this.Session["dt"] as DataTable;//调用在网站几Session存储的数据 string strConn = "Data Source=.;Initial Catalog=Ole_Dbo;User ID=;Password=";//连接自己的sqlserver数据库 SqlConnection conn = new SqlConnection(strConn); try { conn.Open(); SqlBulkCopy bulk = new SqlBulkCopy(conn); //批量加载 bulk.DestinationTableName = "stuInfo"; //服务器目标表(数据库)表名 bulk.BatchSize = dt.Rows.Count; //每一批次中的行数 bulk.ColumnMappings.Add("stuNO", "stuNO"); //数据源中表的列名与目标表中的列名的对应关系 bulk.ColumnMappings.Add("stuName", "stuName"); bulk.WriteToServer(dt); //将DataTable 表中的数据复制到目标表中 conn.Close(); } catch (Exception ex) { Response.Write(ex.Message); } } } }
到这步已经可以读取表中的数据了
将Excel表里的数据加载到数据库中
在页面里加一个按钮并设置按钮事件,代码.ReadExcel.aspx.cs里的按钮事件
在数据库上创建一个表
在代码里连接好自己的数据库,代码已经在按钮事件当中
运行ReadExcel.aspx,点击导入按钮,这时数据就导入到数据库表中了
强调:表中一定要设置主键,如果不设置的话,点击多次按钮,会在表中添加重复记录
3.OleDBHelper.cs类(可以以后作为备用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Data;
using
System.Data.OleDb;
namespace
DataBindDemo.DBHelper
{
/// <summary>
/// OleDB数据源操作类
/// </summary>
public
class
OleDBHelper
{
private
string
strConn;
private
OleDbConnection conn =
null
;
/// <summary>
/// 构造数据源操作类
/// </summary>
/// <param name="sourceName">数据源文件名</param>
public
OleDBHelper(
string
sourceName)
{
if
(sourceName !=
""
)
{
strConn =
string
.Format(
"Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"
,sourceName);
conn =
new
OleDbConnection(strConn);
}
}
private
void
OpenConn()
{
if
(conn !=
null
&& conn.State == ConnectionState.Closed)
{
conn.Open();
}
}
private
void
CloseConn()
{
if
(conn !=
null
&& conn.State == ConnectionState.Open)
{
conn.Close();
}
}
private
OleDbCommand CreateCommand(
string
cmdText,
string
[] param,
object
[] values)
{
OleDbCommand myCmd =
new
OleDbCommand(cmdText, conn);
for
(
int
i = 0; i < param.Length; i++)
{
myCmd.Parameters.AddWithValue(param[i], values[i]);
}
return
myCmd;
}
/// <summary>
/// 根据命令语句返回数据集
/// </summary>
/// <param name="cmdText">命令语句</param>
/// <param name="param">参数数组,若没有参数可以设置为空</param>
/// <param name="values">参数值数组,只有当param不为空时有效</param>
/// <returns></returns>
public
DataTable FillDataTable(
string
cmdText,
string
[] param,
object
[] values)
{
OpenConn();
OleDbCommand cmd;
if
(param !=
null
)
{
cmd = CreateCommand(cmdText, param, values);
}
else
{
cmd =
new
OleDbCommand(cmdText, conn);
}
OleDbDataAdapter adapter =
new
OleDbDataAdapter(cmd);
DataTable dt =
new
DataTable();
adapter.Fill(dt);
CloseConn();
return
dt;
}
}
}
|