亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

C#中使用SQLite數據庫的方法介紹

2024-07-10 13:24:22
字體:
來源:轉載
供稿:網友
【SQLite管理工具簡介】
推薦以下2款:
Navicat for SQLite:功能非常強大,幾乎包含了數據庫管理工具的所有必需功能,操作簡單,容易上手。唯一的缺點是不能打開由System.Data.SQLite.dll加密過的數據庫。
Database.Net:臺灣人用.net開發的全能數據庫管理工具,可以管理多種數據庫,包括MSSQL、MYSQL、IBM DB2、Oracle、Access、Excel、OleDb、Odbc等十多種數據庫(或數據接口),功能沒有Navicat那么多,只包含最基本功能。對SQLite而言,Database.Net最大的優點是支持打開由System.Data.SQLite.dll加密過的數據庫,且可以隨時對數據庫設置密碼,是.net下開發SQLite必備的小工具。下載地址: 腳本之家下載地址
建議以Navicat for SQLite為主,Database.Net為輔,只要涉及到數據庫加密時才用后者。
【操作SQLite實例】
操作SQlite的方法基本同其他數據庫相同,但有一些區別:
『例1』整數似乎都是Int64的。
查詢出網站App_Data目錄下“省市.db”數據庫中city表的總記錄數

復制代碼 代碼如下:


SQLiteConnection cn = new SQLiteConnection("Data Source=|DataDirectory|省市.db;Version=3");
SQLiteCommand cmd = new SQLiteCommand("select count(*) from city", cn);
cn.Open();
int recordCount = (int)(Int64)cmd.ExecuteScalar();
cn.Close();
Response.Write(recordCount);


SQLite中count函數返回的是一個Int64的整數,這一點同MSSQL、Access等不同。實際上,經過有限的使用發現,似乎所有INTEGER字段的返回值都是Int64,這一點未經過有效證實。ExecuteScalar方法返回一個object實例,按照C#規定,拆箱時進行標準轉換,必須轉換成該object實例實際存儲的格式,因此分兩步,先轉換成Int64,再轉換成int。當然用.net中某些高級轉換器如Convert.ToInt32方法只要一步就可以了。
『例2』批量增刪改時需要用事務,否則效率很低。
批量插入1000條記錄,每條記錄只有簡單的id、name、password三個字段:

復制代碼 代碼如下:


SQLiteConnection cn = new SQLiteConnection("Data Source=c://測試.db3;Version=3;password=12345");
SQLiteCommand cmd = new SQLiteCommand("select count(*) from test", cn);
cn.Open();
int recordCount = (int)(Int64)cmd.ExecuteScalar();
Response.Write("當前的總記錄數:" + recordCount + "<br/>");
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into test values(@id,@name,@password)";
cmd.Parameters.AddWithValue("@id", i);
cmd.Parameters.AddWithValue("@name", "姓名" + i);
cmd.Parameters.AddWithValue("@password", (i * 2).ToString());
cmd.ExecuteNonQuery();
}
cmd.CommandText = "select count(*) from test";
recordCount = (int)(Int64)cmd.ExecuteScalar();
cn.Close();
Response.Write("當前的總記錄數:" + recordCount + "<br/>");


經過測試,這段代碼中的for循環花費了70000~90000毫秒,一分鐘多!
改用事務執行:

復制代碼 代碼如下:


SQLiteConnection cn = new SQLiteConnection("Data Source=c://測試.db3;Version=3;password=12345");
SQLiteCommand cmd = new SQLiteCommand("select count(*) from test", cn);
cn.Open();
int recordCount = (int)(Int64)cmd.ExecuteScalar();
Response.Write("當前的總記錄數:" + recordCount + "<br/>");
SQLiteTransaction tran = cn.BeginTransaction();
cmd.Transaction = tran;
try
{
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into test values(@id,@name,@password)";
cmd.Parameters.AddWithValue("@id", i);
cmd.Parameters.AddWithValue("@name", "姓名" + i);
cmd.Parameters.AddWithValue("@password", (i * 2).ToString());
cmd.ExecuteNonQuery();
}
tran.Commit();
}
catch
{
tran.Rollback();
Response.Write("執行出錯!");
}
finally
{
cmd.CommandText = "select count(*) from test";
recordCount = (int)(Int64)cmd.ExecuteScalar();
cn.Close();
Response.Write("當前的總記錄數:" + recordCount + "<br/>");
}


經過測試,這段代碼中的try部分只用了100~150毫秒!開啟事務后,效率非常高!
『例3』一般開發中可以編寫自己的數據庫通用操作類,進一步封裝ADO.NET。
如上面用事務操作的代碼,改用數據庫通用操作類后:

復制代碼 代碼如下:


SQLiteData md = new SQLiteData("Data Source=c://測試.db3;Version=3;password=12345");
int recordCount = (int)(Int64)md.ExecuteScalar("select count(*) from test");
Response.Write("當前的總記錄數:" + recordCount + "<br/>");
md.CreateTransaction();
try
{
for (int i = 0; i < 1000; i++)
md.ExecuteNonQuery("insert into test values(@id,@name,@password)", "@id", i, "@name", "姓名" + i, "@password", (i * 2).ToString());
md.CommitTransaction();
}
catch
{
md.RollBack();
Response.Write("執行出錯!");
}
finally
{
recordCount = (int)(Int64)md.ExecuteScalar("select count(*) from test");
md.Close();
Response.Write("當前的總記錄數:" + recordCount + "<br/>");
}


可以看到代碼精簡了很多。

【SQLite相關有用的鏈接地址】

SQLite官方網站:

SQLite內置核心函數參考文檔:

SQLite日期時間函數參考文檔:

SQLite數學函數參考文檔:

SQLite相關SQL語法參考文檔:

System.Data.SQLite.dll數據訪問驅動下載地址:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久亚洲国产300| 97在线观看免费| 亚洲一区二区久久久| 亚洲欧美日韩一区二区在线| 欧美成人免费一级人片100| 激情av一区二区| 久久久99久久精品女同性| 中文字幕综合一区| 午夜欧美不卡精品aaaaa| 欧美午夜女人视频在线| 久久久www成人免费精品张筱雨| 日韩视频一区在线| 成人一区二区电影| 日韩欧美在线国产| 精品视频在线观看日韩| 久久久精品一区二区三区| 久久琪琪电影院| 日韩激情视频在线| 亚洲国产高清福利视频| 亚洲成人精品视频在线观看| 一区二区三区日韩在线| 国产一级揄自揄精品视频| 日韩在线免费视频观看| 91精品久久久久久| 九九九热精品免费视频观看网站| 国内精品中文字幕| 国产专区精品视频| 久久伊人91精品综合网站| 欧美黑人又粗大| 成人免费看片视频| 日韩精品高清在线| 日韩中文视频免费在线观看| 久久99视频精品| 日韩高清电影好看的电视剧电影| 国产一区二区动漫| 精品女厕一区二区三区| 国产日韩欧美视频在线| 精品国产31久久久久久| 欧美韩日一区二区| 91九色精品视频| 97久久精品国产| 色婷婷成人综合| 国产91成人video| 欧美在线中文字幕| 永久免费精品影视网站| 热门国产精品亚洲第一区在线| 98午夜经典影视| 久久久久久久一区二区| 中文字幕亚洲一区| 亚洲精品电影在线观看| 在线电影av不卡网址| 亚洲性69xxxbbb| 日韩精品电影网| 久久精品国产亚洲一区二区| 亚洲国产小视频在线观看| 精品国产一区二区三区四区在线观看| 欧美在线激情网| 欧美大片第1页| 国产国产精品人在线视| 中日韩午夜理伦电影免费| 国产精品久久久久久久9999| 日本成人精品在线| 国产成人精品免费久久久久| 亚洲91精品在线| 日韩av影片在线观看| 国产精品老女人视频| 国产亚洲欧美日韩美女| 亚洲精品日韩丝袜精品| 欧美成人四级hd版| 欧美日韩激情小视频| 国产精品国产亚洲伊人久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲欧美在线第一页| 亚洲图片欧美午夜| 国产97在线视频| 国产精品网红福利| 欧美日韩精品在线视频| 欧日韩在线观看| 一区二区三区精品99久久| 日韩成人黄色av| 国产精品中文字幕在线| 亚洲影院高清在线| 亚洲精品国产品国语在线| 久久精品中文字幕一区| 欧美在线一级va免费观看| 一本色道久久综合狠狠躁篇怎么玩| 91精品免费久久久久久久久| 亚洲综合中文字幕在线观看| 亚洲福利视频免费观看| 成人免费网视频| 久久中文字幕在线视频| 久久躁狠狠躁夜夜爽| 亚洲毛片在线免费观看| 日韩黄在线观看| 中文字幕亚洲综合久久筱田步美| 欧美亚洲成人网| 国产精品久久激情| 91系列在线观看| 欧美午夜www高清视频| 欧美一区二区三区艳史| 精品久久久久久久久中文字幕| 日韩黄色av网站| 欧美日韩国产第一页| 国产亚洲福利一区| 欧美成人在线影院| 91欧美精品午夜性色福利在线| 97久久精品在线| 日韩精品视频免费| 国产精品十八以下禁看| 欧美中文在线视频| 欧美高清理论片| 亚洲欧洲xxxx| 亚洲最大福利视频| 亚洲国产中文字幕久久网| 日韩在线一区二区三区免费视频| 亚洲午夜精品久久久久久久久久久久| 国产精品日日摸夜夜添夜夜av| 亚洲美女av在线播放| 久久久精品久久久| 欧美日韩国产一区二区三区| 68精品久久久久久欧美| 国产精品免费一区| 日韩专区在线播放| 色综合天天综合网国产成人网| xxxx欧美18另类的高清| 欧美韩国理论所午夜片917电影| 自拍偷拍亚洲一区| 美女精品视频一区| 97精品一区二区视频在线观看| 亚洲风情亚aⅴ在线发布| 久久视频免费在线播放| 国模gogo一区二区大胆私拍| 欧美成人手机在线| 亚洲免费伊人电影在线观看av| 日本精品免费观看| 日本一本a高清免费不卡| 色与欲影视天天看综合网| 亚洲精品一区二区网址| 欧美在线观看网站| 日韩有码在线电影| 中文字幕视频在线免费欧美日韩综合在线看| 中文字幕亚洲无线码在线一区| 伊人成人开心激情综合网| 国产精品爱啪在线线免费观看| 欧美理论片在线观看| 国产精品日韩一区| 国产精品久久在线观看| 91精品视频在线| 日韩最新在线视频| 亚洲一区二区三区视频播放| 2019亚洲日韩新视频| 欧美电影《睫毛膏》| 精品福利在线视频| 中文字幕精品久久| 日韩av三级在线观看| 搡老女人一区二区三区视频tv| 成人国产精品色哟哟| 成人在线观看视频网站| 欧美日韩国产精品| 亚洲一区二区三区久久| 中文字幕欧美在线| 亚洲电影免费观看高清完整版在线| 成人妇女淫片aaaa视频| 中文字幕亚洲在线|