第一次接觸 SharpHsql(純C#開來源資料庫引擎)

來源:互聯網
上載者:User
     
          在 開源中的靈感之源 的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 ;看尾碼大家就知道幹什麼的,我就不多說了

     我們來看看他支援的功能,我這裡摘錄一段代碼,大家看了代碼就明白      
   

    switch(sToken)
                    {
                        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方法就可以了,實際上他不需要重寫。     public override int Fill(DataSet dataSet)
        {
            return base.Fill( dataSet );
        }

   我發現的問題暫時就這些,我已經喜歡上它了。

   對了,他的log4net系統實在佔用空間,我把它去除了!

總的來說資料庫引擎還是比較完善,只是 驅動寫的比較馬虎 ,還有就是 資料對象名稱 這些不應該全部換成大寫。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.