听棠.NET

基于.NET的持久层SmartPersistenceLayer
免费职业锚定位测评
免费职业性格心理测评
posts - 244, comments - 10190, trackbacks - 104, articles - 5
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

    SPL从上次的3.1.0.5开始,经过了一段时间,积累了一些修改并进行了MySQL数据库的支持,现在发布SPL版本为3.2.0.4,Dll下载地址:这里 。只需要在项目中,把原来的Dll覆盖即可,如果还没下载过SPL早期版本的朋友,请先浏览:http://tintown.cnblogs.com/archive/2005/04/11/135582.html 。
   
   本次SPL自上次发布的3.1.0.5以后进行的更新有:
1、支持MS SQL SERVER中的Bit型数据类型
   映射到ClassMap中的类型为boolean,如:   

<attribute name="IsOver" column="IsOver" type="boolean" />

   对应的实体类类型为bool型,如:   

private bool m_IsOver; 
public bool IsOver
{
   
get
   
{
       
return this.m_IsOver;
   }

   
set
   
{
       
this.m_IsOver = value;
   }

}
  

   在查询时可以通过Condition进行比较判断了:
   Codition c=....
   c.AddEqualTo("IsOver",false);//这会最终生成 IsOver='0'的查询条件

2、提供了对数据源的提供者类型的判断,这将方便区分不同的数据库提供者手动组装不同的SQL语句
   用Setting.Instance().GetDatabaseVendor(dbName)根据dbName数据源取得数据源提供者,然后与DatabaseVendor枚举型比较
   如Access的日期比较与Sql Server的不一致:一个采用#号,一个采用'号 

if(Setting.Instance().GetDatabaseVendor(dbName)==DatabaseVendor.MsAccess)
{
 builder.Append(
" and SpecialPriceD2.FromDate<=#"+itemDate.Day.ToString()+"-"+itemDate.Month.ToString()+"-"+itemDate.Year.ToString()+"#");
 builder.Append(
" and SpecialPriceD2.ToDate>=#"+itemDate.Day.ToString()+"-"+itemDate.Month.ToString()+"-"+itemDate.Year.ToString()+"#");
}


if(Setting.Instance().GetDatabaseVendor(dbName)==DatabaseVendor.MsSqlServer)
{
 builder.Append(
" and SpecialPriceD2.FromDate<='"+itemDate.Day.ToString()+"-"+itemDate.Month.ToString()+"-"+itemDate.Year.ToString()+"'");
 builder.Append(
" and SpecialPriceD2.ToDate>='"+itemDate.Day.ToString()+"-"+itemDate.Month.ToString()+"-"+itemDate.Year.ToString()+"'");
}


    这个功能将为系统对多种数据库的支持最佳的灵活性,虽然SPL本身的“实体”与“标准”都可以区分不同的数据源提供者,但在需要手写SQL的地方,也需要根据不同的数据源提供者提供不同的语句执行

3、修订了对所有保留字的兼容性
   目前对所有的SPL中的操作,都加了定界符,ORACLE采用“"”号,MS的采用“[]”号,MySql的采用“`”号,所有测试都通过了

4、在Condition里添加了对Null值的查询功能
此方式只针对AddEqualTo()和AddNotEqualTo()有效:

c.AddEqualTo("字段名",System.DBNull.Value);
c.AddNotEqualTo(
"字段名",System.DBNull.Value);

5、增加了对MySql数据库的支持
  SPL对MySql的访问连接采用的是MySql提供的专用.NET connector,此驱动应该说是目前.NET连接MySql的最佳选择,在使用SPL访问MySql时,只需要安装一下此驱动即可,下载与介绍请看官方地址:
http://dev.mysql.com/downloads/connector/net/1.0.html
 
   使用时只需要配置DatabaseMap时类型设为“MySql”即可,如下:

<database name="MySqlDB" type="MySql"> 
    
<parameter name="User Id" value="root"/>
    
<parameter name="Data Source" value="localhost"/>
    
<parameter name="Database" value="mysql"/>
    
<parameter name="password" value=""/>
    
<classMapFile path="ClassMap.xml" />
</database>

  只需这里配置后,SPL在具体应用中与其他的完全一样,测试情况:
  实体测试--->通过
  RetrieveCriteira、UpdateCriteria、DeleteCriteria测试--->通过
  Transaction测试--->通过
  自动增长主键测试--->通过
  TOP功能测试--->通过

6、对DateTime的Null值进行了处理 (3.2.0.1开始支持)
  如果要对DateTime类型的字段赋于Null值,只需要使用DateTime.MinValue即可:
  aEntity.CreateDate=DateTime.MinValue;
  在SPL内部会判断如果DateTime.MinValue的话,自动保存到数据库为System.DBNull.Value,这就解决了不能给 DateTime类型直接赋于System.DBNull.Value的问题。

7、修订了UpdateCriteria对属性名与字段名不一致时导致的错误(3.2.0.2开始修订)
原来在UpdateCriteira时没有对属性进行转化为字段名,导致在属性名与字段名不一致的情况下会找不到字段。

(非常感谢iamsunrise提供的建议,请下载了SPL3.2的朋友重新下载一下)
(感谢子扬报出的BUG)

8、本3.2.0.4已经修复了DataBaseType的MySql类型了。

更多关于SPL请访问:http://tintown.cnblogs.com/category/12787.html  
 
 

Feedback

#1楼    回复  引用  查看    

2005-11-08 17:07 by 挖土.Net      
謝謝!!收到!

#2楼    回复  引用    

2005-11-08 17:45 by 差沙1 [未注册用户]
我的毕业设计就是用这个来做的,感觉很不错。
半年没你的消息,今天看见更新的消息真的很高兴,祝SPL越来越强大。。。

#3楼    回复  引用  查看    

2005-11-09 09:58 by 子扬      
感谢更新。不过我插入数据的时候,如果数据类型为日期型,而且我把实体的初始属性取消了。也就是我想插入null,怎么会出错?

#4楼    回复  引用    

2005-11-09 10:06 by baogong [未注册用户]
非常感谢听棠的更新,SPL非常好用,使用它已经大半年对了。也用它作过了几个项目。

开发效率和各个方面都有很大的提升。

祝SPL应用的越来越广泛。

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

2005-11-09 10:14 by 听棠.NET      
@子扬 :
对日期字段是不允许插入Null值的,不信你直接使用SQL执行一下。因此应该默认插一个1900-1-1的。取出来时进行比较。

#6楼    回复  引用  查看    

2005-11-09 10:54 by mikespook      
@听棠.NET
你的mysql是哪个版本?我用mysql4.1数据库上date是支持NULL值的~~

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

2005-11-09 11:27 by 听棠.NET      
@mikespook :
MySql5的最新版本,呵呵,在MySQL里确实是可以的,但在对实体的属性类型为System.DateTime的进行赋值时,无法赋上System.DBNull.Value啊:
CreateDate=System.DBNull.Value;这样的语句是报错的。
而在我的SPL中,对于实体的属性我是需要强类型的,强类型可以带来N多的好处。
因此目前无法实现给DateTime型赋Null值啊!!

#8楼    回复  引用    

2005-11-09 13:15 by iamsunrise [未注册用户]
用minivalue,当为minivalue时转为null

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

2005-11-09 14:33 by 听棠.NET      
@iamsunrise :
谢谢你提供的建议,我觉得非常好,目前SPL已经实现了DateTime.MinValue的赋Null功能,下载过的朋友请重新下载一下,目前版本号为3.2.0.1

#10楼    回复  引用    

2005-11-09 16:16 by 狮子座小哲 [未注册用户]
听棠老大就是强啊~~!!支持
不过请问这个支持mysql到哪个版本的?

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

2005-11-09 17:01 by 听棠.NET      
@狮子座小哲 :
我是用MySql 的.NET Connector连接的MySql5,我觉得MySql4应该也可以吧,因为连接与访问与数据库基本上不会有太大的关系,主要是Connector的功能。相信是支持的

#12楼    回复  引用  查看    

2005-11-10 15:34 by 子扬      
感谢, 特别是解决了我的问题。

#13楼    回复  引用  查看    

2005-11-11 09:40 by 子扬      
请教,我遇到一个问题,不知道是不是BUG,
当我的数据库字段和对象实体的名称不一样的时候,我使用以下方法:
private void dgrdSort_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
UpdateCriteria uc = new UpdateCriteria(typeof(StoreSortEntity));
Condition c = uc.GetNewCondition();
c.AddEqualTo(StoreSortEntity.__SERIAL, e.Item.Cells[1].Text);
uc.AddAttributeForUpdate(StoreSortEntity.__NAME, ((TextBox)e.Item.Cells[0].Controls[0]).Text);
if(uc.Perform()>0)
lblInfo.Text = "祝贺,更新成功!";
else
lblInfo.Text = "很抱歉,更新失败…";

dgrdSort.EditItemIndex = -1;
bindSort();
}

就会出现错误:
数据库操作异常:Index #0 Message: 列名 'Name' 无效。 Native: 207 Source: .Net SqlClient Data Provider

当字段名和属性名一样时候正常。
我仔细检查了。应该不是我的错误.

#14楼    回复  引用  查看    

2005-11-11 09:41 by 子扬      
我的列不是Name, Name是对象属性名,列名是Name_stso

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

2005-11-11 10:44 by 听棠.NET      
@子扬 :
那你看一下ClassMap里,是不是把这个Name属性名映射为Name_stso的字段名了。

#16楼    回复  引用  查看    

2005-11-11 10:56 by 子扬      
<class name="StoreSortEntity" table="StoreSort" database="WXStore">
<attribute name="Serial" column="Serial_stso" type="String" key="primary" />
<attribute name="Name" column="Name_stso" type="String" />
<attribute name="TopID" column="TopID_stso" type="String" />
<attribute name="Orders" column="Orders_stso" type="Integer" />
</class>

#17楼    回复  引用  查看    

2005-11-11 10:57 by 子扬      
不会,我都看了。其他方法都正常,就是不能用UpdateCriteria()

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

2005-11-11 11:28 by 听棠.NET      
@子扬 :
其他地方都正常的??好的,那我看一下,是不是UpdateCriteria里有BUG。不好意思啊。

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

2005-11-11 16:03 by 听棠.NET      
@子扬 :
你好,你报的确实是个BUG,当时没有对属性名进行转换成字段名,在其他地方都是处理的,现在已经修改好了,请重新下载一下,目前下载版本已经更新为3.2.0.2

#20楼    回复  引用  查看    

2005-11-11 20:48 by 子扬      
对您的辛劳表示感谢.

#21楼    回复  引用    

2005-11-17 10:16 by lo [未注册用户]
啥时候支持Framework2.0?

#22楼    回复  引用    

2005-11-17 10:24 by IceKIng [未注册用户]
Thanks a lot tintown,i will use it to do something!

#23楼    回复  引用    

2005-11-20 03:36 by firebirdmx [未注册用户]
OrderBy()不能用.

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

2005-11-20 09:17 by 听棠.NET      
RetrieveCriteria的orderby是肯定好用,我一直在用:
RetrieveCriteria rc=new RetrieveCriteria(...);
rc.OrderBy(...);

#25楼    回复  引用    

2005-11-23 11:23 by zyk [未注册用户]
我在用SmartPersistenceLayer做项目时经常发生配置错误,我把错误页的内容拷下来了,麻烦 听棠.NET 兄给看看。谢谢。(有点长 :))




“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

配置错误
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

分析器错误信息: 访问被拒绝:“Oracle.DataAccess”。

源错误:


行 196: <add assembly="System.EnterpriseServices, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
行 197: <add assembly="System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
行 198: <add assembly="*"/>
行 199: </assemblies>
行 200: </compilation>


源文件: c:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config 行: 198

程序集加载跟踪: 下列信息有助于确定程序集“Oracle.DataAccess”无法加载的原因。


=== Pre-bind state information ===
LOG: DisplayName = Oracle.DataAccess
(Partial)
LOG: Appbase = file:///F:/Test
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).
===

LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: Oracle.DataAccess
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/root/1eed63df/97764a88/Oracle.DataAccess.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/root/1eed63df/97764a88/Oracle.DataAccess/Oracle.DataAccess.DLL.
LOG: Attempting download of new URL file:///F:/Test/bin/Oracle.DataAccess.DLL.
LOG: Publisher policy file is not found.
LOG: No redirect found in host configuration file (C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet.config).
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\config\machine.config.
LOG: Post-policy reference: Oracle.DataAccess, Version=9.2.0.2102, Culture=neutral, PublicKeyToken=89b483f429c47342




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2300; ASP.NET 版本:1.1.4322.2300

#26楼    回复  引用    

2005-11-25 13:07 by domy [未注册用户]
我在用条件时如果有两个并列的条件它就不行,即:

RetrieveCriteria rc=new RetrieveCriteria(typeof(SuppliersEntity));
Condition c=rc.GetNewCondition();
c.AddEqualTo(SuppliersEntity.__COUNTRY,"USA);
c.AddEqualTo(SuppliersEntity.__REGION,"OR");
它只能去到USA的记录,而不能取到同时符合"OR"的记录

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

2005-11-25 15:03 by 听棠.NET      
@zky:
你那是权限问题吧,DLL无法访问你看看权限吧。不是SPL的问题。
@domy:
如果是OR的关系,不能这样写的,你那样写是AND关系,你可以看看SPL的专门的介绍Codition的文章,一个Codition内部是and的关系,而Condition与Condition之间的关系是OR的关系:
RetrieveCriteria rc=new RetrieveCriteria(typeof(SuppliersEntity));
Condition c=rc.GetNewCondition();
c.AddEqualTo(SuppliersEntity.__COUNTRY,"USA");
Condition c2=rc.GetNewCondition();
c2.AddEqualTo(SuppliersEntity.__REGION,"OR");
这样就可以了,那么如果要实现“A and (B or C)”这样的关系,可以使用OrGoup对象:
RetrieveCriteria rc=new RetrieveCriteria(typeof(SuppliersEntity));
Condition c=rc.GetNewCondition();
c.AddEqualTo(SuppliersEntity.__COUNTRY,"USA"); //A
OrGoup og=c.GetNewOrGoup();
og.AddEqualTo(SuppliersEntity.__REGION,"OR"); //B
og.AddEqualTo(...............................................) // C
请去http://tintown.cnblogs.com/archive/2004/11/15/64054.html 看吧。

#28楼    回复  引用    

2005-11-25 18:50 by shevins [未注册用户]
建议有空的时候写出一份完整的帮助,让用户可以方便地使用,让初学者也容易入门

#29楼    回复  引用    

2005-11-25 18:58 by 游客 [未注册用户]
不准备开放源码吗:(

#30楼    回复  引用    

2005-11-25 20:24 by domy [未注册用户]
to 听棠.NET :
我想实现的就是AND关系阿,用的方法也没有错,可就是实现不了,所以怀疑是不是bug,你试一下就知道,呵呵

#31楼    回复  引用    

2005-11-26 14:05 by domy [未注册用户]
to 听棠.NET:
今天又试了,还是不行,想实现AND关系的时候,它取得的记录只会满足第一个条件,而不会满足第二个条件,请听棠看一下是不是SPL的bug来的,我都看了文档确认我的操作没有错,就是:
RetrieveCriteria rc=new RetrieveCriteria(typeof(SuppliersEntity));
Condition c=rc.GetNewCondition();
c.AddEqualTo(SuppliersEntity.__COUNTRY,"USA);
c.AddEqualTo(SuppliersEntity.__REGION,"OR");

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

2005-11-27 10:09 by 听棠.NET      
@domy :
这个AND的关系是不可能有BUG的,因为SPL不是我现在写的,而是已经用了三年了,做过几十个项目了,这种条件查询是最经常使用的,不可能存在这样的BUG,你的代码中c.AddEqualTo(SuppliersEntity.__COUNTRY,"USA); USA这里应该是"USA"吧。
如果你还是不行,请使用rc.SqlString属性可以看到最终要执行的SQL语句的,看SQL语句是不是有问题!!

#33楼    回复  引用    

2005-11-27 14:11 by domy [未注册用户]
呵呵,不好意思,是我太大意了,
在c.AddEqualTo(SuppliersEntity.__REGION,"OR"); 这一句里把c.AddEqualTo写成了c.AddNotEqualTo,结果怎么样都取不到我想要的结果。谢谢听棠

#34楼    回复  引用  查看    

2005-12-06 09:23 by 西门吹雪      
@ 听棠.NET:
请问SPL3.2的版本和以前的SmartRobot版本兼容吗?还是要重新下载?谢谢!

#35楼    回复  引用    

2005-12-13 11:52 by www_wwj [未注册用户]
听棠你好:
我是一名初学者,问一个幼稚的问题,如何在winform中配置数据库连接,可否给一个简单的例子 ,以acess数据库为例

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

2005-12-13 17:35 by 听棠.NET      
@www_wwj :
你把DatabaseMap.xml与ClassMap.xml放在CS项目的bin目录里。
在main方法中进行初始化:
PersistenceLayer.Setting.Instance().DatabaseMapFile="路径";就可以了
这样,在你的CS项目里可以使用实体了,使用方法跟WEB里的一模一样。

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

2005-12-13 17:38 by 听棠.NET      
@www_wwj :
比如把access数据库也放在bin目录里,那么databasemap.xml里:
<database name="DMBCN" type="MsAccess">
<parameter name="Provider" value="Microsoft.Jet.OLEDB.4.0" />
<parameter name="Data Source" value="dmbcn.mdb" />
<classMapFile path="ClassMap.xml" />
</database>
因为databasemap.xml与access数据库在一个目录下,所以直接使用mdb文件即可,如果有路径就填相对路径。

在main方法中进行初始化:
PersistenceLayer.Setting.Instance().DatabaseMapFile="databasemap.xml"

接着在其他的WinForm里就可以使用了。比WEB的其实还要方便

#38楼    回复  引用  查看    

2005-12-15 13:34 by 鞠强      
听棠,你的msn多少?可否加入我?谢谢!对于你的这些工作,偶感觉很志同道合,呵呵。

我的msn:
juqiang1975@msn.com

#39楼    回复  引用    

2005-12-19 11:14 by www_wwj [未注册用户]
非常感谢!Thank You

#40楼    回复  引用    

2005-12-19 11:16 by 寻找错误 [未注册用户]
Access字段类型Text,做了个 c.AddMatch(LD_BBSEntity.__BODY,"代码");



出错信息[Error Message]: 内存溢出
引发异常的方法[Error Method]:Void ExecuteCommandTextErrorHandling(Int32)
--------------------------------------------------------------------------------
堆栈跟踪[Stack Trace]:
System.Data.OleDb.OleDbException: 内存溢出 at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) at PersistenceLayer.MsAccess.AsDataTable(IDbCommand cmd) in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Databases\MsAccess.cs:line 59 at PersistenceLayer.PersistenceBroker.ProcessRetrieveCriteria(RetrieveCriteria rc) in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Core\PersistenceBroker.cs:line 725 at PersistenceLayer.RetrieveCriteria.AsDataTable() in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Criteria\RetrieveCriteria.cs:line 244 at LiuDian.blog.search.getLD_BBSEntityMain(String k1, String k2) in j:\网站\testweb\liudian\blog\search.aspx.cs:line 191 at LiuDian.blog.search.Page_Load(Object sender, EventArgs e) in j:\网站\testweb\liudian\blog\search.aspx.cs:line 67 at System.EventHandler.Invoke(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain()

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

2005-12-19 12:34 by 听棠.NET      
@寻找错误 :
你好,你报的这个错,我倒还从没遇到过,从你提供的信息来看,也判断不出是什么引起的,你使用的是RetrieveCriteria吗?请使用rc.SqlString属性看一下SQL语句有没有问题。如果还有问题,把你的写的代码帖出来看一下。

#42楼    回复  引用    

2005-12-22 15:45 by 寻找错误 [未注册用户]
好像找到原因了,SQL语句没问题,当字段值里还有某些特殊字符(比如:日文)的时候使用like匹配,会出现 内存溢出 错误,应该是Access的bug。

#43楼    回复  引用    

2005-12-24 22:23 by 盛夏的果实 [未注册用户]
可以在项目中混用SPL和ADO.NET的自身技术吗?

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

2005-12-25 10:03 by 听棠.NET      
@盛夏的果实 :
当然可以了。你如果不想使用SPL“实体”的功能,那么ClassMap与实体类都可以不配,而只配DatabaseMap里的数据连接,然后使用Query里的直接SQL语句和执行存储过程等方法,直接对数据库操作,这就是保留了对ADO.NET的扩展。有关这方面的你可以看Query高级篇。

#45楼    回复  引用    

2005-12-28 10:37 by kriswu [未注册用户]
@听棠

我在使用的时候,空项目引用spl,编译,有一个

未能找到依赖项“ICSharpCode.SharpZipLib”。

的提示。虽然不影响使用,感觉怪怪的。

#46楼    回复  引用    

2005-12-30 07:20 by wmj苏州 [未注册用户]
有个问题:PersistenceLayer.Setting.Instance().AppendDatabase()中的DatabaseType没有mysql的选项。
也就是说不支持追加mysql的功能!
还有对databasemap.xml的用法能否给一种变通的处理,也就是说部份属性如用户名,密码能否通过参数传递到程序中:
比如对AppendDatabase()进行重构,
AppendDatabase(string database,string datatype,string ip,string username,string pass,string classmap)...这点应该不难吧,安全呀,谢谢!

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

2005-12-30 09:36 by 听棠.NET      
@ wmj苏州 :
关于DataBaseType的MySql已经添加进去了。请重新下载即可,目前最新版本是3.2.0.4了。

还有那个AppendDatabase我是无法实现你想的那样的,因为就算是同样的数据库,连接字符串都可能会不一样,有人要设置不同的连接池数等,也就是连接字符串其实也是一个非常复杂的东西,我不可能给你生成死的,还有同一数据库多种连接方式呢。所以,提供灵活的连接字符串,你想怎么连就怎么连。。要不然,连不上你都不知道我SPL里做了什么。。。

#48楼    回复  引用    

2005-12-30 16:38 by iamsunrise [未注册用户]
有点受不了
之前

objRetrieveEntity = new RetrieveCriteria(typeof(WHCDTBMEntity));
objCondition = objRetrieveEntity.GetNewCondition();
objCondition.AddEqualTo("WH_CODE", this.WH_CODE);


objEntityContainer = objRetrieveEntity.AsEntityContainer();

现在我想用

t.DoRetrieveCriteria( 。。。。)

应该如何写?

#49楼    回复  引用    

2005-12-30 16:43 by iamsunrise [未注册用户]
问题在于我已经一部分已经用了实时提交的了,另外一部份以前 用AsEntityContainer 的,现在读不到提交的数据,还死锁在那里。

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

2005-12-30 16:48 by 听棠.NET      
@iamsunrise :
你好,你说的是对的。实时的事务处理,是会锁定数据库的,所以如果一旦采用实时事务处理,那么应该都采用实进事务处理,所以要把那查询也放到事务里。
t.DoRetrieveCriteria(objRetrieveEntity);
只要把RetrieveCriterial的对象传入就可以了,返回DataTable进行处理。

如果前面采用实时处理,那么,在未commit或rollback时,表是被锁定的,无法使用正常的retrieve的,要不然并发性问题又要冒出来了哦。。这也是数据库提供的机制。。

#51楼    回复  引用    

2005-12-30 18:07 by iamsunrise [未注册用户]
那就要重写了。

#52楼    回复  引用    

2006-01-09 13:27 by yupeng [未注册用户]
sql 2005 好象不支持啊

#53楼    回复  引用    

2006-02-04 11:13 by iamsunrise [未注册用户]
在 Condition 中填写一个布尔型的条件如何填写?
比如

字符
objCondition.AddEqualTo("USER_ID" ,"AAA");

布尔
objCondition.AddEqualTo("enabled" ,????); 如何????

#54楼    回复  引用    

2006-02-06 01:23 by nullx [未注册用户]
对MsSQL 2005不支持阿,希望能尽快出个支持2005的新版。

#55楼    回复  引用    

2006-02-06 01:51 by nullx [未注册用户]
反编译一下弄明白了,暂时可以用这种方法解决。
生成的DatabaseMap.xml后把
SQLNCLI.1
替换成
SQLOLEDB.1
就支持sql 2005了

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

2006-02-06 12:30 by 听棠.NET      
@iamsunrise:
objCondition.AddEqualTo("enabled" ,true);

@nullx :
我还没有MsSQL2005的数据库,就象说的,应该是数据连接字符串有所不同而已,内部的其他的应该都是兼容的!!

#57楼    回复  引用    

2006-02-06 12:56 by nullx [未注册用户]
对,其他方面没有不同,就是provider字符串不一样而已

#58楼    回复  引用    

2006-02-07 10:51 by iamsunrise [未注册用户]
@iamsunrise:
objCondition.AddEqualTo("enabled" ,true);

我试过了,真的是不可以这样,产生出来的sql是
[enabled=]
后面少了东西
不能把值放上去

#59楼    回复  引用    

2006-02-07 10:53 by iamsunrise [未注册用户]
在 SelectionCriteria
中我看到
switch (
case....
少了default,我用的是3.1版本的,不知道3.2是不是有更新。

#60楼    回复  引用    

2006-02-07 18:00 by iamsunrise [未注册用户]
@iamsunrise:
objCondition.AddEqualTo("enabled" ,true);

产生出来的按照定义应该是enabled<>0
真的可以吗?试过没有?如果你产生出来的是enabled=1好像不太合理

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

2006-02-07 18:52 by 听棠.NET      
@iamsunrise :
如果你想要enabled<>0,那你要使用:
objCondition.AddNotEqualTo("enabled" ,false);
啊。
就看你想怎么做了

#62楼    回复  引用    

2006-02-08 01:15 by iamsunrise [未注册用户]
不如 objCondition.AddNotEqualTo("enabled" ,"0");
算了

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

2006-02-08 08:49 by 听棠.NET      
@iamsunrise :
如果你觉得不会出错的话,也可以的。只是我想尽可能用强类型,如果是字符串的话,你可能会什么字符都输进去。
这个其实无所谓了,随便你想怎么用!!

#64楼    回复  引用    

2006-02-08 11:49 by iamsunrise [未注册用户]
我想说的是
objCondition.AddNotEqualTo("enabled" ,false);
的写法不直观
objCondition.AddNotEqualTo("enabled" ,"0"); 同样不直观
如果可以
objCondition.AddEqualTo("enabled" ,true);
那是最好的了,但是产生出来的sql语句不符合定义,
我记得mssql 7.0是可以写作enabled=1和enabled=0,mssql 2000就不可以这样写了。要写作enabled<>0和enabled=0,或者是我的记性不好。

以上只是我的个人看法。不代表什么。

#65楼    回复  引用    

2006-02-08 20:34 by yumj [未注册用户]
感谢,System.DateTime赋null值也解决了,太好了!支持

#66楼    回复  引用    

2006-02-15 16:01 by yynice [未注册用户]
自定义SQL查询中,
DataTable dt=Query.ProcessSql(sqlString,dbName);
如果是OleDB数据库,dbName怎么写呢?

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

2006-02-16 09:13 by 听棠.NET      
@yynice :
这跟是不是OleDb一点关系也没有的啊,这里的dbName是在DatabaseMap.xml中配置时的那个数据源名称,“数据源名称”不是指“数据库名称”,就是<database name="..." type="...">
这里的Name值哦。。。所以你使用时只要这个名称就可以了,SPL会自动找到这个数据源并进行访问的。

#68楼    回复  引用  查看    

2006-03-02 09:18 by 网络孤魂      
看到老大的几篇文章,很是心动啊,有点跃跃欲试了,不过可惜我现在用的是FireBird所以,还是用不上。
不过可以考虑在下一个项目上使用sql server试一下

#69楼    回复  引用  查看    

2006-03-18 10:12 by 高海东      
hao

#70楼    回复  引用    

2006-04-02 16:44 by bill white [未注册用户]
spl 针对access数据库datatime字段的查询存在bug.

condition条件最终被转化为sql语句,条件值被直接嵌入到sql语句中,这样针对时间字段就可能产生bug. 如某一时间为 2005-12-24 2:24:34.850 (millisecond部分大于500), 当你使用该字段查询时就得不到这条记录,但如果是小于500的就可以.

我在access中查看过,2005-12-24 2:24:34.850 会被显示为 2005-12-24 2:24:35,而在spl生成的查询条件中是 #2005-12-24 2:24#

如果把条件查询部分的实现改为参数实现就不会有问题.

#71楼    回复  引用  查看    

2006-04-26 21:36 by blue1000      
 使用过程中遇到以下问题,请老大帮忙解决,拜谢:
    public class BasePage : System.Web.UI.Page
    
{
        
public BasePage()