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

首頁 > 編程 > C# > 正文

如何在C#中使用SQLite數據庫

2024-09-07 17:05:39
字體:
來源:轉載
供稿:網友

SQLite是遵守ACID的關系型數據庫管理系統,隨著移動互聯的發展,現在得到了更廣泛的使用。那么你知道如何在C#中使用SQLite數據庫嗎?下面就隨小編一起去看看吧。
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/>");
}

?

看完后你是不是學會了如何在C#中使用SQLite數據庫呢?當我們在C#中使用SQLite數據庫之后就可以看到代碼精簡了很多。

?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品一区理论片飘花| 午夜剧场成人观在线视频免费观看| 亚洲精品理论电影| 亚洲国产精品推荐| 992tv成人免费视频| 在线视频欧美日韩精品| 欧美性受xxxx白人性爽| 亚洲自拍偷拍福利| 日韩欧美aaa| 91精品在线一区| 欧美日韩亚洲视频| 国产精品自产拍在线观看| 成人免费在线视频网址| 欧美精品在线视频观看| 久久精品中文字幕电影| 国产成人精品999| 久久中文字幕在线| 日韩美女免费视频| 久久久国产影院| 国内揄拍国内精品| 色综合老司机第九色激情| 精品国产一区二区三区久久狼黑人| 欧美又大粗又爽又黄大片视频| 亚洲精品中文字幕女同| 欧美高清在线视频观看不卡| 亚洲影院污污.| 亚洲精品国产精品乱码不99按摩| 日韩福利伦理影院免费| 色偷偷亚洲男人天堂| 国模精品系列视频| 欧美性极品xxxx娇小| 欧美日韩免费网站| 精品成人国产在线观看男人呻吟| 国产精品福利小视频| 亚洲白虎美女被爆操| 少妇高潮久久久久久潘金莲| 日韩中文字幕网址| 久久精品国产99国产精品澳门| 欧美电影在线观看网站| 国产中文字幕日韩| 欧美一级片久久久久久久| 日韩在线观看av| 欧美大片欧美激情性色a∨久久| 亚洲欧洲xxxx| 久久久噜噜噜久噜久久| 日韩中文字幕精品| 色综合色综合久久综合频道88| 亚洲第一页中文字幕| 日韩精品中文字幕视频在线| 日韩av电影手机在线| 最新69国产成人精品视频免费| 日韩三级成人av网| 欧美做受高潮1| 5566成人精品视频免费| 黄色成人av网| 日韩高清av在线| 一区二区三区 在线观看视| 亚洲天堂色网站| 国产精品自产拍高潮在线观看| 国产主播欧美精品| 精品欧美一区二区三区| 久久久亚洲精选| 91在线免费看网站| 欧美亚洲另类激情另类| 国产亚洲视频在线观看| 亚洲最大av网站| 国产丝袜一区视频在线观看| 久久久人成影片一区二区三区| 日韩av快播网址| 久久成人亚洲精品| 精品免费在线观看| 亚洲成人在线视频播放| 亚洲欧美在线第一页| 国产日韩欧美一二三区| 色小说视频一区| 亚洲一区二区三区在线免费观看| 欧美xxxx18性欧美| 午夜欧美大片免费观看| 日韩有码视频在线| 亚洲自拍偷拍福利| 久久理论片午夜琪琪电影网| 亚洲欧美资源在线| 国产精品久久综合av爱欲tv| 久久亚洲欧美日韩精品专区| 亚洲区中文字幕| 国产精品极品美女在线观看免费| 黄色成人av网| 精品欧美国产一区二区三区| 久久久91精品国产一区不卡| 国产欧美一区二区三区视频| 97福利一区二区| 黑人巨大精品欧美一区二区一视频| 国产成人啪精品视频免费网| 伊人亚洲福利一区二区三区| 一区二区三区视频免费在线观看| 日韩视频在线一区| 成人黄色免费网站在线观看| 国产99久久精品一区二区永久免费| 91大神在线播放精品| 欧洲成人在线观看| 国产日本欧美一区二区三区在线| 国产精品黄色av| 亚洲欧美成人网| 日本一区二三区好的精华液| 国内精品一区二区三区| 78色国产精品| 91成人在线视频| 国产精品一区二区女厕厕| 97在线视频免费播放| 中文字幕日韩av电影| 日韩美女在线看| 国产精品一区二区女厕厕| 国产精品video| 久热精品视频在线观看| 国产精品v片在线观看不卡| 欧美亚州一区二区三区| 国产精品午夜国产小视频| 国产精品入口尤物| 欧美日本中文字幕| 国产精品永久免费视频| 欧美专区福利在线| 成人免费在线视频网址| 欧美激情精品久久久久久黑人| 91黄色8090| 日韩国产高清污视频在线观看| 国产精品精品久久久久久| 久久精视频免费在线久久完整在线看| 国产欧美一区二区| 中文字幕9999| 日韩高清中文字幕| 欧美一级高清免费| 欧美性xxxx极品hd欧美风情| 一道本无吗dⅴd在线播放一区| 欧美中文在线视频| 国产高清视频一区三区| 欧美日韩美女视频| 国产精品日韩在线观看| 欧美成人免费播放| 欧洲美女7788成人免费视频| 清纯唯美日韩制服另类| 亚洲黄色免费三级| 91在线视频精品| 欧美性猛交丰臀xxxxx网站| 亚洲国产成人精品久久久国产成人一区| 欧美在线激情视频| 5252色成人免费视频| 国产精品视频久久久| 亚洲网址你懂得| 亚洲欧美在线一区| 色av中文字幕一区| 欧美激情综合色综合啪啪五月| 欧美整片在线观看| 亚洲午夜女主播在线直播| 精品自在线视频| 成人国产在线视频| 国产亚洲福利一区| 97在线精品视频| 亚洲精品99久久久久| 亚洲精品v欧美精品v日韩精品| 2021国产精品视频| 久久精品亚洲热| 久久精品99无色码中文字幕| 91影院在线免费观看视频| 欧美日韩在线观看视频小说|