這是我的文章備份,原作請看:http://www.dotblogs.com.tw/mis2000lab/archive/2015/06/12/searchengine_class_sample_20150612.aspx
[微軟範例] 簡單搜尋引擎 #1 (Model Binding / 類別檔入門)& 關鍵字的「高亮度(HighLight)」顯示
上一週課程提到 Model Binding
(相關文章請看 http://www.dotblogs.com.tw/mis2000lab/Tags/Model%20Binding/default.aspx)
入門者 寫一個簡單的類別檔,以「公開屬性」對應資料表的「欄位」
微軟的網站有一個範例也用到這樣的作法,而且更簡單。
因為他的資料表跟我上課的 test資料表(新聞資料表)很類似
可以當成補充教材。
**************************************************************************************
C# / VB範例都有提供:https://code.msdn.microsoft.com/Implement-Search-Engine-in-cc2ca84e
作者是One Code Team,我猜是: "一站式程式範例庫" 提供的
[下載]微軟 All-In-One Code Framework / 一站式程式範例庫
**************************************************************************************
Article.cs類別檔
/// <summary>
/// 用來表示資料庫的「一筆記錄」。
/// </summary>
public class Article
{
public long ID { get; set; } // 文章編號(公開屬性)
public string Title { get; set; } // 文章標題(公開屬性)
public string Content { get; set; } // 文章內容(公開屬性)
}
另一個類別檔,DataAccess.cs裡面則是 資料存取 的方法。
程式碼都很簡單,只有幾段ADO.NET而已。
僅列出一部分進行說明:
// 註解:您在程式碼看到List的資料型態<Article>
就是上一個Article.cs類別檔用來對應資料表「欄位」的「公開屬性」。VB語法寫成List(Of Article)。
public List< Article> GetAll() {
// 取得資料表裡面的所有紀錄
return QueryList("select * from [Articles]");
}
protected List< Article> QueryList(string cmdText) {
List< Article> articles = new List< Article>();
SqlCommand cmd = GenerateSqlCommand(cmdText);
//本類別檔裡面的 另一個函式
using (cmd.Connection) {
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows) {
while (reader.Read()) {
articles.Add(ReadArticle(reader));
// 把找到的文章,放到 List<Article>裡面。
}
}
}
return articles; // 傳回值,資料型態 List<Article>
}
------ 原廠的範例,有個小Bug。------
您按下搜尋按鈕,關鍵字的「高亮度(HighLight)」顯示
會把大寫變成小寫,因為他的JavaScript裡面 RegExp用到 "igm" 代表忽略大小寫。
如果您剛好搜尋「a」這個字,會讓「超連結」損毀。因為超連結的字串就是寫成 <a> ... </a>
因為他的「高亮度」顯示的功能,是透過 JavaScript來作,透過 .Replace()來作文字的替換,
把「關鍵字」加上黃色底色。
下一篇文章用一些方法,稍做改寫。請參閱:
[微軟範例] 簡單搜尋引擎 #2 (Model Binding / 類別檔入門)& 關鍵字的「高亮度(HighLight)」顯示
如果您想作一個簡單的資料庫搜尋、站內文章(產品)搜尋,可以參考以前文章:
[文章下載]網站內的搜尋引擎,單一欄位與多重欄位的搜尋(自己手寫SqlDataSource與SelectParameter參數)
並請牢記:使用 Parameter寫法,避免SQL Injection攻擊。
[FAQ] ADO.NET 參數寫法 Parameter(避免SQL Injection資料隱碼攻擊)
Microsoft Anti-XSS (Anti-Cross Site Scripting Library) 避免XSS攻擊
文章標籤
全站熱搜
