最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Sqlite 操作類(lèi)代碼

 更新時(shí)間:2009年11月15日 22:52:56   作者:  
這兩天用了用SQLite,感覺(jué)比SQL CE好用多了,最主要的是性能好多了.這一點(diǎn)對(duì)手持設(shè)備來(lái)講很重要.閑話少說(shuō),下來(lái)將怎么在WM用.NET CF訪問(wèn)SQLite.
1. ADO.NET Provider For SQLite.
  ADO.NET 提供程序是香港(貌似)一個(gè)公司提供的.項(xiàng)目地址見(jiàn):http://sourceforge.net/projects/sqlite-dotnet2
  2. 對(duì)SQLite.NET的封裝,提供一個(gè)簡(jiǎn)單的操作幫助類(lèi).
SQLiteHelper
復(fù)制代碼 代碼如下:

/**//**
* SQLite操作的幫助類(lèi).
*
* Author: egmkang.wang
* Date: 2009-06-21
*/
namespace System.Data.SQLite
{
using System.Data;
using System.Data.SQLite;
using System.IO;
public class SqliteHelper
{
private static string pwd = "PWD";
private static string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\sqliteTest.db";
private static string connString = string.Format("Data Source =\"{0}\"", path, pwd);
/**//// <summary>
/// 返回?cái)?shù)據(jù)庫(kù)鏈接字符串
/// </summary>
public static string ConnString
{
get { return connString; }
}
/**//// <summary>
/// 執(zhí)行SQL語(yǔ)句,返回受影響的行數(shù)
/// </summary>
/// <param name="cmdText">需要被執(zhí)行的SQL語(yǔ)句</param>
/// <returns>受影響的行數(shù)</returns>
public static int ExecuteNonQuery(string cmdText)
{
return ExecuteNonQuery(ConnString, cmdText);
}
/**//// <summary>
/// 執(zhí)行帶有事務(wù)的SQL語(yǔ)句
/// </summary>
/// <param name="trans">事務(wù)</param>
/// <param name="cmdText">SQL語(yǔ)句</param>
/// <returns>受影響的行數(shù)</returns>
public static int ExecuteNonQuery(SQLiteTransaction trans, string cmdText, params SQLiteParameter[] parameters)
{
int val = 0;
using (SQLiteCommand cmd = new SQLiteCommand())
{
PrepareCommand(cmd, (SQLiteConnection)trans.Connection, trans, cmdText, parameters);
val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
return val;
}
/**//// <summary>
/// 執(zhí)行SQL語(yǔ)句,返回受影響的行數(shù)
/// </summary>
/// <param name="connString">連接字符串</param>
/// <param name="cmdText">SQL語(yǔ)句</param>
/// <param name="parameters">SQL的參數(shù)</param>
/// <returns>受影響的行數(shù)</returns>
public static int ExecuteNonQuery(string connString, string cmdText, params SQLiteParameter[] parameters)
{
using (SQLiteConnection conn = new SQLiteConnection(connString))
{
return ExecuteNonQuery(conn, cmdText, parameters);
}
}
/**//// <summary>
/// 執(zhí)行SQL語(yǔ)句,返回受影響的行數(shù)
/// </summary>
/// <param name="connection">數(shù)據(jù)庫(kù)鏈接</param>
/// <param name="cmdText">SQL語(yǔ)句</param>
/// <param name="parameters">參數(shù)</param>
/// <returns>受影響的行數(shù)</returns>
public static int ExecuteNonQuery(SQLiteConnection connection, string cmdText, params SQLiteParameter[] parameters)
{
int val = 0;
using (SQLiteCommand cmd = new SQLiteCommand())
{
PrepareCommand(cmd, connection, null, cmdText, parameters);
val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
return val;
}
/**//// <summary>
/// 執(zhí)行查詢,并返回結(jié)果集的第一行的第一列.其他所有的行和列被忽略.
/// </summary>
/// <param name="cmdText">SQL 語(yǔ)句</param>
/// <returns>第一行的第一列的值</returns>
public static object ExecuteScalar(string cmdText)
{
return ExecuteScalar(ConnString, cmdText);
}
/**//// <summary>
/// 執(zhí)行查詢,并返回結(jié)果集的第一行的第一列.其他所有的行和列被忽略.
/// </summary>
/// <param name="connString">連接字符串</param>
/// <param name="cmdText">SQL 語(yǔ)句</param>
/// <returns>第一行的第一列的值</returns>
public static object ExecuteScalar(string connString, string cmdText)
{
using (SQLiteConnection conn = new SQLiteConnection(connString))
{
return ExecuteScalar(conn, cmdText);
}
}
/**//// <summary>
/// 執(zhí)行查詢,并返回結(jié)果集的第一行的第一列.其他所有的行和列被忽略.
/// </summary>
/// <param name="connection">數(shù)據(jù)庫(kù)鏈接</param>
/// <param name="cmdText">SQL 語(yǔ)句</param>
/// <returns>第一行的第一列的值</returns>
public static object ExecuteScalar(SQLiteConnection connection, string cmdText)
{
object val;
using (SQLiteCommand cmd = new SQLiteCommand())
{
PrepareCommand(cmd, connection, null, cmdText);
val = cmd.ExecuteScalar();
}
return val;
}
/**//// <summary>
/// 執(zhí)行SQL語(yǔ)句,返回結(jié)果集的DataReader
/// </summary>
/// <param name="cmdText">SQL語(yǔ)句</param>
/// <param name="parameters">參數(shù)</param>
/// <returns>結(jié)果集的DataReader</returns>
public static SQLiteDataReader ExecuteReader(string cmdText, params SQLiteParameter[] parameters)
{
return ExecuteReader(ConnString, cmdText, parameters);
}
/**//// <summary>
/// 執(zhí)行SQL語(yǔ)句,返回結(jié)果集的DataReader
/// </summary>
/// <param name="connString">連接字符串</param>
/// <param name="cmdText">SQL語(yǔ)句</param>
/// <param name="parameters">參數(shù)</param>
/// <returns>結(jié)果集的DataReader</returns>
public static SQLiteDataReader ExecuteReader(string connString, string cmdText, params SQLiteParameter[] parameters)
{
SQLiteConnection conn = new SQLiteConnection(connString);
SQLiteCommand cmd = new SQLiteCommand();
try
{
PrepareCommand(cmd, conn, null, cmdText, parameters);
SQLiteDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
/**//// <summary>
/// 預(yù)處理Command對(duì)象,數(shù)據(jù)庫(kù)鏈接,事務(wù),需要執(zhí)行的對(duì)象,參數(shù)等的初始化
/// </summary>
/// <param name="cmd">Command對(duì)象</param>
/// <param name="conn">Connection對(duì)象</param>
/// <param name="trans">Transcation對(duì)象</param>
/// <param name="cmdText">SQL Text</param>
/// <param name="parameters">參數(shù)實(shí)例</param>
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, string cmdText, params SQLiteParameter[] parameters)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
if (null != parameters && parameters.Length > 0)
{
cmd.Parameters.AddRange(parameters);
}
}
}
}

  3. 增刪改查:
復(fù)制代碼 代碼如下:

Insert,Delete,Update
const string s_AddressTreeIntoSQLite = "Insert into [AddressTree] ([Id],[ItemType],[ParentId],[Name]) values (@Id,@ItemType,@ParentId,@Name);";
SqliteHelper.ExecuteNonQuery(tran, s_AddressTreeIntoSQLite,
//new SQLiteParameter[] here
);
Select
const string s_AddresTreeFromSqlCE = "Select [Id],[ItemType],[ParentId],[Name] From [AddressTree];";
using (SqlCeDataReader rdr = SqlCeHelper.ExecuteReader(s_AddresTreeFromSqlCE ))
{
while (rdr.Read())
{
//Read Data Here
}
}

  4. 其他
  SQLite性能絕對(duì)強(qiáng)悍.四表連接查詢,查詢200次,SQL CE需要44秒(with index),SQLite只需要3-6秒(with index).
插入,刪除更新性能參見(jiàn)http://www.cnblogs.com/egmkang/archive/2009/06/06/1497678.html
  PS:最近發(fā)現(xiàn)執(zhí)行sql的時(shí)候,最好使用單一的長(zhǎng)連接,而不是ConnectionString.原因很簡(jiǎn)單,嵌入式數(shù)據(jù)庫(kù)沒(méi)有連接池技術(shù),
在進(jìn)行數(shù)據(jù)庫(kù)查詢中的鏈接的打開(kāi)關(guān)閉費(fèi)用相對(duì)來(lái)說(shuō)比較高昂.這一點(diǎn)在寫(xiě)程序的時(shí)候注意以下.
  還有,有關(guān)二進(jìn)制資源,需要及時(shí)釋放,例如SqlCommand,這些在寫(xiě)Web 程序的時(shí)候體驗(yàn)不是很大,畢竟那種環(huán)境擁有大量
的內(nèi)存,GC的效率又是比較高.

相關(guān)文章

  • CentOS下更新SQLite版本

    CentOS下更新SQLite版本

    SQLite是一個(gè)軟件庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的 SQL 數(shù)據(jù)庫(kù)引擎。這篇文章主要介紹了CentOS下更新SQLite版本,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-12-12
  • SQLite教程(十二):鎖和并發(fā)控制詳解

    SQLite教程(十二):鎖和并發(fā)控制詳解

    這篇文章主要介紹了SQLite教程(十二):鎖和并發(fā)控制詳解,本文講解了鎖和并發(fā)控制機(jī)制概述、文件鎖、回滾日志、數(shù)據(jù)寫(xiě)入、SQL級(jí)別的事務(wù)控制等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • SQLite字符串比較時(shí)的大小寫(xiě)問(wèn)題解決方法

    SQLite字符串比較時(shí)的大小寫(xiě)問(wèn)題解決方法

    這篇文章主要介紹了SQLite字符串比較時(shí)的大小寫(xiě)問(wèn)題解決方法,本文總結(jié)了比較字符串時(shí)的大小寫(xiě)問(wèn)題的3種解決方案,需要的朋友可以參考下
    2015-03-03
  • 保護(hù)你的Sqlite數(shù)據(jù)庫(kù)(SQLite數(shù)據(jù)庫(kù)安全秘籍)

    保護(hù)你的Sqlite數(shù)據(jù)庫(kù)(SQLite數(shù)據(jù)庫(kù)安全秘籍)

    相信使用PHP開(kāi)發(fā)的人員一定不會(huì)對(duì)SQLite感到陌生了,PHP5已經(jīng)集成了這個(gè)輕量型的數(shù)據(jù)庫(kù)。并且很多虛擬主機(jī)無(wú)論是win還是*nux都支持它。
    2009-08-08
  • sqlite中文亂碼問(wèn)題原因分析及解決

    sqlite中文亂碼問(wèn)題原因分析及解決

    打開(kāi)數(shù)據(jù)庫(kù),插入,查詢數(shù)據(jù)庫(kù)等,如果操作接口輸入?yún)?shù)包含中文字符,會(huì)導(dǎo)致操作異常,這是由于sqlite數(shù)據(jù)庫(kù)使用的是UTF-8編碼方式
    2013-04-04
  • SQLite 性能優(yōu)化實(shí)例分享

    SQLite 性能優(yōu)化實(shí)例分享

    本文給大家分享的是個(gè)人在實(shí)際項(xiàng)目中對(duì)于sqlite的一次優(yōu)化的記錄,非常簡(jiǎn)單實(shí)用,希望對(duì)大家學(xué)習(xí)sqlite能夠有所幫助。
    2016-02-02
  • 一篇文章帶你掌握SQLite3基本用法

    一篇文章帶你掌握SQLite3基本用法

    SQLite是一款輕型的數(shù)據(jù)庫(kù),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,下面這篇文章主要給大家介紹了關(guān)于SQLite3基本用法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • SQLite速度評(píng)測(cè)代碼

    SQLite速度評(píng)測(cè)代碼

    SQLite 作為一個(gè)輕量級(jí)嵌入式數(shù)據(jù)庫(kù),還是非常好用的。雨痕極力推薦~~~~~~
    2008-09-09
  • Win11下基于VS2022編譯SQLite3源碼的實(shí)現(xiàn)步驟

    Win11下基于VS2022編譯SQLite3源碼的實(shí)現(xiàn)步驟

    本文主要介紹了Win11下基于VS2022編譯SQLite3源碼的實(shí)現(xiàn)步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • SQL中使用ESCAPE定義轉(zhuǎn)義符詳解

    SQL中使用ESCAPE定義轉(zhuǎn)義符詳解

    這篇文章主要介紹了SQL中使用ESCAPE定義轉(zhuǎn)義符的相關(guān)資料,需要的朋友可以參考下
    2016-09-09

最新評(píng)論

沾益县| 大关县| 墨竹工卡县| 清原| 南乐县| 建瓯市| 景泰县| 新营市| 清新县| 博客| 玉龙| 中阳县| 进贤县| 曲阳县| 卓尼县| 绥滨县| 郯城县| 开化县| 嘉禾县| 天门市| 乌拉特中旗| 商南县| 海盐县| 崇明县| 牟定县| 通海县| 莎车县| 六安市| 香格里拉县| 五峰| SHOW| 鄂托克旗| 阳朔县| 汉阴县| 乌什县| 安达市| 安庆市| 新丰县| 青河县| 体育| 葵青区|