SQLite 是一個軟體庫,實現了自給自足的、無伺服器的、零配置的、事務性的 SQL 資料庫引擎。SQLite 是在世界上最廣泛部署的 SQL 資料庫引擎。SQLite 源代碼不受版許可權制。 ...
SQLite官網:https://www.sqlite.org/index.html
源視頻教程:https://www.bilibili.com/video/BV1Zz411i78o
菜鳥教程文檔:https://www.runoob.com/sqlite/sqlite-tutorial.html
一、資料庫簡介與基本語法
1.1-資料庫的作用
- txt去保存1萬行的數據.(數據量超過一定量級[ 大於1w ])
- 數據格式的管理,以及數據內容的分片
1.2-資料庫的選擇
- 目前所說:都是SQL(結構化查詢語言)語句
- 單機版本:
- ACCESS(微軟)
- 最大缺點:必須要安裝Office、數據量、查詢速度、寫法有少許不同
- SQLite
- 唯一攜帶一個DLL驅動文件(幾百K)
- 缺點:超過10w的,不建議使用。
- ACCESS(微軟)
- 企業級資料庫:
- MsSQLServer
- 數據量:5000w沒什麼問題
- 最適合C#
- My SQL:
- 要一份非.net官方的驅動
- 開源
- 相對於MSSQL Server,優勢是體積小,跨平臺
- Oracle:
- 需要非官方驅動
- 適合JAVA
- MongDB:
- 後期支秀
- 非關係型資料庫
- MsSQLServer
二、資料庫增刪改查語法與實例
2.1-創建表
(1)下載並打開這個工具
(2)創建一個資料庫,然後創建一個表如下:
(3)添加列明、數據類型、約束
2.2-增刪改查
--插入
--註意:Integer允許自動增長(不要被Identity 忽悠)
insert into UserInfo(UserId,UserNames,UserPasss,RegDate) values(1001,'admin','admin','2021-01-21')
insert into UserInfo(UserId,UserNames,UserPasss,RegDate) values(1002,'sanha','sanha', datetime('now','localtime'))
--查詢
select * from UserInfo
--Limit 跳過幾個,取幾個
--Limit 2,2 跳過2個,取2個
--刪除
delete from UserInfo where UserId=1002
--修改
update UserInfo set UserNames='sanha_update' where UserId=1002
2.3-使用WinForm和SQLite做登錄註冊
(1)管理Nuget程式包,下載這個類庫:
1.1-將資料庫文件拷貝在Bin路徑下。
(2)寫一個SQLite幫助類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SQLite;
using System.Threading.Tasks;
using System.Configuration;
namespace SQLite
{
public class SQLiteHelper
{
private readonly string _str;
public SQLiteHelper(string str) {
_str = str;
}
//獲取連接字元串
//private static readonly string str = ConfigurationManager.ConnectionStrings["DBFilerURL"].ConnectionString;
/// <summary>
/// 做增刪改的功能
/// </summary>
/// <param name="sql">SQL語句</param>
/// <param name="ps">SQL語句中的參數</param>
/// <returns>受影響的行數</returns>
public int ExecuteNonQuery(string sql, params SQLiteParameter[] ps)
{
//連接資料庫
using (SQLiteConnection con = new SQLiteConnection(_str))
{
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
con.Open();//打開資料庫
if (ps != null)
{
cmd.Parameters.AddRange(ps);//參數,加集合(ps)
}
return cmd.ExecuteNonQuery();
}
}
}
/// <summary>
/// 查詢首行首列
/// </summary>
/// <param name="sql">SQL語句</param>
/// <param name="ps">SQL語句的參數</param>
/// <returns>返迴首行首列object</returns>
public object ExecuteScalar(string sql, params SQLiteParameter[] ps)
{
using (SQLiteConnection con = new SQLiteConnection(_str))
{
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
con.Open();
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
return cmd.ExecuteScalar();
}
}
}
/// <summary>
/// 查詢多行
/// </summary>
/// <param name="sql">SQL語句</param>
/// <param name="ps">SQL語句的參數</param>
/// <returns>返回多行SQLiteDataReader</returns>
public SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] ps)
{
SQLiteConnection con = new SQLiteConnection(_str);
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
try
{
con.Open();
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
con.Close();
con.Dispose();
throw ex;
}
}
}
/// <summary>
/// 查詢數據表
/// </summary>
/// <param name="sql">SQL語句</param>
/// <param name="ps">SQL語句中的參數</param>
/// <returns>返回表DataTable</returns>
public DataTable ExecuteTable(string sql, params SQLiteParameter[] ps)
{
DataTable dt = new DataTable();
using (SQLiteDataAdapter sda = new SQLiteDataAdapter(sql, _str))
{
if (ps != null)
{
sda.SelectCommand.Parameters.AddRange(ps);
}
sda.Fill(dt);
return dt;
}
}
}
}
(3)寫一個簡單的界面
(4)在後端代碼中先寫上這些代碼
//獲取資料庫路徑
public static string SQLitePath = AppDomain.CurrentDomain.BaseDirectory + "db/SQLiteDemo1.db";
//資料庫連接字元串
public static string str = string.Format("Data Source={0};Pooling=true;FailIfMissing=false;", SQLitePath);
//實例化對象
SQLiteHelper SQLite = new SQLiteHelper(str);
(5)【登錄】的邏輯
private void button2_Click(object sender, EventArgs e)
{
string name = this.textBox1.Text.ToString();
string password = this.textBox2.Text.ToString();
//參數化查詢
string sql = string.Format("select UserId from UserInfo where UserNames=@name and UserPasss=@password;");
SQLiteParameter[] parameters =new SQLiteParameter[]
{
new SQLiteParameter("@name",name),
new SQLiteParameter("@password",password)
};
object obj=SQLite.ExecuteScalar(sql, parameters);
int i =Convert.ToInt32(obj);
if (i > 0)
{
this.label4.Text = "登錄成功!";
this.label4.Show();
}
else {
this.label4.Text = "登錄失敗!";
this.label4.Show();
}
}
(6)【註冊】的邏輯
private void button1_Click(object sender, EventArgs e)
{;
string name = this.textBox1.Text.ToString();
string password = this.textBox2.Text.ToString();
//參數化查詢
string sql = string.Format("insert into UserInfo(UserId,UserNames,UserPasss,RegDate) values(@userid,@username,@passwod,datetime('now','localtime'))");
SQLiteParameter[] parameters = new SQLiteParameter[]
{
new SQLiteParameter("@userid",new Random().Next(10)),
new SQLiteParameter("@username",name),
new SQLiteParameter("@passwod",password)
};
object obj = SQLite.ExecuteNonQuery(sql, parameters);
int i = Convert.ToInt32(obj);
if (i > 0)
{
this.label4.Text = "註冊成功!";
this.label4.Show();
}
else
{
this.label4.Text = "註冊失敗!";
this.label4.Show();
}
}