posts - 283, comments - 10329, trackbacks - 112, articles - 5
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

SmartPersistenceLayer3.1正式发布

Posted on 2005-04-11 15:59 听棠.NET 阅读(62273) 评论(139)  编辑 收藏 网摘 所属分类: SmartPersistenceLayer

                                                      SmartPersistenceLayer 3.1 正式发布 

经过一段时间的努力,SmartPersistenceLayer终于完成了修改与测试,在这期间要特别感谢一些网友的意见与支持,特别要感谢Asilas的最后测试。
 SPL3.1的发布分为:
   SPL3.1的DLL发布:SPL本身的发布型式为DLL,只要下载DLL并引用即可。对于已经有SPL环境的朋友,升级也只需要把SPL3.1的DLL进行覆盖即可。下载SPL3.1DLL 

 注:SPL升级到3.1.0.5了,添加了对事务的“实时提交”功能,下载请参考:SPL3.1.0.5升级-加强了事务的“实时提交”功能
 事务的“实时提交”功能讲解请看:SmartPersistenceLayer3.1讲解(10)---高级事务处理篇 

  SPL3.1的Demo源码发布为了让大家更好的上手,SPL3.1在发布时,同时发布Demo源码安装包,里面介绍了一些SPL的使用和相应的源代码,适合刚接触SPL的朋友,这次采用安装包的方式后,不需要安装NetAdvantage了,安装后即可进行使用。下载地址1 下载地址2    (在安装前先看一下“安装说明”)
  注:安装此Demo时会自动生成ig_Common的NetAdvantage客户端项目,所以如果机器上已经有NetAdvantage,那么在卸载此Demo时也会卸载ig_common,这样会导致NetAdvantage不可用的。可以提前给ig_common做个备份。
 SmartRobot3.1代码生成器发布:此SmartRobot3.1是For SPL3.1的代码生成器
(现在已经公开Robot的源码了,请看这里)
 SmartRobot3.1使用简单介绍:
   没有写专门的使用说明,使用是非常简单的,只要
    1)先进行设置:数据库连接设置,命名空间其实采用默认即可,生成的实体类文件存放路径设置
    2)点击“》”载入数据库表信息
    3)选择需要的表,可以在右边进行映射关系的修改(推荐没必要修改的了),点击“闪电”进行应用(这会保存到内存中),然后进行点击其他的表,同样的操作。(注意:每个你需要的表,都要进行“选择”与“应用”一下。
   4)点击“文件”下的生成代码文件即可以生成实体类了,点击Save xml to就可以生成映射文件了。 
 
 SPL3.1的修改日志
  经过这段时间的修改,SPL终于升到3.1了,这在3.0的基础上修订了一些BUG并添加了一些新功能,如"时间戳",Clone,"多帐套"等:
    1.       对Informix数据库的支持
    
在连接Informix时,在DatabaseMap.xml的配置文件中datatype="Informix"即可

    2.添加了RetrieveCriteria 的指定显示字段功能
   

 RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity)); 
    rc.AddSelect(StudentEntity.__NAME); 
    rc.AsDataTable();

    使用AddSelect(string entityAttributeName)或
     AddSelect(string entityAttributeName,string AliasName)就可以指定要显示的字段值了。一旦使用一个或一个以上,就会按指定的显示,如果一个也不指定,默认会显示出所有字段!

 

 

 

 

 

 

 

 

    3.增加了Oracle的“TOP”功能
     对于Oracle数据库,SPL将生成rownum<=N的语句获取前N条记录(RetrieveCriteria 和Query都加上了).
 

    4.实现了时间戳功能
     只要定义一列为timestamp="true",数据类型为String,如:
    
在对应的数据库也定义相应的字段,类型也为字符型,长度为20以上且不允许为空。 这样,在EntityObject进行Insert时会由SPL生成一个Now.Ticks自动插入到此字段作为时间戳 在Update时会进行时间戳的比较,如果正确才会更新进去,如果不正确则不会更新成功,这只需要通过返回"影响条数"来判断即可。
    在Delete时也会进行时间戳的判断,成功与不成功也通过"影响条数"来判断。
   因为在Update与Delete时,就算不成功,数据库也不会抛出异常,只是影响条数为0,所以我们通过影响条数来进行判断即可。
   在UpdateCriteria时也进行了时间戳值的更新,但问题是对于批量更新,无法进行每一条的时间戳比较。关于时间戳的理念与实现机制请参考我的文章:SPL3.1讲解(8)--- 并发处理篇

   5.事务中也加入了timestamp的支持
    在Transaction中添中了IsForceCommit属性: flase:不强行Commit,是指在实体Save()或是实体Delete()时,返回false就回滚整个事务,这用于并发性处理 true:强行Commit,是指忽略实体Save()与Delete()返回的false状态,因为有时这在业务上本身就是允许的。此默认值为false,也就是要求进行并发控制的,也可以手动设置为true,强行进行Commit 我们可以通过

Transaction t=new Transaction();
t.Add.. 
bool result=t.Process(); 


判断result来判断是否执行成功了,如果为false,则说在事务处理中遇到了并发错误,可以进行提醒重新提交 而且在事务中也进行了保存到内存的控制,在事务的并发生成错误时,那些相内的保存到内存的数据将被清空, 这样可以确保内存不会出现已经被Roolback的数据。

 

 

 

 

 

 

 

 

  6.添加了对实体的Clone功能
  要把实体类标识为可序列化:如:

[Serializable] 
public class SuppliersEntity : EntityObject 
.. } 


然后使用实体对象的DeepClone()方法就可以了:
SuppliersEntity supplier2=(SuppliersEntity)supplier.DeepClone();
  这要求对实体类具有"[Serializable]",可以通过这次一起新发布的SmartRobot for SPL3.1代码生成工具进行生成。

 

 

 

 

 

 

 

 

   7.对UpdateCriteria 的 AddAttributeForUpdate方法进行了加强
   原先只能进行string字段的更新:

public void AddAttributeForUpdate (string attributeName,string attributeValue)


现在允许进行强类型更新:

public void AddAttributeForUpdate (string attributeName,object attributeValue)


 

 

 

 

 

 

 

 

   8.多帐套的支持
   SPL3.1开始,对多帐套进行了修复与扩展,有关“多帐套”功能的详细介绍请看:SPL3.1讲解(9)---多帐套处理篇

   9.添加了执行无返回执行Sql语句
   Query添加了

int ProcessSqlNonQuery("sql","db")

的方法用于执行不返回DataTable的SQL语句


其他更多SPL资料请参看SPL专栏:http://www.cnblogs.com/tintown/category/12787.html 

 

 

 

 

 

 

 


 受权说明:此SPL发布形式为DLL,免费使用,DLL中没有限制信息。
                 由于是免费的,不对SPL中可能存在的BUG所造成的项目损失负责。
                 接受BUG处理,但也不为此承诺必须处理。
                 SPL不公开源代码。

 修改备注:
   在4月12号之前下载的朋友,请重新下载一下,在事务处理的地方,修改了一下判断条件。


目前系统已升级到SPL3.2.0.1,请访问:http://tintown.cnblogs.com/archive/2005/11/08/271629.html

Feedback

评论共2页: 上一页 1 2 

#101楼   回复  引用  查看    

2005-04-28 08:42 by 颓废      
我就是不会呀,我昨晚试了一下SPL,在WIN FROMS里试的,老是出错用不了,我刚刚学C#,现在都是一头雾水,XPO GANET.NET NH也下了,就是还没捉摸出个概念来,对象之间的关系还不懂事.能帮帮我吗?听棠.NET

#102楼   回复  引用    

2005-04-28 15:40 by willsum
我觉得你在SPL中的事务处理设计得不太好,由于所有事务都在Process()中进行处理,在事务处理的过程中不能获得中间结果,这在简单的业务中没有什么,但稍微复杂一些的业务处理可能就会带来很大问题,例如:在一个事务中,需要对A,B二个表进行更新,B表的更新需要依赖A表的合计结果进行处理.所以流程如下:
1.Begin Transaction
2.Retrieve A
3.Update A
4.Retrieve Sum(A)
5.Update B
6.Commit
但目前由于所有处理都在Transaction.Process()中进行,因此第4步操作无法进行.
建议是不是改成,在NewTransaction时开始一个事务,然后在Transaction.AddObject中直接对数据进行操作,并在Process中作最后的事务提交操作.

#103楼[楼主]   回复  引用  查看    

2005-04-28 16:45 by 听棠.NET      
@willsum :
你的建议非常好,其实我也已经意识到这一点了,我想应该采用你说的方式更合理。对你的建议表示非常的感谢!!

#104楼   回复  引用    

2005-05-09 11:28 by 狮子座小哲
事务中获取中间结果的问题我也很困扰,不知SPL什么时候可以实现
在hibernate里的事务中有flush方法,可以实现这样的情况要求,在那里面对于flush的解释是这样的
Force the Session to flush. Must be called at the end of a unit of work, before commiting the transaction and closing the session (Transaction.commit() calls this method). Flushing is the process of synchronising the underlying persistent store with persistable state held in memory.
不知道SPL能否也实现这样的功能

#105楼   回复  引用    

2005-05-11 16:18 by asdf
对象名 'Suppliers' 无效,这个怎么回事呀

#106楼   回复  引用  查看    

2005-05-12 21:02 by Notus@下雨吧~~      
老大,我的那个论坛写完了,您要是出差回来就帮忙看看
我那里的数据操作是用spl实现的,您看看使用的时候有没有什么误区?
这个可以当成spl的一个实例哦,嘿嘿,因为是开源的
http://www.cnblogs.com/notus/archive/2005/05/12/154240.html">http://www.cnblogs.com/notus/archive/2005/05/12/154240.html

#107楼   回复  引用  查看    

2005-05-12 21:03 by Notus@下雨吧~~      
晕,忘记加您的blog的连接了,正式发布的时候一定加上,否则大家都不知道从哪找呢 :)

#108楼[楼主]   回复  引用  查看    

2005-05-13 16:34 by 听棠.NET      
@Notus@下雨吧~~ :
你好,我出差刚回来,等我一有空我就看看你的东东:)

#109楼   回复  引用    

2005-05-17 16:28 by 81
因为不是开源的,又不是商业的,注定只能自己搞着玩,估计没有负责人的项目管理者把他用在实际项目中。

要是开源就好了。

#110楼   回复  引用    

2005-05-19 14:06 by 挖土[未注册用户]
我安装的问题:
我机器本来安装了NetAdvantage 2005 vol 1,NetAdvantage的Sample都可以看,但是用安装程序安装了SmartPersistenceLayer3.1后,NetAdvantage的Sample里的WebGrid控件在VS2003中都无法正常显示,但是编译运行都是正确的。我后来把NetAdvantage 2005和SmartPersistenceLayer3.1全部卸载以后,单独安装NetAdvantage 2005,NetAdvantage的Sample的WebGrid还是不能正常显示.哪里会有问题呢?

#111楼   回复  引用    

2005-05-19 15:23 by 挖土 [未注册用户]
谢谢听棠,在听棠的耐心帮助下,终于找到了问题,原来我安装的NetAdvantage 2005 vol 1的版本号是 Version=5.1.20051.37,而Sample中的版本号是Version=5.1.20051.11,所以不能正常使用!

再次感谢听棠!

#112楼   回复  引用    

2005-05-20 09:01 by 老多
那里有说明帮助文档?

#113楼   回复  引用    

2005-05-20 09:54 by 老多
to:听棠

有没有考虑用代码生成器,生成一些数据库表的表单显示页面!
这样更方便

#114楼[楼主]   回复  引用  查看    

2005-05-20 12:48 by 听棠.NET      
@老多:
没考虑过,用代码生成器生成界面,那是程序员的理想境界,但是一个系统根本不是简单的增删改,界面上的复杂性根本无可预料。
因此,对我来说,我是非常不推荐所谓的界面生成的。
比如大家都用文本框吗?但我要改用NetAdvantage的文本框,或者有些想要用有些不想用,再者,可能还需要很多JS脚本来控制界面。
当然,有人说,可以对生成的进行修改,我真不知道对每个控件进行修改名称,重新排放,然后编写脚本,这样会比我直接控制来得快?
界面上应该有界面本身的控制方式,而不是用代码生成器,我见过人家开发的什么生成器,前后台都可以生成的,可以想象这样的系统只是增删改的堆砌,除进行了大规模修改。

#115楼   回复  引用    

2005-05-20 22:49 by 一川烟草
界面生成器用来生成基于单表的设置是非常好的办法.
曾经做过一套vb6的数据对象和界面以及界面控制代码的生成器.大大提高了效率,加速了开发进度

#116楼   回复  引用    

2005-05-25 11:58 by overred
一点也下不了
麻烦给个稳定的地址
谢谢

#117楼   回复  引用    

2005-05-25 16:44 by xuandme
听棠.NET
能否提供一个spl的详细帮助,提供主要类的各方法的介绍,有的时候只看方法名,不好确定方法的作用!
谢谢!

#118楼   回复  引用    

2005-05-28 22:17 by barton131420@163.com
对于OR mapping我研究过一些版本,我自己也写过一个版本。谈一点看法,希望有机会与楼主交流。
一、楼主使用的方式是采用Field-Property的方式(无法处理空值),这个与XPO的方式是一样的。我不知道楼主是否研究过Borland的ECOII。我比较严重地发现,为什么ECO的第一个版本不能用于多线程环境的ASP.Net而只能应用于单线程环境的WinForm,而直到ECOII才解决线程冲突。
二、数据层的抽象。楼主的SPL是完全基于数据库的,并且采用穷举方式支持主流的数据库。我不知道SPL是否采用拼凑SQL的方式来加载数据,但是显然通过SQL方式来加载数据的抽象是远远不够的。对于持久方式无法给用户更灵活的支持(本人认为这是Hibernate2.*与Hibernate3的分水岭)。还有,对于交叉数据库的支持是否能够非常好地解决交叉事务问题?
三、SPL通过配置文件实现Mapping,这与XPO和ECO不同。连Hibernate3都支持Annotation方式进行映射,为什么在.net还不能使用更方便的Attribute来实现映射嘛。使用Attribute的好处是:保证实体对象层层与数据库层是完全对应的而不会因为EntityObject的定义与ClassMap.xml的脱节而导致无法预测的后果。

#119楼   回复  引用    

2005-05-30 15:58 by pux
楼上barton131420@163.com:
记得以前在csdn论坛看到你发表的帖子, 你的 Kanas.net(如果没记错的话) 有没有出来啊?

#120楼   回复  引用    

2005-06-09 16:39 by 无天刀绝
访问用Oracle数据库用OleDb连接方式性能恐怕不能保证,能采用OracleClient么?

#121楼[楼主]   回复  引用  查看    

2005-06-09 16:45 by 听棠.NET      
@无天刀绝 :
连接Oracle我是推荐使用ODP.NET,这是oracle专门为.NET开发的引擎,据说在性能是最好的,所以我的SPL是支持用ODP.NET连接Oracle的。

#122楼   回复  引用    

2005-06-09 21:46 by lixiao
在SPL中日期怎么比较?
SPL中使用SQL语句统计某字段的总和,怎么得到统计结果?
谢谢!!

#123楼[楼主]   回复  引用  查看    

2005-06-10 08:48 by 听棠.NET      
日期的比较跟其他的比较一样的啊。你把日期类型传进去比较好了,这是强类型的。不需要字符转换,要不然太复杂。
统计字段的话,可以Query的sum做,你参考一下我的Query就可以了。当然如果是复杂的统计,你就只能用SQL语句执行了。

#124楼   回复  引用    

2005-06-10 10:14 by lixiao
谢谢听棠兄!使用SPL方便了很多,但对SPL中的方法、返回值等还不能全部了解,有没有详细的资料?
上一个问题我没有说清楚。
SQL中字段times为DateTime,和当前时间比较,可能需要多种比较方式,如想比较和当前相差5天的记录,怎么做?
统计问题:
Query q = new Query(typeof(UserEntity));
q.SelectAvg(UserEntity.__Age,"age:); //计算平均年龄
q.ExecuteScalar();
只能返回条数,我想得到平均年龄的值,怎么得到?

#125楼[楼主]   回复  引用  查看    

2005-06-10 10:53 by 听棠.NET      
 这是我SPL的参考手册:SmartPersistenceLayer3.1.0.5参考文档  对你或许有用。象要比较相差五天什么的,很简单啊。你把Now加上五天再与字段进行比较,你只要把思路换一下就可以了。
 
 那个q.ExecuteScalar()应该是返回的平均值的。原理是"使用这个方法会自动把第一条记录的第一个字段作为返回值输出"

#126楼   回复  引用    

2005-06-10 22:03 by star[未注册用户]
我遇到一个奇怪的问题,配置数据库以后,生成了两个xml文件和系列文件。但是,定义时,其他Entity都没问题,居然其中一个怎么都不对,编译通过,一执行就提示我

未找到名为[tb_RMC_SiteInfoEntity]实体类相对应类影射信息!
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: PersistenceLayer.PlException: 未找到名为[tb_RMC_SiteInfoEntity]实体类相对应类影射信息!

但实际上

存在tb_RMC_SiteInfoEntity.cs
引用正常
xml文件正常
关键是,一个文件中,我另外的定义,比如
tb_RMC_MemberInfoEntity me = new ...()就是正确的~~~

奇怪死我了~~~~

#127楼   回复  引用    

2005-06-14 07:47 by lixiao
对于日期比较,仍然没有弄懂。
如:SQL数据库中的日期为:2005-6-9 12:34:45
Query q = new Query(typeof(Users));
Condition c = q.GetQueryCondition();
c.AddEqualTo("Login",DateTime.Now.AddDays(-5));
q.SelectCount("UserID","UserID");

最后看SqlString:
SELECT COUNT([Users].[UserID]) AS UserID FROM Users WHERE ( ([Users].[Login]='2005-6-9 7:46:29') )
统计结果为0。
怎么区别按天、小时、分、月等进行比较?

#128楼[楼主]   回复  引用  查看    

2005-06-14 08:49 by 听棠      
@lixiao :
按天比较的话,使用位于两个日期之间。
如果要进行小时,分,月比较 ,那只能用SQL写了。因为不同的数据库语句都一样。然后用Query的ProcessSQL执行。

#129楼   回复  引用    

2005-06-17 12:50 by 无天刀绝
听堂兄的spl最新版支持存储过程调用的持久操作么?

另外,听堂兄的spl既不开源,也不收费,不敢用到大项目中,怎么办?非商业组件的服务支持心里没底哦。强烈建议商业化。

#130楼[楼主]   回复  引用  查看    

2005-06-17 14:39 by 听棠.NET      
@无天刀绝 :
SPL一直是支持存储过程调用的,可以在Query高级部分看说明。
至于商业化,呵。如果有公司想要,可以提供技术支持或是提供源代码。

#131楼   回复  引用    

2005-06-18 17:27 by 无天刀绝
spl用什么开发的C#?VB.NET?

如果我们公司想购买的话,提供源代码和一定的技术支持服务,价格多少?有商业发票否?

spl的3.1.0.5有完整的使用文档么?我只找到2.0的啊?类库说明里没有例子,读起来费劲啊。

#132楼   回复  引用    

2005-06-18 17:29 by 无天刀绝
多问一句,你们用spl做项目的时候,性能表现如何?比如数据库中记录很多,不用太多,5百万条吧,用spl的时候性能降低的厉害否?还是只和数据库有关?举个你们做过的项目的例子就行了。

#133楼[楼主]   回复  引用  查看    

2005-06-19 14:09 by 听棠.NET      
@无天刀绝 :
SPL是用C#开发的。价格什么的,具体谈了。
SPL的文档蛮全的了,也提供了类库,应该说很容易上手用的。
至于性能,由于是动态组装语句执行,那么这部分开销自然会影响一点性能,不过,这个性能影响很小的,如果数据库数据多,也只是跟数据有关,因为不管多少,SPL的组装都是一样的。
SPL在我们应用于很多项目了,性能都是可以接受的。

#134楼   回复  引用  查看    

2005-06-30 20:11 by 西门吹雪      
请教:听棠.NET
我也遇到和上面其中一个用户同样的问题,你在上面解释表是没有主键的话SPL不能正常工作。我就把ClassMap.xml原来没有主键的表加上主键标示,但是不修改数据库。 例如:
原来的ClassMao.xml文件的描述:
...
<attribute name="UserID" column="UserID" type="Integer" />
<attribute name="RoleID" column="RoleID" type="Integer" />
...


改为:
...
<attribute name="UserID" column="UserID" type="Integer" key="primary" />
<attribute name="RoleID" column="RoleID" type="Integer" key="primary"/>
...

修改以后编译也正常,但不知此种做法是否妥当,特来请教。

#135楼[楼主]   回复  引用  查看    

2005-07-01 09:06 by 听棠.NET      
@西门吹雪 :
是的,就是这样做,你重编后就没问题了。
当然了,你最好是在数据库里也设这两个字段是主键,要不,有可能这两个值无法确定唯一,虽然不会报错,有可能只会取到第一条记录。
保证数据库主键与CLASSMAP一致最好了。

#136楼   回复  引用    

2005-07-03 08:33 by star[未注册用户]
调用存储过程失败,请教下为什么,谢谢先

IDataParameter para = Query.GetParameter("d_Test");
IDataParameter[] paras = new IDataParameter[3];
para.ParameterName = "@PageSize";
para.Value = PageSize;
paras[0] = para;

para.ParameterName = "@CurrentPage";
para.Value = CurrentPage;
paras[1] = para;

para.ParameterName = "@strCondition";
para.Value = strCondition;
paras[2] = para;

return Query.RunProcedure("s_ClassInfo_List",paras,"d_Test");

提示错误是
此 SqlParameterCollection 已包含带有ParameterName“@strCondition”的 SqlParameter。

不管我把strCondition这个修改成什么名字,都说存在……

#137楼[楼主]   回复  引用  查看    

2005-07-03 12:33 by 听棠.NET      
@star :
老兄,你的para是一个对象啊。既然是三个参数,应该要New出三个对象来吧。。。。!!!!!

#138楼   回复  引用    

2005-07-03 13:46 by star[未注册用户]
写晕了……

#139楼   回复  引用    

2005-07-12 05:17 by 司徒[未注册用户]
听棠.NET :
我研究了SPL一个通宵,手上有一个大中型企业MIS项目,我综合考虑一下各种ORM产品,觉得SPL满有特色的,文档支持也算可以。现在有打算采用SPL作为系统的持久层,过2天就要给领导设计方案,设计方案已经脱了好久。 不过心里在流汗,不知道SPL是否可以支撑得住大中型项目。我想听一下阁下的意见。我刚刚开始转型做设计,非常努力中。。。。我小命教给阁下你了,非常谢谢。
此致
敬礼
注:
系统用户50-20之间,每天更新的记录量可以达到5万条左右。
采用C/S,B/S结构,Web Service作为应用程序服务器

#140楼   回复  引用    

2005-07-12 05:21 by 司徒[未注册用户]
改正上面的错误:
系统用户50-200之间,每天更新的记录量可以达到3万条左右。是产品来的。

#141楼[楼主]   回复  引用  查看    

2005-07-12 09:02 by 听棠.NET      
@司徒:
SPL具有很强的兼容性,在数据访问时会根据不同的数据库进行语句的组装并执行,这势必会比直接SQL的慢一点,但我们也是用于中小型项目中,这些速度影响不严重,再说了,影响速度的主要原因是数据量大,比如一百万条的数据与一条的数据,在SPL中组装语句是一样的,只是返回的数据量大而已,因此,SPL在性能是没有什么问题的。

#142楼   回复  引用    

2005-07-12 12:11 by 司徒[未注册用户]
@听棠.NET
谢谢,项目成功后告诉你好消息。

#143楼   回复  引用    

2005-07-12 17:41 by csdn 无天刀绝[未注册用户]
唉,我也正有此意想在一个产品中使用spl,听堂兄还是商业化吧。不商业化的话,买你的代码及服务有正规发票否?没有发票领导可不会让我们买这个东东。

#144楼   回复  引用    

2005-07-12 17:43 by csdn 无天刀绝[未注册用户]
个人买你的组件和代码多少嘛尼?

#145楼[楼主]   回复  引用  查看    

2005-07-13 09:45 by 听棠.NET      
@无天刀绝:
你好,请直接跟我联系:MSN:tintown_liu@hotmail.com QQ:10613800

#146楼   回复  引用  查看    

2005-07-15 08:30 by 风一样的狂徒11      
用了几天SPL,感觉非常爽。。。。代码写得飞快。。。

#147楼   回复  引用  查看    

2005-07-23 19:17 by 红马天下      
现在正在使用SPL,效率确实提高很多,非常感谢。但是在使用中有几个问题。由于SPL实现的是table和entity的直接映射,一般并不符合业务模型,如何改造entity已使之适合业务模型?在我现在的实现中,定义了符合模型的model,从相应的entity继承,增加相应的属性、方法。但是在我改造action的时候,却发现不能使用继承来实现,因为构造函数为private。我想之所以生成的action均为abstract,并且构造函数为private,大概是防止实例化对象。那还是可以将构造函数改为protected,以方便继承。我不知道我的这种做法是否合适?或者听棠可以推荐几种最佳实践?

#148楼[楼主]   回复  引用  查看    

2005-07-24 17:01 by 听棠.NET      
@红马天下 :
其实那个Action的类是我自己加上去了,应该是不属于SPL的一部分,我是为了方便,用代码生成器生成Action,仅仅是为了方便,没有Action不会影响我的SPL的功能,因此,至于Action你想怎么处理就怎么处理好了。哈哈。

#149楼   回复  引用    

2005-07-28 10:36 by yxx[未注册用户]
有一个旧的数据库须移植,所有的表只有索引,没有建主键,不知又没办法使用SPL。

#150楼   回复  引用    

2005-07-30 10:54 by xuandme[未注册用户]
用了一段时间SPL了,感觉很好,真是非常感谢 听棠.NET 提供这么个好东西!
现在有个问题
我现在是在net 1.1 下使用SPL的,那么如果我在2.0 下面使用会不会有问题,或者说,SPL对net2.0的兼容性怎么样?

#151楼[楼主]   回复  引用  查看    

2005-07-30 14:03 by 听棠.NET      
@xuandme :
FW2.0肯定是对1.1的兼容的。因此,SPL在2.0下应该是不会有问题的,除非MS的2.0对1.1兼容。那就要问MS了。

#152楼   回复  引用  查看    

2005-08-04 14:14 by 天寒      
我也遇到了
databaseMapName的数据库映射信息未找到
的信息
但连接字符串及位置路径测试出来都是正确的
怪怪的

/***************
已解决,我用的是Access
ClassMap.xml 中表标识是有个属性是database="databaseMapName"
这个名字必须与
DataBaseMap.xml中的

name属性相一致才行,默认生成的是不同的
所以总提示连接不到ClassMap
谢谢Tintown

#153楼   回复  引用    

2005-08-04 16:30 by hjcao[未注册用户]
我没有研究过ORMaping的实作的代码,根据个人在开发和设计经验提出几点愚建:
1.barton131420@163.com 的建议很好,我非常赞同,太多的配置让人很讨厌;需要在不影响扩展性的基础上尽量简化配置,如:特性的应用等;
2.数据访问层的设计应该分两步走
(一)实现一个通用的浅层次的封装,像MS DAAB
(二)在此基础上实现ORMaping
这样的好处是如果ORMaping的方式实现某些操作,特别是复杂查询很难或蹩脚时;可以直接使用原始的数据访问方式,并且共享底层封装的基础资源和配置信息。或者我可选择直接使用浅层次的封装。
3.使用AOP跟踪数据实体对象的状态
如有一个表有30各字段,它是有多人多岗位多次操作才形成完整的记录,如果没有状态跟踪,每次插入或修改都生成完整的sql语句是一种效率的浪费;也就是说我修改了对象的那些属性,就仅生成仅修改对应字段的sql语句。
4.OR Maping只干它应该干的事情,其他交给它的底层封装去作

#154楼   回复  引用    

2005-08-04 23:43 by 深蓝[未注册用户]
上面夏天提到的
[[[用SmartRobot3.1连接Oracle8i时出错:]]]]
我这也发现了,具体是,连接字符输入后按测试通过,然后列出表名称,按你的设计一按表名就应该列出表对象,但是一按就是那样的错误

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参阅此消息的结尾。

************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
at Robot.frmXmlRobot.InitializeTable(String tableName)
at Robot.frmXmlRobot.lstTables_SelectedIndexChanged(Object sender, EventArgs e)
at System.Windows.Forms.ListView.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ListView.WmReflectNotify(Message& m)
at System.Windows.Forms.ListView.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)


************** 已加载的程序集 **************
mscorlib
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2300
基本代码: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
Robot
程序集版本: 3.1.0.0
Win32 版本: 3.1.0.0
基本代码: file:///C:/Documents%20and%20Settings/Administrator/桌面/SmartRobot3.1/SmartRobot3.1.exe
----------------------------------------
System.Windows.Forms
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2300
基本代码: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2300
基本代码: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2300
基本代码: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Windows.Forms.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代码: file:///c:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.windows.forms.resources.dll
----------------------------------------
System.Xml
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2300
基本代码: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
System.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代码: file:///c:/windows/assembly/gac/system.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.resources.dll
----------------------------------------
System.Data
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.2300
基本代码: file:///c:/windows/assembly/gac/system.data/1.0.5000.0__b77a5c561934e089/system.data.dll
----------------------------------------
mscorlib.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代码: file:///c:/windows/assembly/gac/mscorlib.resources/1.0.5000.0_zh-chs_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

************** JIT 调试 **************
计算机的配置文件(machine.config)的
system.windows.forms 节中必须设置 jitDebugging 值。
编译应用程序时还必须启用\r\n调试。\r\n\r\n例如: \r\n\r\n<configuration>\r\n <system.windows.forms jitDebugging="true" />\r\n</configuration>\r\n\r\n启用 JIT 调试后,任何未处理的异常\r\n都将被发送到此计算机上注册的 JIT 调试器,\r\n而不是由此对话框处理。\r\n

#155楼   回复  引用  查看    

2005-08-10 16:22 by 蛙蛙池塘      
有点儿类似《.net企业应用高级编程》里面的那个Wrox Enterprise Object,不过听堂的这个东东似乎已经去粗取精了,所有文件已经下载,这几天就测试一下。

#156楼   回复  引用    

2005-08-15 10:42 by king[未注册用户]
真是好东西,~~~~ 不过安全方面做的好像不够吧


用户名和密码就未加密保存在xml文件中~~~~

最好加密了再保存~~

#157楼   回复  引用    

2005-08-16 09:02 by wscqstu[未注册用户]
(注意:每个你需要的表,都要进行“选择”与“应用”一下。

想知道,这里应用起什么作用???

#158楼   回复  引用    

2005-08-19 16:48 by 小生[未注册用户]

樓主我的sql server的資料表的擁有者不是dbo
而是PubUser
使用spl時出錯﹕

Pfs_UserMEntity对象操作出错!参考:数据库操作异常:Index #0 Message: 無效的物件名稱 'PubUser.Pfs_UserM'。 Native: 208 Source: .Net SqlClient Data Provider

------------------------------
用什么方法解決呀?

#159楼   回复  引用    

2005-08-24 13:19 by 新小鱼儿[未注册用户]
听棠大哥:

你是不是出差了呀?:(

#160楼   回复  引用  查看    

2005-08-24 18:06 by 蛙蛙池塘      
SPL
1.[基础设计]里的DatabaseMap.xml演示代码里的注释不对
2.[基础设计]里对实体的讲解的第二条"2.Using的内存就采用那四个就可以了 "有个错别字,第四条的"实体化"应该是实例化吧,你好多地方把内容写成内存了
3.事务处理那段儿讲解偶感觉还是不太习惯,好像是引入了新的复杂度,虽然操作起来很简单.本来MS自己提供的事务处理偶就晕晕的.不过你每个标准对象都提供了SqlString属性,我感觉这个是偶最常用的,呵呵.
4.我感觉Condition对象用的多了会忘了SQL语法.还有你的AddMatchSuffix方法是不是和where字句是完全对应的呀,如果是就好了,.NET里的表达式不是就挺好吗,就datatable.select()方法使用的哪个AddIn()方法可以用在access里吗,有没有必要弄一个类似t-sql里的charindex()函数的条件呀.
5.Query联合查询有点儿想access的查询分析器的思路,挺好,不过对没学过SQL语句的人帮助很大,对偶来说还是习惯用他的SQL和SP的功能.Query.RunProcedure和ProcessSql为什么没有返回IDataReader的重载函数呀,存储过程的参数赋值还是有些麻烦,最好把存储过程对应的参数也放到xml文件里,在程序启动的时候加载起来,然后实例化一个实体,设置实体的值就相当于设置这些参数,最后把实体的示例传递给query.runprocedure(实体名,存储过程名),然后能返回datatable又能返回idatareader,多好.
6.并发处理处理的挺智能化,但是什么情况下需要把IsForceCommit=true,出现了错误也需要提交事务呀.
7.多帐套处理篇也很有用,文章提到ERP,金蝶,用友,SAP什么的,你是不是对这个了解挺多呀,偶现在想启动一个开源的CRM系统,打算把你这个SPL用上,其实也是一个小系统,今天花了一下午时间看你这个东西的文档,希望你有空过去指导一下.
水晶报表部署
8.[实体操作]=>[新增实体]里,如果输入框里是时间字段,需要Converttodatetime吗,还是直接把string类型赋过去自动转换呀。
9.获取示例是干什么的呀,没看懂“请点击下面的GRID进行数据获取”是里的CRID是什么意思呀?你的datagrid用的什么东西弄的呀,挺好看,还能拖动,还能排序,和透视表似的,呵呵。好像叫UltraWebGrid什么吧,好像孟子弄过一个,具体没看过呢还。
10.你的主演示框里的tabcontaol也狠不错,怎么弄的呀,是服务器控件吗?

最后,感觉做这个东西确实费心了,考虑的地方也不少,做的演示挺好的,用户体验不错,尤其是webtabcontrol和ultrawebgrid,呵呵。

#161楼[楼主]   回复  引用  查看    

2005-08-25 09:15 by 听棠.NET      
@ 蛙蛙池塘 :
非常感谢你这么多的意见!!呵
Condition里的方法我都写明了对应SQL中是什么表现的,比如AddMatchSuffix就会产生一个后匹配的Where方式。
非常遗憾的是,对于SQL中的一些函数方法无法实现,因为这个太复杂了,而且SPL本身面向是多种数据库的,所以也无法使用T-SQL来处理,因此如果语句中要用到SQL函数的话,那就要采用直接SQL执行了。
之所以Query没提供DataReader是因为SPL在完成操作后会马上断开与数据库的连接,DataReader虽然会比较快,但要保持着连接,到时你还要手工释放,要是忘了释放也就麻烦了。
并发处理使用IsForceCommit=true的情况还是挺多的,比如允许订单可以是空明细的话,在删除一个订单时,除了删除主档记录,在删除明细记录时有可能会删除0条记录,这是业务上是允许,所以这里就不能当作错误rollback事务了。
对于实现的属性都是强类型的,日期型就是采用日期型赋值,不需要转换,要不然无法做到多种数据库兼容的。强类型这是最好的选择了。
我的演示都是采用NetAdvantage 的控件。。

#162楼   回复  引用  查看    

2005-08-25 09:28 by 蛙蛙池塘      
怪事了,我订阅了这个帖子,你的回复我怎么没有收到邮件呀,另外,偶叫蛙蛙王子,偶的博客叫蛙蛙池塘
你给弄一个返回datareader的方法吧,好像微软的一篇文章里面讲的一个ORM框架就有返回idatareader的方法,不能因噎废食呀,对吧,返回datareader的时候不是还能另加一个参数,自动关闭它的数据链接的吗?
还有,你说的NetAdvantage是免费使用的吗?
还有存储过程参数能用xml文件配置吗?

#163楼   回复  引用    

2005-08-28 19:44 by sharper[未注册用户]
听棠兄:
你的SPL3.0连接配置方式中写到:
Setting.Instance().AppendDatabase(string name,DatabaseType databaseType,string connectionString);
连接方式在哪里呀?
你的demo代码我可以运行,可是自己动手用时也碰到:
未找到名为[NameEntity]实体类相对应类影射信息!的问题,我按照你的建议检查过
了,还是不行,我觉的是不是哪个两个xml文件放置的路径问题呢?
谢谢!

#164楼[楼主]   回复  引用  查看    

2005-08-28 20:29 by 听棠.NET      
@sharper :
你好。我知道你问题出在哪里了!这个方法是用来追加数据连接的!因此实体映射ClassMap是必须要被初始化的。
因此你可以使用Setting.Instance().AppendDatabase(string name,DatabaseType databaseType,string connectionString,string ClassMapPath);

这个方法,最后一个参数就是在添加连接时,初始化ClassMap映射。。

或者是你使用Setting.Instance().DatabaseMapFile=”DatabaseMap配置文件”; 指定DatabaseMap地址,因为在DatabaseMap中有ClassMap地址,所以这个方法在执行时是同时映射实体的。

这些数据源追加,主要是为了扩展多帐套功能(也就是实体映射完全一样,只是添加数据源而已),所以你所说的那个方法是扩展的不进行实体映射的方法。。

如果你已经初始化过实体映射了,那么可以使用这个方法来追加帐套数据源,而你现在是一次都没有映射过,问题就出来了!!!
希望你明白了。。

#165楼   回复  引用    

2005-08-28 20:52 by sharper[未注册用户]
听棠兄:
那在你的demo文件中我怎么没有找到这条语句呢?
Setting.Instance().AppendDatabase(string name,DatabaseType databaseType,string connectionString,string ClassMapPath);
这句应该加在那个文件中呢?

#166楼[楼主]   回复  引用  查看    

2005-08-28 21:27 by 听棠.NET      
@sharper :
我是在basePage里使用的:
Setting.Instance().DatabaseMapFile=”DatabaseMap配置文件”;
这个方法,在DatabaseMap里指定了ClassMap地址,所以是全自动加载数据源与实体映射的。。

#167楼   回复  引用    

2005-08-28 22:04 by sharper[未注册用户]
听棠兄:
哦,难怪我发现你的example页面中都是
public class Sample : BasePage
我明天再试试,谢谢你了

#168楼   回复  引用    

2005-08-29 10:40 by sharper[未注册用户]
听棠兄:
好了,再次谢谢!

#169楼   回复  引用    

2005-08-29 11:46 by sharper[未注册用户]
听棠兄:
不好意思,又来麻烦你了,我在vs.net2003中用NetAdvantage 2005 Vol 1 ASP NET Final提供的控件时提示:创建控件出错,但是编译运行还是可以的,不知道你有没有这种情况呢?怎么解决?谢了

#170楼   回复  引用    

2005-09-02 14:44 by wangyang[未注册用户]
其他信息: UserEntity对象操作出错!参考:数据库操作异常:Index #0
Message: 第 1 行: '.' 附近有语法错误。
Native: 170
Source: .Net SqlClient Data Provider



请问是怎么回事啊?

另外想问一下利用SmartPersistenceLayer有没有相关的教程或什么资料啊,能否提供一下啊,介绍一下啊,这个对初次接触的人还是必需的,谢谢,我是个新手!!!

#171楼[楼主]   回复  引用  查看    

2005-09-02 14:57 by 听棠.NET      
@wangyang:
哈哈。不好意思啊,这可能是User是保留字的原因,我已经发现这个BUG了,我已经在修改中了。。。

#172楼   回复  引用    

2005-09-05 10:03 by walker[未注册用户]
用SmartRobot3.1实例表出错!
************** JIT 调试 **************
计算机的配置文件(machine.config)的
system.windows.forms 节中必须设置 jitDebugging 值。
编译应用程序时还必须启用\r\n调试。\r\n\r\n例如: \r\n\r\n<configuration>\r\n <system.windows.forms jitDebugging="true" />\r\n</configuration>\r\n\r\n启用 JIT 调试后,任何未处理的异常\r\n都将被发送到此计算机上注册的 JIT 调试器,\r\n而不是由此对话框处理。\r\n
是不是SmartRobot3.1不能实例化oracle得表啊!

#173楼   回复  引用    

2005-09-05 10:58 by oscar[未注册用户]
我看到是用XML的文件来配置数据库的连接,但是xml在网页上可以浏览的,怎样能避免我的数据库地址、帐号、密码不被别人所知道。

#174楼[楼主]   回复  引用  查看    

2005-09-05 12:13 by 听棠.NET      
@oscar :
你把手缀名改成config就可以了。
@walker :
有可能是ORACLE的表中存在BLOB或是IMAGE之类的长二进制字段。

#175楼   回复  引用    

2005-09-05 17:40 by walker[未注册用户]
我找到错误了!是我自己不用户名小写了! 谢谢听棠 !还有oscar

#176楼   回复  引用    

2005-09-12 13:40 by Roy[未注册用户]
SPL在运行一段时间后会时不时报错,提示找不到未找到名为[xxxxxx]实体类相对应类影射信息!我用在ASP.net程序中,是不是在IIS回收进程后会有这个问题?谢谢

#177楼   回复  引用  查看    

2005-09-14 15:13 by diligence      
报到报到!

#178楼   回复  引用  查看    

2005-09-27 11:50 by 宝剑·123钢铁·123steel.cn      
好东西!

#179楼   回复  引用  查看    

2005-10-16 18:07 by 可乐      
如果我要实现以下查询,该如何做?
SELECT * FROM tb WHERE (NOT (number | 1 = 1))

#180楼[楼主]   回复  引用  查看    

2005-10-16 21:24 by 听棠.NET      
象这种计算列查询都只能通过SQL语句来做。因为这是非常复杂的,我想谁也做不到吧。SPL是跨数据库的,这种SQL的计算语句在不同的数据库中而且会各异,因此SPL做不到这种复杂的数据库的移植。
因此,象这种复杂的计算SPL,请使用SQL解决,我想这也是你最直接最方便的处理方式了。

#181楼   回复  引用  查看    

2005-10-16 22:18 by 可乐      
还有,好象没有对between的支持

#182楼   回复  引用  查看    

2005-10-16 22:26 by 可乐      
关于“SELECT * FROM tb WHERE (NOT (number | 1 = 1))”的问题,我想可以通过以下方法实现,不知道是否可行?
在condition类,增加一个前缀属性,表示是否有"not",另外增加一个AddExpression(string Expression)函数,这样就可以解决相对比较复杂的问题了。
如:
AddExpression("not (user_name is null)");
AddExpression("number+5=10");
AddExpression("number between 10 and 15");

#183楼   回复  引用  查看    

2005-10-19 13:07 by 子扬's Blog      
页面出错[Page Error]

--------------------------------------------------------------------------------
本页发生一个异常 系统管理员请注意.请联系我们以便更好的解决此问题.
An unexpected error has occurred on this page.The system administrators have been notified.Please feel free to contact us with the information surrounding this error.
页面发生于[The error occurred in]: http://localhost/SPL/EntitySample/RetrieveSample.aspx">http://localhost/SPL/EntitySample/RetrieveSample.aspx
出错信息[Error Message]: 找到的名为“PersistenceLayer”的程序集清单定义与程序集引用不匹配。
引发异常的方法[Error Method]:System.Data.DataTable GetSuppliersEntity()

#184楼[楼主]   回复  引用  查看    

2005-10-19 13:47 by 听棠.NET      
肯定是PersistenceLayer.Dll的引用有问题,你把新的Dll覆盖后,确认引用中引用的是否是新的,最好把Bin目录里已经生成的那些Dll给删除掉。
你的问题应该是Dll的冲突问题,清除Bin里原有的Dll即可。

#185楼   回复  引用    

2005-10-31 09:54 by 午夜[未注册用户]
建议各门保持住别变色,已小巧高效为基本继续作。
如果做大了,做的太复杂了,也未必是一件好事。
现在大多数构架师基本上都已经体验过 过渡设计 的痛苦了。
他们也痛定思痛,开始考虑高效小巧的应用程序框架。
宁缺勿滥,做精,别做滥了,这个很重要。

#186楼   回复  引用    

2005-11-01 09:54 by steven9801[未注册用户]
听棠_NET兄,在RetrieveCriteria 获取标准构造条件批量查询时,没有出现OrderBy()方法,咋回事???

#187楼   回复  引用    

2005-11-01 10:04 by steven9801 [未注册用户]
我用的是新版的dll

#188楼   回复  引用    

2005-11-14 10:03 by Leeairw
能不能改一下使用的实体结构?用.NET生成的XML难道不行吗?既然.NET已经提供了实体的结果。为什么还要自己规定格式?

#189楼   回复  引用    

2005-12-07 23:19 by liuydd[未注册用户]
求助!出现以下问题,绝对路径有DatabaseMap.xml文件,该文件由生成器自动生成.请好心人帮助.

--------------------------------------------------------
其他信息:读取数据库映射文件D:\basic\spl_c\DatabaseMap.xml时发生错误,请确认你的文件路径和文件格式!请求 System.Security.Permissions.StrongNameIdentityPermission, mscorlib, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 类型的权限已失败。

#190楼[楼主]   回复  引用  查看    

2005-12-08 09:05 by 听棠.NET      
@liuydd :
如果绝对路径你确定没问题的话,你看一下xml里的内容是否正确,要仔细一点看,因为XML的格式是很严的,如果XML也没有问题,那肯定是权限问题了,看你发的提示应该是跟权限有关吧。你是不是没有把xml文件放在发布的WEB项目里,而你的WEB匿名帐号没有访问其他目录的权限导致的。

#191楼   回复  引用    

2005-12-08 21:13 by liuydd [未注册用户]
谢谢,听棠.NET

我已经找到问题所在.非常感谢你的热心帮助.希望SPL能更上一层楼.

原因:
很简单,因为我用的是vs2002,只支持.net framework1.0.

解决办法:
用.net framework1.1目录下CSC.exe 手工编译后通过.看来应该升级了.呵呵!
vs2003 还是vs2005 ? 又是痛苦的选择!

#192楼   回复  引用    

2005-12-31 14:11 by bbq[未注册用户]
我想了解这个组件性能.
实体和数据转换是不是采用反射?
在你自己的测试机中获取2K条数据所消耗的时间大概是多少?
优胜成DataAdapter.fill,或差距有多大.
我自己也在做这样一个组件,不过主要精力还是放在效率上.

#193楼   回复  引用    

2006-01-06 17:53 by hj[未注册用户]
我第一次使用却出现这个问题 不知道该任何是好 相信这个蛮容易解决的吧 谁让我菜呢:(
未将对象引用设置到对象的实例。
Application("DatabaseSetting") Is Nothing Or Application("DatabaseSetting").ToString() <> "Y" Then

#194楼   回复  引用    

2006-02-23 15:04 by 路过![未注册用户]
spl是否支持VB.NET

#195楼   回复  引用  查看    

2006-03-08 13:44 by 海蓝心      
为什么用ODP连接的时候经常出错的啊...
读取数据库映射文件c:\inetpub\wwwroot\OracleSPL\Config\DatabaseMap.xml时发生错误,请确认你的文件路径和文件格式!未将对象引用设置到对象的实例。

这是
DatabaseMap.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<map>
<database name="SPLTEST" type="ODP">
<parameter name="Password" value="nply" />
<parameter name="User ID" value="develop" />
<parameter name="Data Source" value="DEVELOP" />
<classMapFile path="ClassMap.xml" />
</database>
</map>
这样弄有没有对啊..

希望听棠大哥..弄一个SPL操作Oracle的Demo上来哦

#196楼   回复  引用  查看    

2006-05-31 22:36 by 天轰穿      
我下个来试下!

#197楼   回复  引用    

2007-05-30 16:22 by db661音乐站[未注册用户]
有点儿类似《.net企业应用高级编程》

#198楼   回复  引用    

2007-05-30 16:22 by db661音乐站[未注册用户]
db661音乐站

#199楼   回复  引用    

2008-08-30 11:23 by singlehmy[未注册用户]
SPL在运行一段时间后会报错,
提示找不到未找到名为[xxxxxx]实体类相对应类影射信息!
我用在ASP.net程序中,出现此情况后只要在IIS 的程序应用池进行回收一下问题就解决了.是怎么回事啊?
?谁能帮忙解答一下

#200楼   回复  引用    

2008-10-27 11:31 by xuehui[未注册用户]
jobsEntity jb = new jobsEntity();
jb.job_id = 1;
jb.job_desc = "xuehui";
jb.Save();

--报[jobsEntity]类没有相应的实体映射!
--查了很多资料都不管用
--SPL我用在c/s项目里(c#winform)

#201楼   回复  引用  查看    

2009-04-03 12:46 by 阿炬      
SPL3.1的Demo源码

无法下载啊
评论共2页: 上一页 1 2 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 135582




相关文章:

相关链接: