在CodeSmith中为了实现对数据库中表字段的选择和针对字段来设置属性,决定用XML文件作为中间数据的交换方式,在CodeSmith中读取数据库对象的信息不再使用SchemaExplorer来读取,而是转为直接对XML文件的读取。
这两天做了一个配置工具,先发个界面上来:
主要是用SQLDMO来获取数据库中的对象信息,并通过PropertyGrid控件来进行属性的设置,基本的功能已经实现。
网友的意见:
主界面从上往下由以下控件构成:
1.菜单
2.工具栏(数据库连接按钮、?、保存、退出)
3.左侧是TabControl和treeview控件、中间是Label(BorderStyle=Fixed3D)和ListView控件、右侧是PropertyGrid
根据界面,本人的实现思路如下:
1.数据库treeview列表
单击[数据库连接按钮]打开数据源配置对话框,其中包括数据源、连接字符串等等.如果数据源是SQL Server库可用以下方式枚举SQL Server实例
using System.Data.Sql
private void EnumInstance()
{
SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
DataTable dataTable = instance.GetDataSources();
//将数据库实例名添加至ComboBox,假如窗体有cboInstance控件
foreach (DataRow row in dataTable.Rows)
{
cboInstance.Items.Add(row[1]);
}
}
数据源连接如果能成功打开,则:将实例下的所有数据库加载至TreeView控件(数据库名可从SQL Server系统字典中获得,Oracle库同理)
某个SQL Server实例下的所有数据库可通过如下语句获得:
select name from master..sysdatabases
2.TreeView控件内容:
单击左侧树形结点至[表]结点后,引发treeView控件的AfterSelect事件,AfterSelect事件的内容大概如下:
select * from sysobjects //获得库中的表信息
select * from syscolumns //获得库中的列信息
用sysobjects和syscolumns两表作内联结就应该能做出ListView的内容项
我用的是SQLDMO,没有用SQL语句去系统表中查询