修复Subsonic多表条件查询bug
2009-12-25 12:45
288 查看
SqlQuery query = new Select().From(Tables.UserBilling);
query .InnerJoin(UserInfo.UserIdColumn, UserBilling.UserIdColumn);
query.Where("UserInfo.UserId").IsEqualTo(1);
UserBilling、UserInfo表中多含有UserId字段,所以在加条件查询的时候需要指定表名,可是一旦指定了表名就会抛异常
Incorrect syntax near '.'.
Must declare the scalar variable "@UserId".
查看了Subsonic的源码,发现问题出在PrefixParameter(Utility.cs)方法,因为它把参数设置为@UserInfo.UserId,而这个在执行的时候,肯定是不正确的,我的做法是查找是否含有字符(.)如果有的话就取.号后面的字符串。
/// <summary>
/// Prefixes the passed parameter value with the provider specific parameter prefix.
/// </summary>
/// <param name="parameter">The parameter to evaluate</param>
/// <param name="provider">The provider where the parameter will be used</param>
/// <returns></returns>
public static string PrefixParameter(string parameter, DataProvider provider)
{
//added this check for Unit Testing weirdness - RC
if(provider == null)
provider = DataService.Provider;
string prefix = provider.GetParameterPrefix();
if (!parameter.StartsWith(prefix))
{
//2009-12-25 修正多表关联且含同一字段的条件查询(产生的参数名称,只取.后面的字符)
parameter = parameter.IndexOf(".") == -1 ? parameter : parameter.Substring(parameter.IndexOf(".") + 1);
parameter = String.Concat(prefix, parameter.Replace(" ", String.Empty));
}
return parameter;
}
query .InnerJoin(UserInfo.UserIdColumn, UserBilling.UserIdColumn);
query.Where("UserInfo.UserId").IsEqualTo(1);
UserBilling、UserInfo表中多含有UserId字段,所以在加条件查询的时候需要指定表名,可是一旦指定了表名就会抛异常
Incorrect syntax near '.'.
Must declare the scalar variable "@UserId".
查看了Subsonic的源码,发现问题出在PrefixParameter(Utility.cs)方法,因为它把参数设置为@UserInfo.UserId,而这个在执行的时候,肯定是不正确的,我的做法是查找是否含有字符(.)如果有的话就取.号后面的字符串。
/// <summary>
/// Prefixes the passed parameter value with the provider specific parameter prefix.
/// </summary>
/// <param name="parameter">The parameter to evaluate</param>
/// <param name="provider">The provider where the parameter will be used</param>
/// <returns></returns>
public static string PrefixParameter(string parameter, DataProvider provider)
{
//added this check for Unit Testing weirdness - RC
if(provider == null)
provider = DataService.Provider;
string prefix = provider.GetParameterPrefix();
if (!parameter.StartsWith(prefix))
{
//2009-12-25 修正多表关联且含同一字段的条件查询(产生的参数名称,只取.后面的字符)
parameter = parameter.IndexOf(".") == -1 ? parameter : parameter.Substring(parameter.IndexOf(".") + 1);
parameter = String.Concat(prefix, parameter.Replace(" ", String.Empty));
}
return parameter;
}
相关文章推荐
- 关于SubSonic3.0插件使用SubSonic.Query.Select查询时,字段类型为tinyint时列丢失问题的Bug修复
- 修改subsonic源码,修复一个多表查询的排序bug
- BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复
- Subsonic 复杂查询(动态条件) 连表、分页
- 框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)
- 修复jqgrid setgridparam postdata 的多次查询条件累加
- [原创]修正SubSonic v2.2.1的一处BUG,以及如何使用SubSonic进行多表查询、子查询以及数据库分页
- 关于SubSonic3.0插件使用SqlQuery或Select查询时产生的System.NullReferenceException异常修复
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复
- jeecg3.5中自动构造查询条件的一个比较严重的bug
- [原创]修正SubSonic v2.2.1的一处BUG,以及如何使用SubSonic进行多表查询、子查询以及数据库分页
- 多条件组合查询+分页 ---轉載的
- Hibernate读书笔记-----条件查询
- OpenJWeb 1.6版本中实现动态设置页面的查询条件列
- jfinal动态sql管理简洁实现分页多条件模糊查询
- 用一条SQL语句查询一张表得到不同条件的多个结果
- 在SQL SERVER中当查询的条件是一个选择范围的SQL语句怎么写?