手机版

SQL server2008、ACCESS 2007、ORACLE的EXCEL2007导入、导出具体实现

时间:2021-08-03 来源:互联网 编辑:宝哥软件园 浏览:

类型:数据库类大小:40.7米语言:中文评分:6.6标签:立即下载工具功能:可以实现SQL server2008、ACCESS 2007、ORACLE数据库的EXCEL2007导入、导出以及存储过程运算。源码及安装包下载地址:http://datapie.codeplex.com/

本篇文章,主要介绍下工具中多数据库导入导出功能的实现,以及获取不同数据库架构信息的一些方法。

1.分布性接口。

主要包含导入、导出、基本结构化查询语言操作方法的定义。具体方法的用途看其名称基本可以知道。

使用系统;

使用系统。数据;

使用系统。收藏品;

使用系统。集合。通用;

命名空间数据。数据访问层

{

公共接口分布

{

#地区执行结构化查询语言操作

///摘要

///运行结构化查询语言语句

////摘要

///参数名=' SQL '/参数

int ExecuteSql(字符串(SqL);

#endregion

#地区返回数据表对象

///摘要

///运行结构化查询语言语句,返回数据表对象

////摘要

数据表返回数据表(字符串SQL,int StartIndex,int页面大小);

///摘要

///运行结构化查询语言语句,返回数据表对象

////摘要

数据表返回数据表(字符串SQL);

#endregion

#地区存储过程操作

int RunProcedure(字符串storedProcedure名称);

#endregion

#地区获取数据库计划信息

///摘要

///获取数据库中数据库列表

////摘要

IListstring GetDatabaseInfo();

IListstring GetTableInfo();

IListstring GetColumnInfo(字符串TableName);

IListstring GetProcInfo();

IListstring GetViewInfo();

int ReturnTbCount(字符串TB _ name);

#endregion

#地区批量导入数据库

///摘要

///批量导入数据库

////摘要

bool SQL bulkcopyimport(IListstring maplist,string TableName,DataTable dt);

#endregion

}

}

2.数据库数据库对该接口的具体实现方法

///摘要

///运行结构化查询语言语句,返回数据表对象

////摘要

公共数据表返回数据表

{

使用(SqlConnection连接=新的SqlConnection(连接字符串))

{

DataTable dt=new DataTable();

尝试

{

连接open();

sqldatadapter命令=new sqldatadapter(SQL,连接);

命令。填充(dt);

}

捕捉(系统数据。sqlclient。sqlexception(ex)

{

抛出新的异常(例如。消息);

}

返回dt;

}

}

///摘要

///运行结构化查询语言语句,返回数据表对象

////摘要

公共数据表返回数据表(字符串SQL,int StartIndex,int PageSize)

{

使用(SqlConnection连接=新的SqlConnection(连接字符串))

{

DataTable dt=new DataTable();

尝试

{

连接open();

sqldatadapter命令=new sqldatadapter(SQL,连接);

命令。填充(开始索引,页面大小dt);

}

捕捉(系统数据。sqlclient。sqlexception(ex)

{

抛出新的异常(例如。消息);

}

返回dt;

}

}

//返回制定表名的行数

public int ReturnTbCount(字符串tb_name)

{

使用(SqlConnection连接=新的SqlConnection(连接字符串))

{

尝试

{

字符串SQL='从' tb_name '中选择计数(*);

连接open();

SqlCommand cmd=新的SqlCommand(SQL,连接);

(同Internationalorganizations)国际组织计数=int .解析(cmd .ExecuteScalar().ToString());

返回计数;

}

捕捉(系统数据。sqlclient。sqlexception(ex)

{

抛出新的异常(例如。消息);

}

}

}

#地区架构信息

///摘要

///根据条件,返回架构信息

////摘要

///param名称='collectionName '集合名称/param

///param name='restictionValues '约束条件/param

///returnsDataTable/returns

公共静态数据表GetSchema(字符串collectionName,字符串[] restictionValues)

{

使用(SqlConnection连接=新的SqlConnection(连接字符串))

{

DataTable dt=new DataTable();

尝试

{

dt .clear();

连接open();

dt=连接. GetSchema(collectionName,restictionValues);

}

捕捉

{

dt=null

}

返回dt;

}

}

///摘要

///返回指定名称的架构信息

////摘要

///param名称='collectionName '集合名称/param

///returnsDataTable/returns

公共静态数据表GetSchema(字符串集合名称)

{

使用(SqlConnection连接=新的SqlConnection(连接字符串))

{

DataTable dt=new DataTable();

尝试

{

dt .clear();

连接open();

dt=连接. GetSchema(collectionName);

}

捕捉

{

dt=null

}

返回dt;

}

}

public IListstring GetDatabaseInfo()

{

IListstring DatabaseList=new Liststring();

数据表dt=GetSchema('数据库');

int num=dt .行。计数;

if (dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

数据库列表。添加(_DataRowItem['database_name']).ToString());

}

}

返回数据库列表

}

public IListstring GetTableInfo()

{

IListstring tableList=new Liststring();

字符串[] rs=新字符串[] { null,null,null,' BASE TABLE ' };

DataTable dt=GetSchema('tables ',RS);

int num=dt .行。计数;

if (dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

表格列表.添加(_DataRowItem['table_name']).ToString());

}

}

返回表格列表

}

public IListstring GetColumnInfo(字符串表名)

{

字符串[]限制=新字符串[] { null,null,TableName };

数据表表信息=获取模式('列',限制);

IListstring List=new Liststring();

int count=tableinfo .行。计数;

如果(计数0)

{

//for(int I=0;我数;(一)

//{

//列表。添加(表信息.行[i]["列名"]。ToString());

//}

foreach(表格信息中的数据行_数据行项目).行)

{

列表。添加(_DataRowItem['列名'])。ToString());

}

}

退货清单;

}

public IListstring GetProcInfo()

{

IListstring List=new Liststring();

数据表dt=GetSchema('过程');

int num=dt .行。计数;

if (dt!=空dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

if(_ DataRowItem[' routine _ type ']).ToString().ToUpper()!='FUNCTION ')

{列表。添加(_DataRowItem['routine_name']).ToString());}

}

}

退货清单;

}

public IListString GetFunctionInfo()

{

IListstring List=new Liststring();

数据表dt=GetSchema('过程');

int num=dt .行。计数;

if (dt!=空dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

if(_ DataRowItem[' routine _ type ']).ToString().ToUpper()=='FUNCTION ')

{列表。添加(_DataRowItem['routine_name']).ToString());}

}

}

退货清单;

}

public IListstring GetViewInfo()

{

IListstring List=new Liststring();

字符串[] rs=新字符串[] { null,null,null,' BASE TABLE ' };

DataTable dt=GetSchema('视图');

int num=dt .行。计数;

if (dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

列表。添加(_DataRowItem['table_name']).ToString());

}

}

退货清单;

}

#endregion

公共bool SQL bulkcopyimport(IListstring映射列表,字符串数据表名称

{

使用(SqlConnection连接=新的SqlConnection(连接字符串))

{

连接open();

使用(Sqlbulkcopy大容量复制=新Sqlbulkcopy(连接))

{

批量复制DestinationTableName=TableName;

foreach(映射列表中的字符串a)

{

批量复制。列映射。添加(一、一);

}

尝试

{

批量复制. writtetoserver(dt);

返回真;

}

捕获(例外e)

{

扔e;

}

}

}

}

3.2007年加入数据库对该接口的具体实现方法

其中大部分的方法实现基本相似。但ACCEE2007本身不支持存储过程,但支持单个插入、删除、更新等语句,在联合查询(工会)中,往往默认进入了存储过程架构下,所以导致接近在实现分布性接口时,需要进行一些特殊的处理。其中,本工具把删除和更新操作默认为存储过程,对查询和联合查询定义为视图。具体实现的代码如下:

公共bool IF_Proc(字符串sql)

{

if (sql .ToUpper().包含(' DELETE') || sql .ToUpper().包含('更新)

返回真;

else if (sql .ToUpper().包含(' SELECT') sql .ToUpper().包含(“进入”)

返回真;

否则返回错误的

}

public IListstring GetProcInfo()

{

IListstring List=new Liststring();

数据表dt=GetSchema('过程');

int num=dt .行。计数;

if (dt!=空dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

IF(IF _ Proc(_ DataRowItem[' PROCEDURE _ DEFINITION ']).ToString()))

{

列表。添加(_ DataRowItem[' PRocESS _ NAME ']).ToString());

}

}

}

退货清单;

}

public IListString GetFunctionInfo()

{

IListstring List=new Liststring();

数据表dt=GetSchema('过程');

int num=dt .行。计数;

if (dt!=空dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

if(_ DataRowItem[' PRocESS _ TYPE '].ToString().ToUpper()=='FUNCTION ')

{列表。添加(_ DataRowItem[' PRocESS _ NAME ']).ToString());}

}

}

退货清单;

}

public IListstring GetViewInfo()

{

IListstring List=new Liststring();

字符串[] rs=新字符串[] { null,null,null,' BASE TABLE ' };

DataTable dt=GetSchema('视图');

int num=dt .行。计数;

if (dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

列表。添加(_DataRowItem['table_name']).ToString());

}

}

//添加被架构默认为存储过程的视图

dt=GetSchema('过程');

num=dt .行。计数;

if (dt!=空dt .行数。计数0)

{

foreach(dt中的数据行_数据行项目).行)

{

if(!IF _ Proc(_ DataRowItem[' PROCEDURE _ DEFINITION '].ToString()))

{

列表。添加(_ DataRowItem[' PRocESS _ NAME ']).ToString());

}

}

}

退货清单;

}

public int ReturnTbCount(字符串tb_name)

{

使用(oledb连接连接=新的oledb连接(connectionString))

{

尝试

{

字符串SQL='从' tb_name '中选择计数(*);

连接open();

oledb命令cmd=新的oledb命令(SQL,连接);

(同Internationalorganizations)国际组织计数=int .解析(cmd .ExecuteScalar().ToString());

返回计数;

}

捕捉(系统数据。sqlclient。sqlexception(ex)

{

抛出新的异常(例如。消息);

}

}

}

#endregion

//批量插入数据方法的实现

公共bool SQL bulkcopyimport(IListstring映射列表,字符串数据表名称

{

尝试

{

使用(oledb连接连接=新的oledb连接(connectionString))

{

连接open();

OleDbDataAdapter=新的OleDbDataAdapter('从' TableName '中选择*其中1=0 ',连接);

OleDbCommandBuilder构建器=新的OleDbCommandBuilder(适配器);

int rowcount=dt .行。计数;

for(int n=0;行数;n)

{

dt .行[n].setAdded();

}

//适配器UpdateBatchSize=1000

适配器。更新(dt);

}

返回真;

}

捕获(例外e)

{

扔e;

}

}

4.甲骨文数据库对该接口的具体实现方法

神谕数据库查询数据库计划的信息,用的是甲骨文自带的甲骨文。数据访问。客户端库,其中有一些架构信息与微软在。Net2.0中提供的方法不一致。具体的实现,可以参见源码,在此不列出了。

版权声明:SQL server2008、ACCESS 2007、ORACLE的EXCEL2007导入、导出具体实现是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。