亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

C#數(shù)據(jù)本地存儲(chǔ)方案之SQLite

系統(tǒng) 2819 0

即使是做網(wǎng)絡(luò)應(yīng)用,在斷線情況下,也需要考慮數(shù)據(jù)的本地存儲(chǔ)。在SQLite出現(xiàn)之前,數(shù)據(jù)量大的情況下,我們一直使用ACCESS,數(shù)據(jù)量小,則文件存儲(chǔ)。ACCESS不支持事務(wù)原子性,在斷電情況下(這種情況總是會(huì)發(fā)生)會(huì)導(dǎo)致數(shù)據(jù)很難恢復(fù)。

一:安裝

SQLITE,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng)。我直接使用的是 http://sqlite.phxsoftware.com/ (An open source ADO.NET provider for the SQLite database engine)。下載完畢是一個(gè)EXE,安裝后根目錄如下:

clip_image002

Bin下有一個(gè)測(cè)試工具,可以查看本地運(yùn)行SQLITE的各項(xiàng)性能指標(biāo)。

二:新建數(shù)據(jù)庫(kù)

安裝完畢后,打開(kāi)visual studio,新建數(shù)據(jù)連接,可以看到數(shù)據(jù)源多了一項(xiàng)SQLite。

clip_image004

新建連接,如下圖。SQLITE的數(shù)據(jù)庫(kù),保存后是一個(gè)文件。

clip_image006

三:數(shù)據(jù)庫(kù)維護(hù)

可以在VS中方面的維護(hù)SQLITE數(shù)據(jù),如下圖:

clip_image008

可以在VS中使用類似SQL查詢分析器的功能,如下圖:

clip_image010

四:混合模式

安裝完畢,可以直接在項(xiàng)目集的引用中,多了

System.Data.SQLite

System.Data.SQLite.Linq

兩個(gè)程序集,由于 http://sqlite.phxsoftware.com/ 的System.Data.SQLite是混合模式程序集,是針對(duì)“v2.0.50727”版的運(yùn)行時(shí)生成的,在沒(méi)有配置其他信息的情況下,無(wú)法在 4.0 運(yùn)行時(shí)中加載該程序集。故需要在App.config中配置如下參數(shù)。

        
          <?
        
        xml version="1.0" encoding="utf-8" 
        
          ?>
        
        
          <
        
        
          configuration
        
        
          >
        
        
          <
        
        
          startup
        
        
          useLegacyV2RuntimeActivationPolicy
        
        =
        
          "true"
        
        
          >
        
        
          <
        
        
          supportedRuntime
        
        
          version
        
        =
        
          "v4.0"
        
        
          />
        
        
          </
        
        
          startup
        
        
          >
        
        
          </
        
        
          configuration
        
        
          >
        
      

五:SQLiteHelper

最后,提供一個(gè)自己寫(xiě)的SQLiteHelper:

        
          using
        
         System;

        
          using
        
         System.Collections.Generic;

        
          using
        
         System.Linq;

        
          using
        
         System.Text;

        
          using
        
         System.Data.SQLite;

        
          using
        
         System.Data;

        
          using
        
         System.Data.Common;


        
          namespace
        
         Com.Luminji.DataService.SQLHelpers
{
    
        
          public
        
        
          class
        
         SQLiteHelper
    {
        
        
          /// <summary>
        
        
          /// ConnectionString樣例:Data Source=Test.db3;Pooling=true;FailIfMissing=false
        
        
          /// </summary>
        
        
          public
        
        
          static
        
        
          string
        
         ConnectionString { 
        
          get
        
        ; 
        
          set
        
        ; }

        
        
          private
        
        
          static
        
        
          void
        
         PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, 
        
          string
        
         cmdText, 
        
          params
        
        
          object
        
        [] p)
        {
            
        
          if
        
         (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Parameters.Clear();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 30;
            
        
          if
        
         (p != 
        
          null
        
        )
            {
                
        
          foreach
        
         (
        
          object
        
         parm 
        
          in
        
         p)
                    cmd.Parameters.AddWithValue(
        
          string
        
        .Empty, parm);
            }
        }

        
        
          public
        
        
          static
        
         DataSet ExecuteQuery(
        
          string
        
         cmdText, 
        
          params
        
        
          object
        
        [] p)
        {
            
        
          using
        
         (SQLiteConnection conn = 
        
          new
        
         SQLiteConnection(ConnectionString))
            {
                
        
          using
        
         (SQLiteCommand command = 
        
          new
        
         SQLiteCommand())
                {
                    DataSet ds = 
        
          new
        
         DataSet();
                    PrepareCommand(command, conn, cmdText, p);
                    SQLiteDataAdapter da = 
        
          new
        
         SQLiteDataAdapter(command);
                    da.Fill(ds);
                    
        
          return
        
         ds;
                }
            }
        }

        
        
          public
        
        
          static
        
        
          int
        
         ExecuteNonQuery(
        
          string
        
         cmdText, 
        
          params
        
        
          object
        
        [] p)
        {
            
        
          using
        
         (SQLiteConnection conn = 
        
          new
        
         SQLiteConnection(ConnectionString))
            {
                
        
          using
        
         (SQLiteCommand command = 
        
          new
        
         SQLiteCommand())
                {
                    PrepareCommand(command, conn, cmdText, p);
                    
        
          return
        
         command.ExecuteNonQuery();
                }
            }
        }

        
        
          public
        
        
          static
        
         SQLiteDataReader ExecuteReader(
        
          string
        
         cmdText, 
        
          params
        
        
          object
        
        [] p)
        {
            
        
          using
        
         (SQLiteConnection conn = 
        
          new
        
         SQLiteConnection(ConnectionString))
            {
                
        
          using
        
         (SQLiteCommand command = 
        
          new
        
         SQLiteCommand())
                {
                    PrepareCommand(command, conn, cmdText, p);
                    
        
          return
        
         command.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
        }

        
        
          public
        
        
          static
        
        
          object
        
         ExecuteScalar(
        
          string
        
         cmdText, 
        
          params
        
        
          object
        
        [] p)
        {
            
        
          using
        
         (SQLiteConnection conn = 
        
          new
        
         SQLiteConnection(ConnectionString))
            {
                
        
          using
        
         (SQLiteCommand command = 
        
          new
        
         SQLiteCommand())
                {
                    PrepareCommand(command, conn, cmdText, p);
                    
        
          return
        
         command.ExecuteScalar();
                }
            }
        }

    }
}

      
六:附注
SQLite官方網(wǎng)站: http://www.sqlite. org/ 時(shí)第一眼看到關(guān)于SQLite的特性。
  1. ACID事務(wù)
  2. 零配置 – 無(wú)需安裝和管理配置
  3. 儲(chǔ)存在單一磁盤(pán)文件中的一個(gè)完整的數(shù)據(jù)庫(kù)
  4. 數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由的共享
  5. 支持?jǐn)?shù)據(jù)庫(kù)大小至2TB
  6. 足夠小, 大致3萬(wàn)行C代碼, 250K
  7. 比一些流行的數(shù)據(jù)庫(kù)在大部分普通數(shù)據(jù)庫(kù)操作要快
  8. 簡(jiǎn)單, 輕松的API
  9. 包含TCL綁定, 同時(shí)通過(guò)Wrapper支持其他語(yǔ)言的綁定
  10. 良好注釋的源代碼, 并且有著90%以上的測(cè)試覆蓋率
  11. 獨(dú)立: 沒(méi)有額外依賴
  12. Source完全的Open, 你可以用于任何用途, 包括出售它
  13. 支持多種開(kāi)發(fā)語(yǔ)言,C, PHP, Perl, Java, ASP .NET,Python

本文出處: http://www.cnblogs.com/luminji/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接。

C#數(shù)據(jù)本地存儲(chǔ)方案之SQLite


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美成人另类 | 99视频在线| 日韩视频二区 | 精品久久伊人 | 99在线免费 | 午夜视频久久久久一区 | 久久春色| 曰本女人色黄网站 | 手机看片久久 | 国产精品免费久久久久影院小说 | 亚洲欧美另类国产综合 | 农村苗族一级特黄a大片 | 91精品国产91久久久久久青草 | 狠狠草视频 | 亚洲毛片儿 | 九九福利| 亚洲二三区 | 欧美日本高清 | 手机看片福利日韩欧美看片 | 四虎4hu影库免费永久国产 | 九九热精品免费视频 | 99视频久久 | 亚洲精品视频一区二区 | 亚洲一区二区天海翼 | 日本欧美视频在线 | 妞干网中文字幕 | 久青草网站 | 成年人福利网站 | 国产做爰免费视频观看 | 91精品成人免费国产片 | 欧美精品成人a多人在线观看 | 日本中文在线播放 | 欧美成人亚洲欧美成人 | 日日夜夜摸摸 | se94se在线看片secom | 免费的一级片网站 | 欧美日韩综合视频 | 中国一级特黄特级毛片 | 欧美精彩狠狠色丁香婷婷 | 狠狠狠色丁香婷婷综合久久五月 | 国产视频一区二区 |