2023年2月

NHibernate、Castle-ActiveRecord和PetShop架构的C#代码生成工具 Database2Sharp



文件大小

5655KB

更新时间

2009-5-7

下载地址


http://www.iqidi.com/Download/Database2SharpSetup.rar

在线帮助:


2009-5-7修改:增加企业级别的界面自动生成,集成在Enterprise Library架构中,并更新EditControl、SearchControl和分页控件的Web界面层控件,并修正一些小问题。版本升级为5.0
2009-2-10修改:更新EditControl和SearchControl这两个Web界面层控件,并修正一些小问题。
2009-1-5修改:增加Java框架(Ibatis+Spring+struts+Extjs)代码的生成;添加Java实体类快速生成。
2008-12-28修正:修正对SQL Server 2005部分数据库显示有问题的错误。完善Enterprise Library代码生成。
产品说明如下:
★软件功能
深田之星Database2Sharp,是一个NHibernate、Castle-ActiveRecord、Enterprise Library和PetShop架构的C#代码生成工具,提供了对MS Sql2000、MS Sql2005、Oracle、Mysql、Access的支持;可以生成各种架构代码,导出数据库文档、浏览数据库架构、查询数据、生成Sql脚本等。 主要的功能如下:
1、Castle的ActiveRecord代码生成功能,准确生成各种关系。
2、NHibernate代码生成,生成相应的实体类和HBM文件。
3、PetShop架构代码的生成(多种形式),直接生成所需的解决方案,为你封装了功能强大的基础类库和数据访问基类。
4、Web界面自动生成功能,生成列表、增加、修改界面代码和后台代码,包括烦琐的绑定数据和赋值语句代码,为你封装具有漂亮界面和布局的编辑、查看、添加和分页控件,随手可得,率性而为。
5、
Enterprise Library代码生成,生成整个项目工程框架,包含实体类、数据访问类、业务类、Asp.net页面类,利用泛型及缓存机制,良好的架构极大简化代码,强大完善的基类使你甚至不用编写一行代码。
6、可以查看数据库的信息和实现查询分析器的功能,可以很快地看看数据库的信息。
7、实体类快速生成,提供各种常用的实体类代码生成,直接在窗体中显示,并用语法高亮显示,方便拷贝使用。
8、数据库文档的生成,在模块设计中非常有用,谁想去写描述和字段名称,类型的对应关系呢?
9、测试数据脚本的生成,在外键非常复杂的表中,我们想添加一条记录都是很容易哦,这个可以更加表的外键关系调整插入测试数据的顺序,很周到吧。
10、增加Select、Update、Insert和Delete基本语句代码的生成,方便您直接在代码中使用。
11、增加Java框架(Ibatis+Spring+struts+Extjs)代码的生成;添加Java实体类快速生成。
12、增加企业级别的界面自动生成,集成了标准、美观、统一的界面元素。
软件提供非常方便的数据库配置管理功能,用户根据不同的数据库类型输入所需的信息即可配置好不同的数据库;所有的代码生成及其他功能可以在不同的数据库中进行切换;软件支持表名称别名修改,字段别名修改等(用于代码的引用),对于是中文的数据库表名称和字段名称,非常方便。

★系统需求

深田之星Database2Sharp 使用C# 2.0开发 适运行在 Microsoft WindowsNT/2000/XP/2003 等平台,但必须安装有.Net 2.0平台.

如果您的计算机不能运行本程序,强烈建议您下载 Microsoft .NET Framework 2.0 运行库。 MicroSoft .NET Framework 2.0 官方下载地址:
http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=zh-cn&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe

代码生成操作



NHibernate、Castle-ActiveRecord、Enterprise Library和PetShop架构的C#代码生成操作提供了统一的操作方式,步骤基本上一样。首先在数据库或者表节点上使用右键菜单,在弹出的菜单中选择“代码生成”-》“****代码生成”(也可以选择其他方式的代码生成),如下图所示。

在出现的向导视图中,选择需要生成代码的数据库,如下图所示,然后继续下一步操作。

在向导的左边选择需要生成代码的表(可以双击鼠标选择),如下图所示,然后单击下一步。

在出现的向导视图中输入生成代码所需的一些基本信息,如下图所示,然后单击下一步。

在接下来的视图中,系统确认用户的一些信息,如果确定并想生成所需的代码,单击“完成”即可。

目前网络上有很多成熟的分页控件, 不过很多都是基于Sql语句进行分页, 而且直接绑定到分页控件中, 不能通过实体集合进行绑定, 因此不是很适合我目前项目的架构开发, 偶然一次机会在博客上看到有"永不言拜"先生发表的
Sqlserver存储过程和C#分页类简化你的代码!
一文, 深受启发, 结合我正在使用的架构写了一个分页控件。

分页控件在Web开发中是不可或缺的一个控件, 但目前很多分页控件, 是通过设置Sql语句的方式进行分页, 这种方式的分页控件的缺点是和数据库紧密联系一起, 需要定制输出内容的时候, 需要绑定数据库字段的名称, 而且需要在底层拼接Sql语句以供分页控件调用. 在分层比较明显的架构中, 这种从界面层直接到数据库底层的操作破坏了分层的优雅和特点.
如果能够利用分页控件的专有特点(易用/分页检索)和分层架构的特点(共享实体类, 隔离底层和细节), 使得分页控件布局的时候访问的是实体类的信息, 而有可以按页进行数据检索, 那么就可以完美解决这个问题.

我在业余时间一直希望能够解决这个问题, 通过不断的摸索以及对分页控件的分析研究, 终于较好的解决了目前架构中采用的分页控件所存在的一些不足, 希望能够在将来的项目中使用.
该分页控件在数据库层是通过一个存储过程进行分页的计算处理, 在数据访问层通过代码调用存储过程进行获取记录数或记录数据, 每个层通过一个分页控件的实体类进行数据传递, 实现分页控件所需信息的传递.
控件的效果如下所示:代码请在在连接
http://www.wuhuacong.com.cn/UpLoadFile/PagerDemo.zip
下载
分页控件示例
附件
中包括了通过分页的存储过程脚本, 控件代码, 控件传递实体, 业务逻辑代码, 页面测试代码.




///

<summary>


///
根据条件查询数据库,并返回对象集合(用于分页数据显示)

///

</summary>


///

<param name="condition">
查询的条件
</param>


///

<param name="info">
分页实体
</param>


///

<returns>
指定对象的集合
</returns>



protected

virtual
ArrayList BaseFind(
string
condition, PagerInfo info)



{

ArrayList list

=

new
ArrayList();


PagerHelper helper

=

new
PagerHelper(tableName, condition, ConnectionString);

info.RecordCount

=
helper.GetCount();


PagerHelper helper2

=

new
PagerHelper(tableName,
false
,
"
*
"
, primaryKey,

info.PageSize, info.CurrenetPageIndex,

false
, condition, ConnectionString);


using
(IDataReader dr
=
helper2.GetDataReader())



{

while
(dr.Read())



{

list.Add(

this
.DataReaderToEntity(dr));

}



}



return
list;

}





///

<summary>


///
根据条件查询数据库,并返回对象集合(用于分页数据显示)

///

</summary>


///

<param name="condition">
查询的条件
</param>


///

<param name="info">
分页实体
</param>


///

<returns>
指定对象的集合
</returns>



public
ProductsCollection Find(
string
condition, PagerInfo info)



{

ProductsCollection products

=

new
ProductsCollection();

products.AddRange(

base
.BaseFind(condition, info));

return
products;

}





//
页面后台调用代码如下:


private

void
SearchData()



{

PagerInfo info

=
Pager1.PagerInfo;

Pager1.DataSource

=
product.FindByProductName(
this
.txtProductName.Text, info);

Pager1.PagerInfo

=
info;

Pager1.DataBind();

}




public

void
PageIndexChanged(
object
sender, Pager.PageIndexChangedEventArgs e)



{

SearchData();

}



private

void
btnSearch_Click(
object
sender, System.EventArgs e)



{

Pager1.CurrentPageIndex

=

1
;

SearchData();

}


希望对大家有帮助!!

目前有很多代码生成工具,很多做得很好,我在上一篇关于代码生成工具的随笔(
代码生成工具随笔(1) ---关于代码生成器
)中,大概介绍了一些代码生成工具的现状,也得到很多人的关注。
由于本人很早就在代码生成工具方面有所研究,因此在开发过程中没有使用CodeSmith,MyGeneration子类的生成工具,我觉得很多地方使用这些工具还是很麻烦,按照别人定制模板总是感觉很乏味,没有满足感和成就感,感觉自己掌握生成工具的核心代码总是很好(实际上也是,而且可以很快定制出新的架构代码生成),另外如果自己掌握了数据库的一些信息,还可以作很多事情,不仅仅是一般的代码生成了, 如还可以生成数据库文档,测试数据导入等等的一些。
在实际的开发中,公司很多同事、朋友都提出了很多很好的建议和需求,因此我的代码生成工具也在不断的改进完善中,从开始的一般代码生成,到一个架构完整解决方案的生成, 从开始的控制台程序到整合很多功能Windows Forms 程序,一切都不断的完善中...

本站的代码生成工具已经放在了
www.iqidi.com
上,可供下载使用

我的C#代码生成工具下载地址:
(个人网站)下载地址:
http://www.iqidi.com/Download/Database2SharpSetup.rar
(华军软件)下载地址:
http://www.newhua.com/soft/54592.htm
(天空网站)下载地址:
http://www.skycn.com/soft/32456.html
下面截一些图像,对C#代码生成工具进行介绍,希望能够给大家带来更多的信息和帮助。
1。支持NHibernate代码和PetShop架构代码的生成(多种形式).
2。可以查看数据库的信息和实现查询分析器的功能,可以很快地看看数据库的信息哦
3。数据库文档的生成,在模块设计中非常有用,谁想去写描述和字段名称,类型的对应关系呢,笨!
4。测试数据脚本的生成,在外键非常复杂的表中,我们想添加一条记录都是很容易哦,这个可以更加表的外键关系调整插入测试数据的顺序,很周到吧。
5。最新加入了Web界面自动生成功能
6。最新加入了Castle的ActiveRecord代码生成功能

Database2Sharp升级到V3.5版本功能增加或者改进:
1. 增加国际化语言支持(提供中文和英文两种界面)
2. 增加数据库表结构SQL脚本的生成(各种不同的数据库生成不同的SQL脚本),在打开表信息的时候同时在下方生成。
3. 增加Select、Update、Insert和Delete基本语句代码的生成。
4. 增加实体类快速生成的功能,直接在窗体中打开,并用语法高亮显示。
5. 增加可以对表进行选择性生成代码的功能。
6. 增加对MySQL数据库GBK的支持,方便使用中文操作,完好支持MySQL5.0。
7. 改善SQL Analyzer和测试SQL脚本的操作。
8. 改善数据库配置项管理,提供更方便简单的操作。

blog_pic1.jpg

下面这个是代码生成工具生成的代码,一个解决方案中包括各层所需要的代码哦,另外Petshop架构一、三中生成实体类对应的集合,我们完全可以使用该集合代替ArrayList,而且该集合对象是采用目前最好的实现方式来做的,继承自可以排序的集合类。目前我还没有完成页码代码的生成,下一步工作就是要做这个事情,呵呵。
生成的代码工程
NHibernate代码主要是生成实体类的代码和HBM文件, 这些类的关系是自动根据您的表关系自动完成的哦,比较智能吧

Web界面代码和后台操作代码等自动生成,你如果开发Web的话,会节省你很多调整界面的时间,加快开发效率


Castle代码目前主要是生成实体类的代码(包含各种ActiveRecord所需要的Attribute), 关系自动生成,模版代码的定制能力更强。

using System;
using System.Collections;
using System.Xml.Serialization;
using Castle.ActiveRecord;

namespace HuaweiSoftware.IPSPBD.Entity
{
[ActiveRecord("Product")]
public class ProductInfo : ActiveRecordBase
{
#region 成员变量

private IList m_itemList;
private string m_productId;
private CategoryInfo m_category;
private string m_name;
private string m_descn;

#endregion

#region 属性

[HasMany(typeof(ItemInfo), Table="Item", ColumnKey="ProductId")]
public virtual IList ItemList
{
get
{
return this.m_itemList;
}
set
{
this.m_itemList = value;
}
}

[PrimaryKey(PrimaryKeyType.Assigned, "ProductId")]
public virtual string ProductId
{
get
{
return this.m_productId;
}
set
{
this.m_productId = value;
}
}

[BelongsTo("Category")]
public virtual CategoryInfo Category
{
get
{
return this.m_category;
}
set
{
this.m_category = value;
}
}

[Property("Name")]
public virtual string Name
{
get
{
return this.m_name;
}
set
{
this.m_name = value;
}
}

[Property("Descn")]
public virtual string Descn
{
get
{
return this.m_descn;
}
set
{
this.m_descn = value;
}
}
#endregion

#region 静态方法

public static void DeleteAll()
{
ActiveRecordBase.DeleteAll(typeof(ProductInfo));
}

public static ProductInfo[] FindAll()
{
return ((ProductInfo[])(ActiveRecordBase.FindAll(typeof(ProductInfo))));
}

public static ProductInfo Find(string ProductId)
{
return ((ProductInfo)(ActiveRecordBase.FindByPrimaryKey(typeof(ProductInfo), ProductId)));
}


#endregion

}
}

VB6
中如何使用C#开发的WebService
进行开发




伍华聪(
http://wuhuacong.com.cn/
)




1.

问题描述


在项目开发过程中,我们需要集成已有的权限管理系统,作为它本身的权限控制的模块。但是已有的权限管理系统是采用
C#
开发的,提供了
WebService
的权限访问接口,而开发项目是使用
VB6
开发的;两者可以互相沟通么?如果可以,如何才能实行在
VB6
中获取
WebService
中的信息呢?

2.

解决方法

2.1.

使用

Microsoft Office XP Web Services Toolkit 2.0
创建代理类

Microsoft Office XP Web Services Toolkit 2.0
(下载地址:
http://www.microsoft.com/downloads/details.aspx?familyid=4922060F-002A-4F5B-AF74-978F2CD6C798&displaylang=en
),该工具提供给开发者在
VBA
中快速访问和使用
WebService
的功能,使用几乎和在
VS.NET
中使用
WebServcie
一样方便,真是很爽。





































Snap1.jpg

Office XP Web Services Toolkit 2.0
安装界面

安装完
Office XP Web Services Toolkit 2.0
之后,打开你的
Office2003
套件中任一个,按快捷键(
Alt + F11
)或者菜单【工具】【宏】【
VisualBasic
编辑器】菜单进入,如下所示:

Snap2.jpg
进入

VBA

Office
工具菜单

在弹出的
VBA
程序窗口中,选择【工具】【
Web
引用】的菜单项,如下所示。

Snap3.jpg


在弹出的对话框中选择“
Web
服务
URL
”项,输入
WebService

URL
,如:
http://localhost/HWSecurity/WebServices/Security.asmx
,点击搜索,则在对话框的右上角列出
WebService
的方法,选择所有的方法,单击按钮“添加”即可在
VBA
代码中加入了
WebService
的代理类等相应的代码,如下所示。

Snap5.jpg

VBA

中添加
WebService
引用的对话框

生成的代码如下所示,其中包含了
WebService
对应的代理类和相关的实体类,还有一个工厂类。

Snap6.jpg
WebService

生成的
VBA
代理类、实体类等代码文件

2.2.

如何使用
VBA

生成的代理类和实体类等

在代码文件上使用右键菜单导出生成的代码文件,加入你的
VB6
工程文件中,如下所示。

Snap7.jpg

导出

VBA
代码文件


VB6
工程的引用中加入
MSSOAP30.DLL

MSXML3.DLL
这两个引用的
DLL
(请先安装
SOAP Toolkit 3.0
,地址:
http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&displaylang=en
),如图所示:

Snap8.jpg
在代码中使用

WebService
的代理类的时候,会有智能提示的,使用起来非常方便,如下所示,足以看到在代码使用
WebService
代理类获取数据是多么的方便。

Snap9.jpg
使用

WebService
代理类获取返回字符串方法和实体类数组代码示例如下所示。

Snap10.jpg

强大的模板引擎开源软件NVelocity

背景知识
NVelocity(
http://sourceforge.net/projects/nvelocity
)是从java编写的Velocity移植的.net版本,是java界超强的模版系统,.net版本的NVelocity目前版本为0.42。
NVelocity拥有完善的、丰富的模板语言(VTL,Velocity Template Language) ,几乎所有高级语言的特性都可以在模板引擎语言中找到。(如流程控制语句、数学运算、关系和逻辑操作符、函数定义、注释等等)

NVelocity可以做什么?
能够快速生成所需的代码、SQL脚本、页面文件等基于文本内容的文件
生成速度快、模板语言完善、灵活性好
容易学习、开源,免费使用
前身为Velocity(Java),使用者多,资料全

用途
在编写代码的时候,我们可以发现很多内容都是不需要变化的,变化的只是一小部分内容,对不同的对象,这些内容不同。
如果我们需要生成一个变化的文档,是否需要在代码拷贝这些不变化的内容么,或者把它剥离开放到其他的文件去么?还有我们是否能对这些内容有一些简单的控制和引用么?

简单例子(主要规则:引用以$开头用于取得什么东西,而指令以# 开始用于做什么事情)


#
set($foo = false)

#if ($foo)



this is true

#
elseif ($bar)


this is false

#
elseif (true)


this should be followed by two blank lines

#
end


## this is a single line comment


#*



this is a multi line comment

#
if (


*
#




#set($user = "jason")

#set($login = false)

#set($count = 5)


#if ($user == "jason")



the user
$user
is logged in
!


#
end


#if ($count == 5)



the count is
5
!


#
end


#if ($login == false)



the user isn
'
t logged in.

#end


#if ($count != 3)

\$count is not equal to 3

#end



变量说明
在VTL中,所有变量标识符的开头要加上$字符,如$Name,也可以用一种更加明确的方法表示,例如${name}。
变量标识符被映射到稍后即将介绍的VelocityContext对象。在模板引擎处理模板时,变量名称(如name)被替换成VelocityContext中提供的值

C#代码


Velocity.Init(
"
nvelocity.properties
"
);


VelocityContext context

=

new
VelocityContext();

context.Put(

"
list
"
, Names);


Template template

=

null
;

try




{

template

=
Velocity.GetTemplate(
"
test.cs.vm
"
);

}



catch
(ParseErrorException pee)



{

System.Console.Out.WriteLine(

"
Syntax error:
"

+
pee);

}



if
(template
!=

null
)



{

template.Merge(context, System.Console.Out);

}



注释
单行注释
## This is a single line comment


多行注释
#*
Thus begins a multi-line comment. Online visitors won't
see this text because the Velocity Templating Engine will
ignore it.
*#


属性或方法
$customer.Address
$purchase.Total

$page.SetTitle( "My Home Page" )
$person.SetAttributes( ["Strange", "Weird", "Excited"] )


指令
#set( $primate = "monkey" )
#set( $monkey.Friend = "monica" )

#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )

#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end


If / ElseIf / Else
Foreach 循环

#if( $foo < 10 )
<strong>Go North</strong>
#elseif( $foo == 10 )
<strong>Go East</strong>
#elseif( $bar == 6 )
<strong>Go South</strong>
#else
<strong>Go West</strong>
#end


<ul>
#foreach( $product in $allProducts )
<li>$product</li>
#end
</ul>

宏 (称为函数更合适)
#macro 脚本元素允许模板设计者在VTL 模板中定义重复的段。 Velocimacros 不管是在复杂还是简单的场合都非常有用。下面这个Velocimacro,仅用来节省击键和减少排版错误,介绍了一些NVelocity宏的概念。
可以带参数,参数放在宏名称的后面,空格隔开

#macro( d )
<tr><td></td></tr>
#end

#d()


#macro( callme $a )
$a $a $a
#end

#callme( $foo.bar() )

包含
#include 脚本元素允许模板设计人员包含(导入)本地文件, 这个文件将插入到#include 指令被定义的地方。文件的内容并不通过模板引擎来渲染。
#include( "one.txt" )

解析
#parse 脚本元素允许页面设计员导入包含VTL的本地文件。 Velocity将解析和渲染指定的模板。
#parse( "me.vm" )


在根目录NVelocity-***\test\templates下有各种模板语言语法的实例,在NVelocity-***\ examples目录下有如何在C#中使用模板引擎的简单例子。
在.NET中使用时候,需要应用两个程序集,NVelocity.dll 和 Commons.dll,这些文件在NVelocity-***\Build目录下。
可以加入nvelocity.properties对模板引擎的一些参数进行配置。