即使是做網絡應用,在斷線情況下,也需要考慮數據的本地存儲。在SQLite出現之前,數據量大的情況下,我們一直使用ACCESS,數據量小,則文件存儲。ACCESS不支持事務原子性,在斷電情況下(這種情況總是會發生)會導致數據很難恢復。
一:安裝
SQLITE,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統。我直接使用的是 http://sqlite.phxsoftware.com/ (An open source ADO.NET provider for the SQLite database engine)。下載完畢是一個EXE,安裝后根目錄如下:
Bin下有一個測試工具,可以查看本地運行SQLITE的各項性能指標。
二:新建數據庫
安裝完畢后,打開visual studio,新建數據連接,可以看到數據源多了一項SQLite。
新建連接,如下圖。SQLITE的數據庫,保存后是一個文件。
三:數據庫維護
可以在VS中方面的維護SQLITE數據,如下圖:
可以在VS中使用類似SQL查詢分析器的功能,如下圖:
四:混合模式
安裝完畢,可以直接在項目集的引用中,多了
System.Data.SQLite
System.Data.SQLite.Linq
兩個程序集,由于 http://sqlite.phxsoftware.com/ 的System.Data.SQLite是混合模式程序集,是針對“v2.0.50727”版的運行時生成的,在沒有配置其他信息的情況下,無法在 4.0 運行時中加載該程序集。故需要在App.config中配置如下參數。
<?
xml version="1.0" encoding="utf-8"
?>
<
configuration
>
<
startup
useLegacyV2RuntimeActivationPolicy
=
"true"
>
<
supportedRuntime
version
=
"v4.0"
/>
</
startup
>
</
configuration
>
五:SQLiteHelper
最后,提供一個自己寫的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();
}
}
}
}
}
本文出處:
http://www.cnblogs.com/luminji/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

