Posted on 2005-12-28 21:15
李天平 阅读(21345)
评论(87) 编辑 收藏
已更新V1.9.2版,请重新下载。
1.修正web项目发布,目录检测,子目录发布不成功的问题。
2.语法高亮功能更新。
3.支持视图。
-----------------------------
1. 更新了数据访问基础类
2. 数据层实现了基于参数的方式。生成数据层时可以自由选择:基于SQL语句,基于参数,基于存储过程
3. 数据库树,表下面加字段显示。方便写语句时对照。
4. 解决了Getlist() 参数不一致(解决)
5. listview表信息,字段信息排序。
6. 实现了热键呼出。当你点窗口的[X]关闭程序时,程序会自动隐藏运行在任务栏,通过热键可以快速呼出窗口。
最新版本信息请关注:
http://ltp.cnblogs.com/category/44293.html
最新版下载
基于该模式的一套示例系统源码,包括完整UI。
下载地址:
该项目是一个基于接口的工厂模式的三层架构示例项目。
注意:由于系统UI使用了微软的iewebcontrols.msi,请大家使用时自行安装该控件。
*本软件当前版本基于VS.Net2003+SQL Server2000开发,未在.net2005和sql2005上测试和运行过,如有些问题,请大家谅解。以后会升级一个2005的版本的。
Feedback
这次更新采纳了几位网友的提议:如: 兰亭,InterMa等提议基于Parameters的形式的数据层和一些界面操作建议。zfphere , zhouwei 数据访问类建议。在此表示感谢!希望大家多提建设性意见。
@Fun,你说的默认密码是哪个,
如果说的是:系统框架源代码DbToCodeDemo.rar
实在不好意思,忘了告诉大家了:管理员 admin, 密码是 1
我的SQL Server2005上运行要出错。
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参阅此消息的结尾。
************** 异常文本 **************
System.Exception: Invalid object name 'sysproperties'.
at CodeBuild.SQLServer.DbObject.Query(String SQLString)
at CodeBuild.SQLServer.DbObject.GetColumnInfoList(String DbName, String TableName)
at DbToCode.main.SetModelName(String Dbname, String Tablename)
at DbToCode.main.comboBox2_SelectedValueChanged(Object sender, EventArgs e)
at System.Windows.Forms.ListControl.OnSelectedValueChanged(EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedValueChanged(EventArgs e)
at System.Windows.Forms.ListControl.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
at System.Windows.Forms.ComboBox.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
@浮云 ,本软件当前版本基于VS.Net2003+SQL Server2000开发,未在.net2005和sql2005上测试和运行过,可能会有些问题.请大家谅解.以后准备升级一个2005的版本.
这个软件实在是太强大了,很厉害啊!
但是使用中有些问题。
现在我有几个不成熟的建议:
1、关于IDAL接口。是不是能简化一下这个接口,只使用一个数据接口就行了。现在这个软件每一个数据表都生成一个接口,后面又每一个数据表都生成一个类继承这个接口,好像这个接口的意义就不大了。(但是按照您的这个结构,我也想了一下,好像那个工厂类有点问题,因为每个实体都不一样,不能返回相同的数据类型,只能返回一个object类型,必须得在调用中进行数据转换)
2、能否直接在软件中生成数据表和字段(不是用sql的方式),并增加一个表说明和字段说明,并且能自动生成数据字典。生成数据字典对系统后来的查询太有用了。(我也知道这个的工作量蛮大的,呵呵)
3、能否在软件中增加对视图的支持,因为在设计中,试图是大量使用的,显示数据的时候,很多情况下都不会是只单单显示一个数据表的内容,而是要显示多个关联表的数据内容,如果在生成存储过程的时候能够加入对视图或者多表关联的支持,那就太完美了。
另外,大虾能否公开一下例子里面关于Excel.dll和COM.Excel.dll的使用方法,呵呵,这两个实在是好东西啊!
最后,如果大虾这个软件以后转为共享软件的话,我一定交费注册支持您的开发,只有作为一个开发人员,才知道做到这样的软件要花费多少的时间和精力,希望您能坚持下去,祝开发顺利!
我想引用你的那个spliter。该要注意哪些要修改的。总是说原文件c:\Inetpub\wwwroot\HSBKOA\web\Tree\lefoffic.aspx.cs未能打开,系统找不到指定的文件。我把Global.asax文件也该了。请指教。
不错的程序。
我也有一个很相似的程序做到七八成,生成 成的代码也是用petshop为蓝图的,生成引擎写好了,就差界面。后来权衡得失,有了更重要的事要做,就没时间去完成了。
可以考虑22sanshi网友的想法,将这个软件作精,然后共享出去,
还能捞点外快。(如果作者时间充足)
或者将它开源,到类似sf.net的地方建一个project,这样大家可以一起维护,
这个软件也会有更好的发展。(如果作者时间不多的话)
@sanshi ,@InterMa等,非常感谢你们的理解与支持。(也算对自己深夜辛苦的一点安慰),我会一如既往地来做好这个软件(由于平常工作忙时间问题,只能一步步来),争取做的更灵活,更强大。满足大多数开发人员的工作需要,让大家开发变得轻松,工作变得愉快,为大家节省大量的时间。目前我还不打算共享收费,大家可以随便下载使用。
楼主能不能给一个应用到XML Web Services的例子!
另外我对这种使用Model的方式操作一个实体有些疑惑,在WinForm方式下我却往往需要同时操作很多个实体,也就是会经常出现一次保存一个DataTable或多个DataTable的情况,该如何解决呢?
在你提供的例子中LiTianPing.BLL.SysManage中有这样一个方法:
public void DeleteLog(int days)
{
ISysManage dal=LiTianPing.DALFactory.SysManage.Create();
string str=" DATEDIFF(day,[datetime],getdate())>"+days;
dal.DeleteLog(str);
}
这样在商业逻辑层中出现了跟数据库相关的特殊函数"DATEDIFF",这样是不是商业层与数据访问层就混乱了?
系统源码DbToCodeDemo 做了更新:
新增:
1. 无需Excel支持,导出Excel报表。
2. 动态无刷新演示。(Ajax)
3. 2个常用的日期控件。
@戴,spliter页就是一个aspx页面,没有任何其他交互代码,无需修改的。只和Application[Session["Style"].ToString()有关,怎么会有 lefoffic.aspx.cs这样一个页,好像根这个没什么关系吧。
@cbo ,这里项目只是一个例子,让大家理解整个系统的模式,一个架子,只是起个抛砖引玉的作用,很多代码需要自己根据自己的业务情况往里填充就可以了。Web Services的例子我可以后期给你加上,由于时间问题,还有一些例子没有加上,慢慢完善吧。
辛苦啦~
【DbToCode 1.9.1 建议】
- 使用SyntaxTextBox,就不用在代码中手工控制文本的颜色了(http://surfsky.cnblogs.com/archive/2005/12/12/295814.html)
- IsHas --> Exist (IsHas这种表达语法是错误而且中文式的:)
- Model --> Entity (实体)
- int.Parse(obj.ToString()) --> Converter.toInt32(obj)
- 逗号后面请留个空格哦~
- 删除Folder这个层次的命名空间
- 支持导出ArrayList类型
- 支持视图
- 支持其它数据库
- 能否支持最简单的结构:一个类就可以将一张表的实体和数据操作都封装在一起。
毕竟绝大多数的项目并不需要操作异种数据库,所以不需要接口,也更不需要类厂
而数据和行为也正是对象的组成部分,完全可以封装在一起。
- 对于DbManagerSQL.cs文件
回车格式不对
DbManagerSQL提供的都是静态函数,且每个函数都进行开闭数据库、异常扑获,对于循环频率较高的场合效率是很低的。
标准点的做法是改造为成员函数,并将异常交与上层代码扑获。
@Kevin Cheng ,谢谢你的建议,你的SyntaxTextBox控件不错,很好用!
对于你提的几条建议,我认真接受。更期望更多的同仁给于大量的建议。以期做的更好更完善,真的能为大家提供便利。
你提到- 删除Folder这个层次的命名空间 的问题,可能是我没说明白,如果不需要,留空就可以了,在代码里会自动处理清除。因为有的人对项目下的功能有进行分类或者子模块划分的需求。后面的几个有的已经在开发和考虑中了。不过还是谢谢你的建议。
楼主挺辛苦的,不过关于DBNull的问题,我还是不太明白,再次请教:
代码自动生成器生成的Model类中的字段和属性应类似于以下代码:
public class Customers
{
public Customers()
{}
private string _customerid;
//...
public string CustomerID
{
set{ _customerid=value;}
get{return _customerid;}
}
//...
由于这些字段或属性是string等类型,无法存储DBNull值或对其赋DBNull值,而如果数据库中已经存在DBNull或需要存储DBNull,应如何处理,必竟这种情况还是经常遇见的。
在SQL Server2005上提示少sysObjects表
@johlon,本软件当前版本基于VS.Net2003+SQL Server2000开发,由于目前还没有2005的正式版本,未在.net2005和sql2005上测试和运行过,可能会有些问题。请大家谅解。以后会升级一个2005的版本的。
@Hi,我的qq:199629351,可以详细聊一下你的问题。
WEB项目发布时如果输入一个不存在的盘符,系统会出错。
WEB项目发布不支持子目录。
一个发现,不知道这算不算问题
DAL层都是能过构造sql语句来完成Insert Modify Delete 操作的,容易引发sql注入
终于看到新版了,如果不是CSDN上面看到,我都不知道,楼主这次不发信同时偶们啊>_<
也看到了例子程序,感谢感谢!
@狐仙,已修正。
@pscj,你可能没有仔细看吧。有基于SQL语句,基于SqlParameter参数,基于存储过程 3种方式供你选择啊。
@kittow,不好意思,太忙了:),下次我群发告诉大家吧!
@NetFans,由于是网上的公用空间,所以有时候会出现连不上问题,不过过一会儿就会好了。
呵呵
支持
和petshop一样的模式
比如BLL层中要对多个class操作,Petshp的做法是将BLL层的组件部署到com+上,来享受事务
有时候,就省略了BLL层,直接调用Dal层了
毕竟扩展性和性能,哎。。。
建议加个自定义集合类呵。
目前我在vs2005编译通过,运行时还有些问题
谢谢
猜测是不是与工厂类的Assembly.Load有关,换Assembly.LoadFile一样,不知道怎么改
我又看了一下petshop,发现工厂类返回接口类型
return (PetShop.IDAL.IProduct)Assembly.Load(path).CreateInstance(className);
生成器返回的缓存,却没从缓存读取,是不是这里的问题呢?
另petshop的BLL是带参数Ilist.
解决后的存储过程getlist(),BLL不带参数,后面的函数却有参数。
请用vs2005的兄弟帮忙解决以下拉
return (PetShop.IDAL.IProduct)Assembly.Load(path).CreateInstance(className);
这里创建了数据层className的示例,className必须是实现继承PetShop.IDAL.IProduct的,并且这里的path必须是一个独立的程序集.简单的理解举个例子必须是独立的项目编译的DLL,你可以去掉缓存直接用
//从程序集创建对象实例
string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];//数据层的程序集名称
return (IDbObject)Assembly.Load(path).CreateInstance(path+".DbObject");
这种方式创建对象的接口,前提是你的数据层className必须继承PetShop.IDAL.IProduct。
getlist()参数的问题,应该对应一致就可以了。
谢谢天平,耽误你的宝贵时间。
我因为现在不想再回头装vs2003,一心想在vs2005调试成功马上应用,急得胡言乱语了,我看见缓存的调用了。
可是我还是卡在
行 76: IArea dal=come.DALFactory.Folder.Area.Create();
行 77: return dal.GetList();
上次遇到未将对象引用设置到实例,我加了空值判断就ok,这次我故意在数据库写了一条数据,应该不是空值,难道没读出来?
我几天都没睡舒服了
我是想读出AREA表中省市县的值绑定到DropDownList
对不起,是我没有安装iewebcontrols.msi,现在Demo中的TreeView控件工作正常了。
我在delete.aspx中加一个checkright.ascx控件,并设置PermissionID="45",45是我要的权限。但是,在删除时,根本不执行权限检验。后来我发现ascx控件是在pageload事件以后执行的。所以执行不到ascx控件,就执行了返回到原来页面。
如何能让其检验权限呢?
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
LiTianPing.BLL.test bll=new LiTianPing.BLL.test();
int id=int.Parse(Request.Params["id"]);
bll.Delete(id);
Response.Redirect("test.aspx");
}
}
有一种解决方法是你可以把验证代码写到一个页面基类pageload里,在基类里做验证。
public class PageBase:System.Web.UI.Page
{
}
然后让其他页面继承它:public class Delete : PageBase
好方法。之所以问您,是怕把您的最初想法打乱,您说让我继承,我只好继承了。
李大哥,您辛苦了。多谢您,
厉害啊。LTP.Accounts.dll: 权限管理模块组件。
LTP.Common.dll: 通用类库
LtpPageControl.dll: 分页控件
这几个无源码?能公布么?
LTP.Net代码自动生成器 ,新增对Oracle数据库的支持,有需要者可以重新下载。使用时可通过菜单:数据源类型设置,来设置数据源类型。
楼主老大好强啊,
我要拼命学习,
真想要你的源码看看啊:)
好像没有关于列表的页面,那个分页存储过程的应用也没有,适合比较复杂的多条件查询么?
可以点击下了,由于使用网上的共享空间,所以,有时候会出现连不上,可以稍后再试。
连数据库,你是指代码生成器还是,示例项目源码。
如果是代码生成器,应该连的是你自己的数据库服务器。
如果是示例项目源码,里面提供了数据库的文件,你附加到自己的数据库服务器上就可以了。
http://litianping.bokee.com/inc/dbtocodedemo.rar
这个下载地址不好用了,那为有dbtocodedemo.rar 示例代码的朋友,请再提供一个下载地址,谢谢先!!
楼主,你附带一套系统框架源码的数据库表中为何没有主外键约束呢?
DOWN后简单试用了一下,发现在SQL数据库上不支持表的所有者撒?
一般的应用中,我们都会根据实际的业务需求,定义相关的数据库库用户并做出角色权限的定义;在楼主的程序中,所有的表都被处理成了默认的dbo用户。我就又得自己去替换一次了哦。
呵呵,关于楼主生成的代码在书写上的问题:
比如:
StringBuilder strSql=new StringBuilder();
这样的代码,在我们的项目组中,被定义成了一个D级的BUG;源码规范建议,所有的运算符两边应该有空格;逗号后面加空格。
建议楼主参考VS2005中的源码规发选项部分。
谢谢。
我打开的时候提示"无法创建或打开应用程序,问题很可能是因为本地web服务器上没按照所需要的组件.请运行..net安装程序并添加web开发组件"...
这是什么原因??需要配置什么地方码?
@fangyifeng,你指的是打开示例项目的时候吗?示例项目不需要什么特别的配置,只需要创建一个虚拟目录。
如果无法看到treeview,就安装一个iewebcontrols.msi控件就可以。
LTP.Net代码自动生成器 V1.9.1版的登陆名是sa
密码是多少呀?
您好,感谢您的代码生成器,很好的工具!
在此我使用工厂模式的时候,把产生的代码放在App_Code里(我使用的是2005)并未单独的在使用一个Assembly,不知道这样是否可以。我运行起来的时候也是出现这么一个问题
objType = Assembly.Load(path).CreateInstance(CacheKey); // 经常出错行
能否提供一个vs2005 的学习demo!
谢谢
LTP.Accounts.dll: 权限管理模块组件。
LTP.Common.dll: 通用类库
LtpPageControl.dll: 分页控件
能公布一下源码吗?
李兄,辛苦了,你做得很棒啊。。。
整体的应用涉及到代码的所有部分,文档、存储过程、类库,前台页面,都很齐全。而且能应用出针对模式应用的代码。所以我对这个软件有相见狠晚的感觉。。因为以前都是用自己写的蹩脚的代码生成器。。
有了这个之后,我感觉,李兄 ,你改变了我的工作,改变了我的生活。。
仔细用了一下,在针对程序方面来说是很完美的,只是在页面的验证部分少了欠缺了一个JS的验证,要是能在这一方面加以完善的话是很PERFECT的。
DBTOCode,用工厂模式、反射实例一个dll,会不会影响性能,虽然你使用了缓存。
另外,你权限管理好像一本《asp.net高级编程。。》书里面的例子吧。哈哈。不过挺好。
大家一致要求开源,还是开源了吧,顺应潮流。你不开源,我开源。希望搂主还是顺应民意。
LTP.Accounts.dll: 权限管理模块组件。
LTP.Common.dll: 通用类库
LtpPageControl.dll: 分页控件
能公布一下源码吗?
我一直在关注您的blog,我也在使用您开发的工具.
超强!!!李老师厉害!!!
妈啊,我什么时候才能达到你的高度,我的巨人.--陆英怀
做的很好,很是值得我学习的。希望太平兄可以做出更好的生成器,让我们做得更省力。
数据源为oracle8.05时 登录时server如何设???
为什么不用VS2005开发这个软件呢?现在大部分公司都用2005了.