SubSonic 是集代码生成 / Build Provider (asp.net 2.0 的新特性) 于一身的一个非常不错的数据访问框架。其灵感来自 ROR 里的 ActionPack. 非常适合于小型网站的快速开发。 我有一个字段名为 Key,在生成一个 Select 语句的查询时 sql 报错。因为 Key 是一个关键字,而 SubSonic 产生的 SQL 中对此未作转义处理。 Debug 时可以获取其产生的 SQL 如下: SELECT TOP 100 PERCENT [cfg_Tips].[Id], [cfg_Tips].[Key], [cfg_Tips].[Descr], [cfg_Tips].[Value], [cfg_Tips].[Labels] FROM [cfg_Tips] WHERE [cfg_Tips].Key = @Key ORDER BY [Id]; protected static string BuildWhere(Query qry) foreach (Where wWhere in qry.wheres) foreach (BetweenAnd between in qry.betweens) for (int i = qry.wheres.Count – 1; i >= 0; i–) 这个库中还有 MySqlDataProvider 等类也有此问题。因为我现在暂时不用 MySQL, 就先不去改那些了。 另外有一个体会就是使用开源的第三方类库时,尽量都用源代码方式加入到项目中来。否则出错了调试不进去。 posted on 2007-01-22 00:28 木野狐 阅读(62) 评论(4) 编辑 收藏 引用 网摘 所属分类: .NET # re: SubSonic 的字段名未转义问题修正 2007-01-22 00:49 木野狐 # re: SubSonic 的字段名未转义问题修正 2007-01-22 00:53 TerryLee 我只用它写过一个小Demo:) 回复 更多评论 # re: SubSonic 的字段名未转义问题修正 2007-01-22 01:02 木野狐 对象.Load(…) 来加载,其中的参数可以是 IDataReader, DataRow, DataTable. 我用一个 IDataReader 传进去,结果搞了半天都是出错。最后调试到框架源代码里发现必须在传递 IDataReader 进去之前,自己 Read 一次才能成功。比如我写的这段简单例子里用到: /// <summary> Staff manager = new Staff(); http://www.cnblogs.com/RChen/archive/2007/01/22/actionpack1.html
昨天我开始使用这个框架,发现了一个小问题。
我修改了一下源代码中的 SqlDataProvider.cs 里的 BuildWhere 方法,暂时解决这个问题。
{
string where = “”;
string whereOperator = ” WHERE “;
{
if (wWhere.ParameterValue != DBNull.Value)
{
where += whereOperator + “[” + wWhere.TableName + “].[” + wWhere.ColumnName + “] ” +
Where.GetComparisonOperator(wWhere.Comparison) + ” @” + wWhere.ParameterName;
}
else
{
where += whereOperator + “[” + wWhere.TableName + “].[” + wWhere.ColumnName + “] ” + Comparison.Is +
” NULL”;
}
whereOperator = ” AND “;
}
{
where += whereOperator + “[” + between.TableName + “].[” + between.ColumnName + “] BETWEEN @start” +
between.ColumnName + ” AND @end” + between.ColumnName;
whereOperator = ” AND “;
}
{
if (qry.wheres[i].ParameterValue == DBNull.Value)
{
qry.wheres.RemoveAt(i);
}
}
return where;
}
我增加的部分在上面代码中标注为绿色。
很奇怪,作者对表名加了方括弧,却没有加给列名,这样显然就不严谨了。
现在,我使用这个框架的方法是利用它的生成类的那个网页 GenerateAllClasses.aspx 做代码生成,然后自己引用进来。虽然比默认的直接生成后在内存中编译运行要麻烦一点,但是这样便于 Debug. 还是很值得的。
评论
# re: SubSonic 的字段名未转义问题修正 2007-01-22 00:47 TerryLee
SubSonic还不错,号称是零代码数据访问层:) 回复 更多评论
@TerryLee
呵呵,是的。不过我不敢用它的自动方式,毕竟感觉自己的控制少。理由就像这篇 post 所描述的一样。
回复 更多评论
@木野狐
嗯,没错
另外使用时感觉这个东西的文档还是少。举的例子也很简单。稍微有用一点的用法都靠我自己的摸索。
比如这个:
要根据条件加载一个对象,文档(pdf)中提到可以用
/// 得到经办人所在科室的负责人
/// </summary>
/// <param name=”staff”></param>
/// <returns></returns>
public static Staff GetManager(Staff staff) {
SubSonic.Query qry = new SubSonic.Query(Staff.Schema.Name);
qry.AddWhere(Staff.Columns.IsFunctionary, true);
qry.AddWhere(Staff.Columns.OfficeId, staff.OfficeId);
IDataReader reader = qry.ExecuteReader();
if (reader.Read())
{
manager.Load(reader);
}
return manager;
}
subsonic 的字段名未转义问题修正 _asp技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » subsonic 的字段名未转义问题修正 _asp技巧
相关推荐
-      ASP基础教程:其它的ASP常用组件
-      ASP基础教程:学习ASP中子程序的应用
-      ASP基础教程之ASP程序对Cookie的处理
-      ASP基础教程之ASP AdRotator组件的使用
-      ADO初学者教程:ADO 通过GetString()加速脚本
-      ASP技巧实例:几行代码解决防止表单重复提交
-      ASP常见数学函数 Abs Atn Cos 等详细详解[ 来源:网页教学网 | 作者: | 时间:2007-09-12 10:57:29 | 收藏本文 ] 【大 中 小】【名称】
-      ASP基础教程之ASP AdRotator 组件的使用