對于文本資料庫的原理:簡單的說,就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等功能,都是不需要授權可以直接使用的。
版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:
http://www.cnblogs.com/cyq1162/archive/2013/05/02/3055049.html