第一次接触 SharpHsql(纯C#开源数据库引擎)
?????
????????? 在 開源中的靈感之源 的blog上看到這篇文章?開源純C#輕量級數據庫引擎:SharpHSQL 1.0.3.0版本 這篇文章,著實幸福了一陣。
????? 類似的數據庫引擎我用過不少,比如 sqlite 、MINOSSE?等。sqlite是純c在web應用中不方便,minnosse就根本沒有辦法正常運行。
????? 我尋找 這樣的數據庫引擎 最主要的原因是 想在web項目中替代ACCESS,減少網站建設費用和提高網站性能。
????? 首先我將SharpHsql 跟SQL Server 2000 進行比較 其中創建表和刪除表的數據 Hsql領先。修改、查詢數據速度基本上持平,查詢時SharpHsql要慢一點(很小的一點),SharpHsql的查詢同樣使用了緩存技術。
???? 插入數據的時候隨表中數據增加而速度越慢,在1萬行數據時時間增加減緩,這個速度大大慢于SQL server;
???? 我以前做測試access 的數據基本上是 SQL server 的1/10,所以SharpHsql的速度相對于Access還是很有優勢的,綜合比較基本是ACCESS 六倍以上的性能。
???
???? SharpHsql 的數據庫一共是?4 個文件 ?*.data 、*.cfg 、*.log 、 *.backup ;看后綴大家就知道干什么的,我就不多說了
???? 我們來看看他支持的功能,我這里摘錄一段代碼,大家看了代碼就明白??????
???
????????????????????{
????????????????????????case?"SELECT":
?????????????????????????????rResult?=?p.ProcessSelect();
????????????????????????????break;
????????????????????????case?"INSERT":
????????????????????????????rResult?=?p.ProcessInsert();
????????????????????????????break;
????????????????????????case?"UPDATE":
????????????????????????????rResult?=?p.ProcessUpdate();
????????????????????????????break;
????????????????????????case?"DELETE":
????????????????????????????rResult?=?p.ProcessDelete();
????????????????????????????break;
????????????????????????case?"ALTER":
????????????????????????????rResult=p.ProcessAlter();
????????????????????????????break;
????????????????????????case?"CREATE":
????????????????????????????rResult?=?ProcessCreate(c,?channel);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"DROP":
????????????????????????????rResult?=?ProcessDrop(c,?channel);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"GRANT":
????????????????????????????rResult?=?ProcessGrantOrRevoke(c,?channel,?true);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"REVOKE":
????????????????????????????rResult?=?ProcessGrantOrRevoke(c,?channel,?false);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"CONNECT":
????????????????????????????rResult?=?ProcessConnect(c,?channel);
????????????????????????????break;
????????????????????????case?"DISCONNECT":
????????????????????????????rResult?=?ProcessDisconnect(c,?channel);
????????????????????????????break;
????????????????????????case?"SET":
????????????????????????????rResult?=?ProcessSet(c,?channel);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"SCRIPT":
????????????????????????????rResult?=?ProcessScript(c,?channel);
????????????????????????????break;
????????????????????????case?"COMMIT":
????????????????????????????rResult?=?ProcessCommit(c,?channel);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"ROLLBACK":
????????????????????????????rResult?=?ProcessRollback(c,?channel);
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?"SHUTDOWN":
????????????????????????????rResult?=?ProcessShutdown(c,?channel);
????????????????????????????break;
????????????????????????case?"CHECKPOINT":
????????????????????????????rResult?=?ProcessCheckpoint(channel);
????????????????????????????break;
????????????????????????case?"CALL":
????????????????????????????rResult?=?p.ProcessCall();
????????????????????????????break;
????????????????????????case?"SHOW":
????????????????????????????rResult?=?ProcessShow(c,channel);
????????????????????????????break;
????????????????????????case?"DECLARE":
????????????????????????????rResult?=?p.ProcessDeclare();
????????????????????????????script?=?true;
????????????????????????????break;
????????????????????????case?";":
????????????????????????????continue;
????????????????????????default:
????????????????????????????throw?Trace.Error(Trace.UnexpectedToken,?sToken);
????????????????????}
???? 然后在DataReader的時候 他的 DataReader沒有實現索引器,只能用 DataReader[? Columnname ] 的方式 和DataReader.GetInt32(0) 這樣的方式實現。需要注意的是? DataReader[? Columnname ]? 中的 列名稱需使用大寫,在系統里面名稱這些全部是SharpHsql全部是大寫處理的;
??? DataReader[? Columnname ] 這種方式是使用 HashTable 實現,DataReader.GetInt32(0) 是使用 object[]實現。
?
? 在使用SharpHsqlDataAdapter 的時候,會發現 非SharpHsqlDataAdapter?.Fill(dataset)這樣的形式會報錯,比如SharpHsqlDataAdapter?.Fill(dataset,tablename?);這個問題好辦只要刪除? SharpHsqlDataAdapter.cs中的Fill方法就可以了,實際上他不需要重寫。
????????{
????????????return?base.Fill(?dataSet?);
????????}
?? 我發現的問題暫時就這些,我已經喜歡上它了。
?? 對了,他的log4net系統實在占用空間,我把它去除了!
總的來說數據庫引擎還是比較完善,只是 驅動寫的比較馬虎 ,還有就是 數據對象名稱 這些不應該全部換成大寫。
?
?
?程序猿們,我也跟風開了網店,主要經營土特產,云南核桃,四川正宗土雞蛋。有需要的就支持一下小店哈 ?七彩山川美食(http://qcsc.taobao.com)?
?
轉載于:https://www.cnblogs.com/leiyu1980/archive/2005/08/10/211504.html
總結
以上是生活随笔為你收集整理的第一次接触 SharpHsql(纯C#开源数据库引擎)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 忍不住也谈招聘应聘程序员的事
- 下一篇: C# Programming Langu