分享
 
 
 

SubSonic 的字段名未转义问题修正

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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];

我修改了一下源代码中的 SqlDataProvider.cs 里的 BuildWhere 方法,暂时解决这个问题。

protected static string BuildWhere(Query qry)

{

string where = "";

string whereOperator = " WHERE ";

foreach (Where wWhere in qry.wheres)

{

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 ";

}

foreach (BetweenAnd between in qry.betweens)

{

where += whereOperator + "[" + between.TableName + "].[" + between.ColumnName + "] BETWEEN @start" +

between.ColumnName + " AND @end" + between.ColumnName;

whereOperator = " AND ";

}

for (int i = qry.wheres.Count - 1; i >= 0; i--)

{

if (qry.wheres[i].ParameterValue == DBNull.Value)

{

qry.wheres.RemoveAt(i);

}

}

return where;

}

我增加的部分在上面代码中标注为绿色。

很奇怪,作者对表名加了方括弧,却没有加给列名,这样显然就不严谨了。

这个库中还有 MySqlDataProvider 等类也有此问题。因为我现在暂时不用 MySQL, 就先不去改那些了。

另外有一个体会就是使用开源的第三方类库时,尽量都用源代码方式加入到项目中来。否则出错了调试不进去。

现在,我使用这个框架的方法是利用它的生成类的那个网页 GenerateAllClasses.aspx 做代码生成,然后自己引用进来。虽然比默认的直接生成后在内存中编译运行要麻烦一点,但是这样便于 Debug. 还是很值得的。

posted on 2007-01-22 00:28 木野狐 阅读(62) 评论(4) 编辑 收藏 引用 网摘 所属分类: .NET

评论

# re: SubSonic 的字段名未转义问题修正 2007-01-22 00:47 TerryLee

SubSonic还不错,号称是零代码数据访问层:) 回复 更多评论

# re: SubSonic 的字段名未转义问题修正 2007-01-22 00:49 木野狐

@TerryLee

呵呵,是的。不过我不敢用它的自动方式,毕竟感觉自己的控制少。理由就像这篇 post 所描述的一样。

回复 更多评论

# re: SubSonic 的字段名未转义问题修正 2007-01-22 00:53 TerryLee

@木野狐

嗯,没错

我只用它写过一个小Demo:) 回复 更多评论

# re: SubSonic 的字段名未转义问题修正 2007-01-22 01:02 木野狐

另外使用时感觉这个东西的文档还是少。举的例子也很简单。稍微有用一点的用法都靠我自己的摸索。

比如这个:

要根据条件加载一个对象,文档(pdf)中提到可以用

对象.Load(...) 来加载,其中的参数可以是 IDataReader, DataRow, DataTable.

我用一个 IDataReader 传进去,结果搞了半天都是出错。最后调试到框架源代码里发现必须在传递 IDataReader 进去之前,自己 Read 一次才能成功。比如我写的这段简单例子里用到:

/// <summary>

/// 得到经办人所在科室的负责人

/// </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);

Staff manager = new Staff();

IDataReader reader = qry.ExecuteReader();

if (reader.Read())

{

manager.Load(reader);

}

return manager;

}

http://www.cnblogs.com/RChen/archive/2007/01/22/actionpack1.html

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有