亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

SubSonic 的字段名未轉義問題修正

2019-11-18 16:43:09
字體:
來源:轉載
供稿:網友

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.49028c.com/RChen/archive/2007/01/22/actionpack1.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www亚洲欧美| 色偷偷91综合久久噜噜| 亚洲曰本av电影| 欧美精品久久一区二区| 黄色成人av在线| 国产精品大陆在线观看| 久久精品国产成人精品| 日韩最新免费不卡| 一区二区三区视频免费在线观看| 日韩在线观看免费av| 国产成人精品优优av| 91av成人在线| 日韩av在线直播| 久久精品中文字幕免费mv| 另类天堂视频在线观看| 一区二区三区 在线观看视| 欧美视频国产精品| 欧美成人精品一区二区三区| 色www亚洲国产张柏芝| 91超碰中文字幕久久精品| 日韩av在线天堂网| 欧美一级大片视频| 2025国产精品视频| 午夜精品国产精品大乳美女| 国产精品扒开腿做爽爽爽的视频| 搡老女人一区二区三区视频tv| 欧美日韩在线观看视频小说| 国产97在线观看| 日韩精品在线观看视频| 成人欧美在线观看| 久久精品国产亚洲精品2020| 欧美黄色片免费观看| 日韩少妇与小伙激情| 亚洲新声在线观看| 日韩欧美成人网| 亚洲人线精品午夜| 91成人国产在线观看| 亚洲欧美国产一本综合首页| 久久综合色88| 日韩免费观看av| 欧美日韩在线视频首页| 日韩精品视频免费| 国产精品久久久久久婷婷天堂| 成人h视频在线观看播放| 亚洲欧美国内爽妇网| 国产精品免费视频久久久| 亚洲片在线资源| 奇米一区二区三区四区久久| 欧美专区日韩视频| 欧美午夜电影在线| 国模视频一区二区三区| 亚洲人成人99网站| 在线观看亚洲区| 国产日韩在线看片| 亚洲欧美综合精品久久成人| 亚洲视频在线观看网站| 欧洲亚洲女同hd| 国产精品老女人精品视频| 啊v视频在线一区二区三区| 91国偷自产一区二区三区的观看方式| 日韩美女在线观看一区| 91精品久久久久久综合乱菊| 欧美日韩xxxxx| 亚洲第一区中文字幕| 狠狠做深爱婷婷久久综合一区| 久久精品亚洲国产| 日韩电视剧在线观看免费网站| 亚洲国产精品人久久电影| 俺去啦;欧美日韩| 国产精品中文字幕久久久| 亚洲欧美国内爽妇网| 欧美在线不卡区| 国产男人精品视频| 美女性感视频久久久| 欧美丰满少妇xxxxx做受| 亚洲人成网站免费播放| 最近免费中文字幕视频2019| 国产精品免费视频久久久| 亚洲黄一区二区| 久久久国产精品免费| 亚洲综合国产精品| 欧美日韩一二三四五区| 高潮白浆女日韩av免费看| 欧美极品在线视频| 国产午夜精品全部视频在线播放| 久久久久中文字幕| 国产精品自在线| 久久久久久久一| 国产精品网站入口| 亚洲国产婷婷香蕉久久久久久| 久久久久一本一区二区青青蜜月| 久久久av亚洲男天堂| 欧美激情图片区| 欧美激情网站在线观看| 国产欧美一区二区三区久久人妖| 久久免费视频网站| 久99久在线视频| 日韩在线国产精品| 亚洲精品xxxx| 欧美与欧洲交xxxx免费观看| 久久久这里只有精品视频| 日韩av在线免费观看| 国产欧美日韩专区发布| …久久精品99久久香蕉国产| 日韩黄色av网站| 精品毛片三在线观看| 57pao国产成人免费| 国产精品444| 国产精品久在线观看| 91tv亚洲精品香蕉国产一区7ujn| 日韩亚洲综合在线| 久久久精品2019中文字幕神马| 亚洲美腿欧美激情另类| 国产精品高精视频免费| 亚洲免费视频网站| 91在线免费看网站| 亚洲国产精品久久久久久| 国产噜噜噜噜久久久久久久久| 亚洲欧美精品伊人久久| 日韩在线视频免费观看| 亚洲人午夜精品免费| 亚洲一区二区免费| 欧美国产激情18| 久久久精品一区二区三区| 精品久久久久久中文字幕一区奶水| 久久久亚洲欧洲日产国码aⅴ| 亚洲欧美成人精品| 国产精品久久久久一区二区| 亚洲第一网站男人都懂| 亚洲区中文字幕| 疯狂蹂躏欧美一区二区精品| 国产精品一区电影| 日韩免费在线视频| 亚洲国内高清视频| 亚洲国产精品久久91精品| 欧美色视频日本高清在线观看| 亚洲男人天堂2024| 亚洲视频在线免费观看| 国产午夜精品视频| 国产精品网站入口| 日本精品在线视频| 91av福利视频| 欧美裸体男粗大视频在线观看| 66m—66摸成人免费视频| 98精品国产自产在线观看| 亚洲天堂av图片| 亚洲最大福利视频| 欧美性受xxxx白人性爽| 亚洲一区中文字幕| 亚洲天堂成人在线视频| 精品国产欧美一区二区五十路| 欧美激情视频网站| 欧美夜福利tv在线| 国产欧美日韩免费看aⅴ视频| 成人在线视频福利| 91精品视频在线播放| 欧美激情区在线播放| 欧美性xxxx极品高清hd直播| 日韩精品免费在线视频| 97视频在线观看免费高清完整版在线观看| 91禁国产网站| 久久综合五月天| 日韩欧美在线免费| 久久激情视频久久|