您的位置:首页 > 数据库

转:数据库管理对象(SMO)-为什么没有System.Data.DBManagement命名空间?

2009-03-31 22:37 309 查看
最近要为我们的程序增加数据导出的功能,需用连接数据库,再列出数据库中的表。功能并不复杂,实现也没有难度。而且VS本身就自带了这个东东。如图:

Code

Server myServer=new Server();

myServer.Name="localhost";

myServer.TrustConnection=true;

Database db=new Database();

Database.Server=myServer;

TableCollection tables=Database.GetTables();
以上的示例只是简单的意思一下。如果要覆盖所有数据库管理工具的功能,应该是一个比较庞大的类库了。我不知道哪里是不是已经有这样的类库,如果没有,只有自己开发了...

帖子发表以后,根据很多朋友的指点(多谢下面的各位同学,具体就不点名了)。一共有三个答案。

1.Sql Server的SDK中的SQL Server Management Objects (SMO)应该就是本案的标准答案。美中不足的是,微软只提供Sql Server的数据库管理对象的类库,不支持其他数据库。

这是MSDN上SMO(SQL Server2005)的地址http://msdn.microsoft.com/zh-cn/library/ms162169(SQL.90).aspx

另外一篇介绍SMO的文章http://hi.baidu.com/qualylee/blog/item/0e4e0e33a64127fb1a4cff53.html

2.MyGeneration的MyMeta.dll中。功能肯定不如SMO强,但是提供了对数据库管理的比较丰富的类,并且支持十几种数据库。尤其可喜的是,MyGeneration现在是开源的。http://sourceforge.net/projects/mygeneration/

不过毕竟MyMeta.dll 的目的并不是用于管理数据库,因此可能对于管理数据库方面的功能少了点。

3.SQL Server Web Data Administrator 的SqlAdmin.dll。SQLWebAdm 是在CodeComplex的一个开源项目,也是微软团队开发的,因此也只支持Sql Server。该项目主要是SQL Server管理器的Web版本(不过好像很久没有更新了最近更新时间2007年11月),但是它并没有引用SMO的类库而是自己开发了SqlAdmin.dll,也许是为了独立吧。SqlAdmin.dll中的类跟MyMeta.dll中MyMeta.Sql命名空间的类有些类似,可谓英雄所见略同吧。

http://www.codeplex.com/SqlWebAdmin

补充:实用ADO.NET的DbConnection 类的 GetSchema 方法也可以获取数据库的架构信息。

http://msdn.microsoft.com/zh-cn/library/kcax58fh(VS.80).aspx

我们的项目需要自动生成导入数据的脚本,假如目标数据库中已经存在数据,对于自增列值冲突的问题要有特殊的解决,等我研究好了我会在下篇随笔中公布源代码和详细描述,假如哪位朋友已经有现成的解决方案,也希望不吝赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐