我的CMS開發記-3

來源:互聯網
上載者:User

只要是人就會犯錯誤,只要是軟體就會有BUG,即使他是nhibernate

nhibernate1.2支援access資料庫。但是我一直在用sqlserver開發。現在已經有了一點樣子,於是我心血來潮,將資料庫切換為Access,看看執行的效果如何。

碰,出錯了。Sql語句語法錯誤。我靠,果然有錯誤,改改,再試?還是出錯。鬱悶了。打斷點開始調試,確定My Code沒有錯。我沒錯那誰錯了?nhibernate??不會吧? 不過事已至此,又不可能重新寫,只好硬著頭皮上了,呵呵。將nhibernate的引用移除,直接引用nhibernate的源碼開始調試,沒想到啊沒想到,居然還真的被我給找出bug 來了。

nhibernate處理access時,使用的是jetdriver這個方言。由於access的特殊性(sql語句做串連時,必須要用括弧),於是在jetdriver裡,對sql語句進行了處理。代碼 在此:jetdriver.cs的96行處有這麼一段

private SqlString FinalizeJoins(SqlString sqlString)
{
if (_queryCache.Contains(sqlString))
{
return (SqlString) _queryCache[sqlString];
}
// fix wxy
int beginOfFrom = sqlString.IndexOfCaseInsensitive(" from ");
int endOfFrom = sqlString.IndexOfCaseInsensitive(" where ");
if (beginOfFrom < 0)
{
return sqlString;
}
if (endOfFrom < 0)
{
endOfFrom = sqlString.Length;
}
string fromClause = sqlString.Substring(beginOfFrom, endOfFrom - beginOfFrom).ToString();
string transformedFrom = TransformFromClause(fromClause);
//put it all together again
SqlStringBuilder final = new SqlStringBuilder(sqlString.Count + 1);
final.Add(sqlString.Substring(0, beginOfFrom));
final.Add(transformedFrom);
final.Add(sqlString.Substring(endOfFrom));
SqlString ret = final.ToSqlString();
_queryCache[sqlString] = ret;
return ret;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.