开发软件
DB4S (DB Browser for SQLite.exe)
下载:Downloads - DB Browser for SQLite
- DB Browser for SQLite - Standard installer for 64-bit Windows
- DB Browser for SQLite - .zip (no installer) for 64-bit Windows
SQLite 语句
Insert 插入
方式1:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
方式2:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
(如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序)
Update 更新语句
public static void sqlUsedChange(int laneway,int rackColumn, int rackLayer, int rackRow, int used, bool cellValueAsBool)
{
// 构建更新命令
string updateCommand = "UPDATE rack SET used = @used WHERE rackColumn = @rackColumn AND rackLayer = @rackLayer AND rackRow = @rackRow AND laneway=@laneway";
// 执行更新命令
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
using (SQLiteCommand command = new SQLiteCommand(updateCommand, connection))
{
command.Parameters.AddWithValue("@used", used);
command.Parameters.AddWithValue("@rackColumn", rackColumn);
command.Parameters.AddWithValue("@rackLayer", rackLayer); // 注意:此处假设列头即为rackLayer的值
command.Parameters.AddWithValue("@rackRow", rackRow);
command.Parameters.AddWithValue("@laneway", laneway);
try
{
connection.Open();
int rowsAffected = command.ExecuteNonQuery();
if (rowsAffected > 0)
{
// 更新成功
Console.WriteLine("巷道"+laneway+",排" + rackRow + ",列" + rackColumn + ",层" + rackLayer + ",值:" + cellValueAsBool);
Console.WriteLine("数据已更新到数据库。" + DateTime.Now);
}
else
{
// 没有更新任何行
Console.WriteLine("没有更新数据库中的任何行。");
}
}
catch (Exception ex)
{
// 处理更新时发生的异常
Console.WriteLine("更新数据库时发生错误: " + ex.Message);
}
}
}
}
ALTER TABLE 修改表名称
ALTER TABLE old_table_name RENAME TO new_table_name;
C#代码
using System;
using System.Data.SQLite;
class Program
{
static void Main()
{
// 数据库文件路径
string dbPath = "your_database_file.db";
// 创建一个新的数据库连接
using (SQLiteConnection conn = new SQLiteConnection($"Data Source={dbPath};Version=3;"))
{
try
{
// 打开连接
conn.Open();
// 创建一个命令对象来执行SQL语句
using (SQLiteCommand cmd = new SQLiteCommand(conn))
{
// 设置要执行的SQL语句,这里是将表名从old_table_name更改为new_table_name
cmd.CommandText = "ALTER TABLE old_table_name RENAME TO new_table_name;";
// 执行SQL语句
cmd.ExecuteNonQuery();
Console.WriteLine("表名称已成功更改。");
}
}
catch (SQLiteException ex)
{
// 打印错误信息
Console.WriteLine($"发生错误: {ex.Message}");
}
finally
{
// 关闭连接
if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();
}
}
}
}
}
Delete 删除表所有行、并重置自增主键
//-----------------删除SQLite表中所有的行-------------------------------
public int deleteTable(string connectionString,string table )
{
// 创建一个SQLite连接
using (var connection = new SQLiteConnection(connectionString))
{
// 打开连接
connection.Open();
// 创建一个SQLite命令
using (var command = new SQLiteCommand(connection))
{
// 设置SQL命令来删除TbUSED表中的所有行
command.CommandText = $"DELETE FROM {table};";
// 执行命令
int rowsAffected = command.ExecuteNonQuery();
// 输出受影响的行数
Console.WriteLine($"{rowsAffected} rows were deleted from {table}.");
return rowsAffected;
}
}
}
//-----------------重置表的自增主键-------------------------------
public void resetSequence(string connectionString,string table)
{
// 创建一个SQLite连接
using (var connection = new SQLiteConnection(connectionString))
{
// 打开连接
connection.Open();
// 创建一个SQLite命令
using (var command = new SQLiteCommand(connection))
{
// 设置SQL命令来删除sqlite_sequence表中TbUSED的序列信息
command.CommandText = $"DELETE FROM sqlite_sequence WHERE name = '{table}';";
// 执行命令
int rowsAffected = command.ExecuteNonQuery();
// 输出受影响的行数
Console.WriteLine($"{rowsAffected} row(s) were deleted from sqlite_sequence for '{table}'.");
}
}
}
//-----------------删除SQLite中所有的行,并且重置表的自增主键-------------------------------
public int delTabandResSeq(string connectionString,string table)
{
// 创建一个SQLite连接
using (var connection = new SQLiteConnection(connectionString))
{
// 打开连接
connection.Open();
// 创建一个SQLite命令
using (var command = new SQLiteCommand(connection))
{
// 开始一个事务
using (var transaction = connection.BeginTransaction())
{
try
{
// 设置SQL命令来删除TbUSED表中的所有行
command.CommandText = $"DELETE FROM {table};";
// 执行命令
int rowsAffecteddel = command.ExecuteNonQuery();
// 输出受影响的行数
Console.WriteLine($"{rowsAffecteddel} row(s) were deleted from {table}.");
// 设置SQL命令来删除sqlite_sequence表中TbUSED的序列信息
command.CommandText = $"DELETE FROM sqlite_sequence WHERE name = '{table}';";
// 执行命令
int rowsAffectedres = command.ExecuteNonQuery();
// 输出受影响的行数
Console.WriteLine($"{rowsAffectedres} row(s) were deleted from sqlite_sequence for 'TbUSED'.");
// 提交事务
transaction.Commit();
MessageBox.Show("已删除 " + rowsAffecteddel + "行");
return rowsAffecteddel;
}
catch (Exception ex)
{
// 如果有错误发生,回滚事务
transaction.Rollback();
Console.WriteLine("An error occurred: " + ex.Message);
return -1;
}
}
}
}
}
CREATE TABLE 创建表
CREATE TABLE "rack" (
"rackID" INTEGER NOT NULL UNIQUE,
"TaskNo" INTEGER,
"rackRow" INTEGER NOT NULL,
"rackColumn" INTEGER NOT NULL,
"rackLayer" INTEGER NOT NULL,
"used" INTEGER NOT NULL,
"code" INTEGER,
PRIMARY KEY("rackID" AUTOINCREMENT)
)
复制表并重命名
CREATE TABLE TbST2Used AS SELECT * FROM TbST1Used;
//非空、主键、自增 等属性不会复制,得手动设置
包括表中每一条数据都复制了
//C#代码
using System;
using System.Data.SQLite;
class Program
{
static void Main()
{
// 数据库文件路径
string dbPath = "your_database_file.db";
// 旧表和新表名称
string oldTableName = "old_table_name";
string newTableName = "new_table_name";
// 创建一个新的数据库连接
using (SQLiteConnection conn = new SQLiteConnection($"Data Source={dbPath};Version=3;"))
{
try
{
// 打开连接
conn.Open();
// 使用事务来确保操作的原子性
using (SQLiteTransaction transaction = conn.BeginTransaction())
{
// 创建一个命令对象来执行SQL语句
using (SQLiteCommand cmd = new SQLiteCommand(conn))
{
// 创建一个新表,它包含旧表的所有数据
cmd.CommandText = $"CREATE TABLE {newTableName} AS SELECT * FROM {oldTableName};";
cmd.ExecuteNonQuery();
// 提交事务
transaction.Commit();
Console.WriteLine($"表 '{oldTableName}' 已成功复制为 '{newTableName}'。");
}
}
}
catch (SQLiteException ex)
{
// 打印错误信息
Console.WriteLine($"发生错误: {ex.Message}");
}
finally
{
// 关闭连接
if (conn.State == System.Data.ConnectionState.Open)
{
conn.Close();
}
}
}
}
}
与SQL对比
1. 查询语句对比
| sql | sqlite |
| SqlConnection | SQLiteConnection |
| SqlCommand | SQLiteCommand |
| SqlDataReader | SQLiteDataReader |
2.查询一行
| SQL | SQLITE |
| TOP 1 | LIMIT 1 |
| SELECT TOP 1 * FROM table_name ORDER BY rackRow ASC, rackLayer ASC, rackColumn ASC ; | SELECT * FROM table_name ORDER BY rackRow ASC, rackLayer ASC, rackColumn ASC LIMIT 1; |
| SELECT * FROM rack where rackRow>=1 and rackRow<=2 ORDER BY rackRow DESC, rackLayer ASC, rackColumn ASC LIMIT 2; |
2.1 模糊查询 包含某些字符
1 精确匹配查询(适用于字段值完全等于"13"的情况)
```
SELECT * FROM table_name
WHERE column_name = '13';
```
2 模糊匹配查询(适用于字段值包含"13"子串的情况)
```
SELECT * FROM table_name
WHERE column_name LIKE '%13%';
```
3 多字段联合查询(适用于多个字段可能包含目标值的情况)
```
SELECT * FROM table_name
WHERE column1 LIKE '%13%'
OR column2 LIKE '%13%'
OR column3 LIKE '%13%';
```
3. 查询记录是否存在
| SQL | SQLite |
| int count = (int)command.ExecuteScalar(); if (count > 0) |
if (count > 0) |
4.排序,相同:
DESC:倒序
ASC:正序
5.字段别名:相同
SELECT Task_No as 任务号 ,Job_Style as 任务类型 ,.....
6.数据类型对比
SQLite数据库中没有专门的bool类型
使用INTEGER类型:SQLite数据库中没有专门的布尔类型,但可以使用INTEGER类型来存储布尔值。可将0表为假(false),将
非零值(通常)表为真(true)。在创建表时,将字段的类型指定为INTEGER即可。
在winform项目中使用
1、nuget中引用,搜索System.Data.SQLite
2、app.config文件中添加connectionStrings
......
<connectionStrings>
<add name="constr" connectionString="Data Source=testdb.db;Version=3;"
providerName="System.Data.SQLite" />
</connectionStrings>
</configuration>
3、添加using引用using System.Configuration;using System.Data.SQLite; 并使用connectionString
using System.Configuration;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace sqlite
{
internal class Class1
{
public static string MyProperty;
public static byte byteSB;
public static int TaskNo;
public static string connectionString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
586

被折叠的 条评论
为什么被折叠?



