SQLite

开发软件

DB4S (DB Browser for SQLite.exe)

下载:Downloads - DB Browser for SQLite

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. 查询语句对比

sqlsqlite
SqlConnectionSQLiteConnection
SqlCommandSQLiteCommand
SqlDataReaderSQLiteDataReader

 2.查询一行

                

SQLSQLITE
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. 查询记录是否存在

SQLSQLite

 int count = (int)command.ExecuteScalar();

   if (count > 0)
        {
        }

 
 object result = command.ExecuteScalar();


 int count = (result != DBNull.Value && result != null) ? Convert.ToInt32(result) : 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;


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值