zoukankan      html  css  js  c++  java
  • 使用C#书写SQLite数据库增删改查语句(以及插入byte[]时遇到的问题总结)

    在没有使用SQLite这种轻量级的数据库之前,只使用过Sqlserver2008进行数据的增删改查,公司使用的是大型的ORACLE数据库,还没有真正的会使用它。那时候觉得数据库很庞大,然而遇到SQLite以后,发现有这么个迷你的小数据库,就像女生的包包随身携带的小镜子一样,放在哪里都能使用。

    废话少说,SQLite提供了如何连接、关闭等数据库操作,但真正的增、删、改、查等语句同Sqlserver、ORACLE是一样的。

    首先,是创建SQLite数据库文件(写了一个方法):

    Public static void CreateDataBaseFile()

    {

    If(!File.Exists(dataBaseName))

    {

    SqliteConnection.CreateFile(dataBaseName);

    }

    }

    注意:默认SQLite数据库文件创建在当前应用程序根目录下,如果需要更改文件路径,记得把文件路径一块加上。

    比如:SQLiteConnection.CreateFile(sceneName + "\" + dataSource);

     

    打开某个数据库,也要把文件路径加上,如果不需要更改,就无所谓啦….

    DataSource=" + Environment.CurrentDirectory + "\" + pack.SceneName + "\" + pack.BattleID + ".db";

     

    然后,增删改查语句,以插入语句为例:

    1、查询语句

    SELECT *FROM TABLE_BATTLE;

     

    2、更新语句

    UPDATE TABLE_BATTLE SET 字段1='新值1';

     

    3、删除语句

    DELETE FROM

     

    4、插入语句

    //string connStr = @"datasource=DEPTDATABASE";

    //using (SQLiteConnection conn = new SQLiteConnection(connStr))

    //{

    // conn.Open();

    // using (var transaction = conn.BeginTransaction())

    // {

    // try

    // {

    // SQLiteCommand cmd = conn.CreateCommand();

    // cmd.Parameters.Add(cmd.CreateParameter());

    // cmd.CommandText = "INSERT INTO 表名(字段1, 字段2, 字段3) VALUES(@字段1,@字段2,@字段3)";

    // cmd.Parameters.AddWithValue("@字段1",值1);

    // cmd.Parameters.AddWithValue("@字段2",值2);

    // cmd.Parameters.AddWithValue("@字段3",值3);

    // cmd.ExecuteNonQuery();

    // transaction.Commit();

    // conn.Close();

    // }

    // catch (Exception e)

    // {

    // Console.WriteLine(e.Message);

    // transaction.Rollback();

    // }

    // }

    //}

     

    使用这种方法插入二进制字节数据是没有问题的。

    当我使用拼接字符串格式的Sql语句就有问题了,因为使用拼接字符串格式,编译器就会认为这句是字符串(string类型),所以即使里面的数据有二进制格式,也被当做字符串处理(数字格式除外),所以就会报错。

    下面这句是已经修改后的,所以正常运行。(用一个占位符表示,当使用时再赋值)

    var sql = "INSERT INTO TABLE_BATTLE_HISTORY(BATTLE_ID,TIME_STAMP,OBJECT_NAME,SYNC_TYPE,

    DETAIL_DATA) VALUES( '" + accData.battleId + "','" + accData.timeStamp + "','" + accData.objectName + "','" + accData.syncType + "',@DETAIL_DATA)";

     

    二进制数据可以正常存到数据库:

     

  • 相关阅读:
    阿里云-Redis-Help-最佳实战:将MySQL数据迁移到Redis
    阿里云-Redis-实战场景:互联网类应用
    阿里云-Redis-实战场景:电商行业类应用
    术语-计算机-性能:RT
    术语-计算机-性能:并发数
    术语-计算机-性能:TPS
    术语-计算机-性能:QPS
    阿里云-Redis-实战场景:游戏服务类应用
    阿里云-Redis-实战场景:视频直播类应用
    文章-依赖注入:《Inversion of Control Containers and the Dependency Injection pattern》
  • 原文地址:https://www.cnblogs.com/xiaoqingshe/p/5181957.html
Copyright © 2011-2022 走看看