WPF操作SQLite
发布时间:2020-12-12 19:22:08 所属栏目:百科 来源:网络整理
导读:IDE:VS2017 community 通过NuGet获取SQLite SQLite增、删、改、查: using System;using System.Collections.Generic;using System.Data.SQLite;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windo
|
IDE:VS2017 community 通过NuGet获取SQLite
SQLite增、删、改、查: using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace HelloSQLite
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
string DBPath = "Data Source=" + AppDomain.CurrentDomain.BaseDirectory + @"HelloSQLite.db";
private SQLiteConnection DBConnection = null;
public MainWindow()
{
InitializeComponent();
}
private void tbSQLiteOpen_Click(object sender,RoutedEventArgs e)
{
DBConnection = new SQLiteConnection(DBPath);
DBConnection?.Open();
}
private void tbSQLiteCreateTable_Click(object sender,RoutedEventArgs e)
{
int ret = -1;
string sql;
bool tableExists = false;
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = DBConnection;
/* 表是否存在 */
sql = "SELECT * FROM sqlite_master WHERE type='table' and name='persons'";
cmd.CommandText = sql;
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
tableExists = true;
}
}
/* 表不存在,则创建表 */
if (!tableExists)
{
sql = "CREATE TABLE IF NOT EXISTS persons(id INTEGER PRIMARY KEY,name VARCHAR(20),age INTEGER,address VARCHAR(100),data BLOB);";
cmd.CommandText = sql;
ret = cmd.ExecuteNonQuery();
Console.WriteLine($"创建表返回: {ret}");
}
}
private void tbSQLiteInsert_Click(object sender,RoutedEventArgs e)
{
int ret = -1;
string sql;
byte[] datas = new byte[] { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = DBConnection;
/* 插入一条数据 */
#if DEBUG // 方式一
sql = $"INSERT INTO persons(id,name,age,address,data) VALUES (@id,@name,@age,@address,@data)";
cmd.CommandText = sql;
cmd.Parameters.Add(new SQLiteParameter("@id",2));
cmd.Parameters.Add(new SQLiteParameter("@name","王五"));
cmd.Parameters.Add(new SQLiteParameter("@age",12));
cmd.Parameters.Add(new SQLiteParameter("@address","中国北京"));
cmd.Parameters.Add(new SQLiteParameter("@data",datas));
#else // 方式二
sql = string.Format($"INSERT INTO persons(id,address) VALUES ('{1000}','{"张三"}','{20}','{"中国-广东深圳坂田"}')");
cmd.CommandText = sql;
#endif
ret = cmd.ExecuteNonQuery();
Console.WriteLine($"{ret}行被插入!");
}
private void tbSQLiteDelete_Click(object sender,RoutedEventArgs e)
{
int ret = -1;
string sql;
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = DBConnection;
/* 删除数据 */
sql = "DELETE FROM persons";
cmd.CommandText = sql;
ret = cmd.ExecuteNonQuery();
Console.WriteLine($"{ret}行被删除!");
}
private void tbSQLiteUpdate_Click(object sender,RoutedEventArgs e)
{
int ret = -1;
string sql;
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = DBConnection;
/* 更新数据 */
sql = "UPDATE persons SET age=21 WHERE id=2";
cmd.CommandText = sql;
ret = cmd.ExecuteNonQuery();
Console.WriteLine($"{ret}行被修改!");
}
private void tbSQLiteQuery_Click(object sender,RoutedEventArgs e)
{
string sql;
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = DBConnection;
/* 查询数据库 */
sql = "select * from persons";
cmd.CommandText = sql;
using (SQLiteDataReader reader = cmd.ExecuteReader())
{
Console.WriteLine($"Depth: {reader.Depth}");
Console.WriteLine($"HasRows: {reader.HasRows}");
Console.WriteLine($"Column count: {reader.FieldCount}");
Console.WriteLine($"RecordsAffected: {reader.RecordsAffected}");
Console.WriteLine($"StepCount: {reader.StepCount}");
Console.WriteLine($"VisibleFieldCount: {reader.VisibleFieldCount}");
Console.WriteLine($"*************************************************");
while (reader.Read())
{
Console.WriteLine($"ID: {reader.GetInt32(0)} {Environment.NewLine}" +
$"Name: {reader.GetString(1)} {Environment.NewLine}" +
$"Age: {reader.GetInt32(2)} {Environment.NewLine}" +
$"Address: {reader.GetString(3)} {Environment.NewLine}");
long size = reader.GetStream(4).Length;// 获取第4列长度
byte[] d = new byte[size];
long len = reader.GetBytes(4,d,(int)size);
Console.WriteLine(StringHelper.Bytes2HexString(d));
Console.WriteLine($"=======================================================================");
}
}
}
private void tbSQLiteClose_Click(object sender,RoutedEventArgs e)
{
DBConnection?.Close();
}
}
}
byte数组转十六进制字符串 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloSQLite
{
public class StringHelper
{
public static string Bytes2HexString(byte[] bytes)
{
string hexString = string.Empty;
if (null != bytes)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
sb.Append(bytes[i].ToString("X2") + " ");
}
hexString = sb.ToString();
}
return hexString;
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
