對于文本資料庫的原理:簡單的說,就4步:
1:存儲用json或xml。
2:讀取時還原為MDataTable。
3:操作時操作MDataTable實作資料行的變化。
4:儲存時重新寫為json或xml。
PS:當然還有一個CodeFirst模式時自動産生用于記錄表結構的"表名.ts"檔案。
文本資料庫的Where語句分拆:
原先的功能,有Select(where),這個where是支援sql語句的,簡單說就是對where進行了以下分析:
string where="id>1 and name like '%a%' order by id desc";
分析出where,order by ,再分析出id,name及對應的值,循環進行值判斷,提取出合适的行。
進而達到查詢的功能。
現在要支援SQL,看似複雜點又提升了點,因為簡單的SQL語句大體如下:
Insert into ErrorLogs(PageUrl , ErrorMessage) values('http://...','what'' is the ...')
Select count(*) from ErrorLogs...
Select * from ErrorLogs where ...
Select id,name from ErrorLogs ...
Update ErrorLogs set id=1 and name='name is Mr'' Right'
Delete From ErrorLogs where ...
對于這些字元串的處理,真是很考基本功:
比如:Insert into ErrorLogs(PageUrl , ErrorMessage) values('http://...','what'' is (the (name))...')
把這條語句,分拆出:
1:操作:Insert
2: 表名:ErrorLogs
3:PageUrl :"http://..."
4: ErrorMessage :"'what'' is (the (name))..."
PS:我覺的可以适當的拿來做面試題了。。。。
大體整體的實作,基本上就等同于解析上面的SQL文法,然後回歸到MDataTable的原始操作上去,細節就不啰嗦重複了。
下面看一下實作後的效果圖:
項目截圖就省略了,頁面背景的代碼:
protected void btnExec_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtSql.Text))
{
MProc proc = new MProc(txtSql.Text, txtConn.Text);
switch (ddlExeType.SelectedValue)
{
case "0":
labTip.Text = proc.ExeScalar<string>();
break;
case "1":
labTip.Text = proc.ExeNonQuery().ToString();
case "2":
MDataTable dt = proc.ExeMDataTable();
rptList.DataSource = dt;
rptList.DataBind();
}
proc.Close();
}
}
上面這段代碼很簡單,執行指定連結的SQL語句,然後顯示相應的資訊。
操作資料庫,基本配置檔案裡指定日志的連結字元串是必不可少的内容:
<add name="LogConn" connectionString="txt path={0}App_Data"/>
說明:把系統錯誤日志用檔案資料庫記錄,CYQ.Data V5内置用了CodeFirst方式來實作異常的資料庫執行日志錯誤:
表名為ErrorLogs
4個字段分别為:
1:ID,PageUrl,ErrorMessage,CreateTime。
下面我們看界面:由于我的項目裡本身就有日志,我們查詢一下:

OK,下面我們删除所有資料庫,執行成功後删除了5行資料:
再添加一行資料:
最後更新這行1行資料:
最終再查詢顯示一次:
至此,整個基本的SQL文法解析和實作就告終了,至于什麼GroupBy,多表,視圖,函數之類的,就在文本資料庫的能力之外了。
功能的實作自己用兩個Table去For還是while去實作自己需要的邏輯。
下面再補充一下ErrogLogs這個日志說明:
預設的CodeFirst,簡單說就是你指定哪種資料庫類型,就會自動建立相應的表結構,然後把執行SQL的錯誤資訊寫到該日志裡,友善查詢分析和解決。
以前,我習慣把日志的連結寫成:
<add name="LogConn" connectionString="Conn"/>
其實就是指向Conn(CYQ.Data預設的主資料庫配置頂),這樣就把日志表放到和主資料庫表同一個資料庫。。
結果有時候,如果主資料庫挂掉,異常日志就無法記錄了,是以建議是存到其它資料庫。
但有了檔案資料庫之後,用文本來存儲日志,看似是個不錯的選擇,而且操作也相當友善。
CodeFirst時,如果有資料(第一條資料産生時,自動根據實體産生了表結構,如果是文本,在指定的目錄下出來這個)
當然了,除了比較标準的,是自動生成的,如果你是自己手工建立,可以建立一個表名.ts表結構,内容:
ID,int;
PageUrl,string;
ErrorMessage,string;
CreateTime,datetime;
CYQ.Data V5裡文本資料庫,實用價值:
包括網站站點的廣告節點顯示,友情連結,一些需要經常或偶爾編輯的Key,Value值等項,存文本資料庫是最友善不過了。
有效的把非主站的附加資料,存儲到文本資料庫,利用文本資料完全記憶體表機制,高效,節能,又友善。
CYQ.Data V5在文本資料庫、Access、SQLite、XHtmlAction等功能,都是不需要授權可以直接使用的。
本文轉自cyq1162 51CTO部落格,原文連結:http://blog.51cto.com/cyq1162/1191805,如需轉載請自行聯系原作者