翼度科技»论坛 编程开发 mysql 查看内容

MySQL 迁移至 SQLite 问题记录

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
最近接手了一个WPF项目,数据库使用的MySQL,为了简化生产环境部署流程,果断选择迁移到SQLite,由于原项目未使用ORM框架,导致很多SQL语法也得改。
SQLite基础语法请参考该页面 
  1.依赖包的更改
    有两个Nuget包可选: Microsoft.Data.Sqlite.Core / System.Data.SQLite,我都安装试了下,除了类型大小写不一致之外,功能几乎一样,由于老项目是.Net Framework 4.x,稳妥起见还是使用了后者,至于各种引用类型的更改,几乎只需要将MySql开头的类型名全局替换成SQLite的则可(记得删掉MySQL的引用,确保只调用了SQLite相关类库)  
    

  
  2.数据库连接
    SQLite本身是一个基于文件的数据库系统,每个数据库就是一个文件,若文件不存在它会自动创建,下面的示例代码就是建立与运行目录下test.sqlite文件的连接     
  1.   private const string connStr = "Data Source = {0}";<br>  ...<br>  string dbName = "test.sqlite";
  2.   SQLiteConnection Connection = new SQLiteConnection(string.Format(connStr, dbName));<br>  Connection.Open();
复制代码
  
  3.数据库切换
    虽然SQLiteConnection也提供了ChangeDatabase方法,但是不管用 o(╥﹏╥)o   得先手动释放原来的连接资源,再建立新的连接
  1.     Connection?.Dispose();
  2.     Connection = new SQLiteConnection(string.Format(connStr, dbName));
  3.     Connection.Open();
复制代码
  
  4.建表差异
    编码集和数据引擎的部分肯定是不能要了,主键要将关键字放到对应字段后面,自增则是去掉下划线(大小写依然不敏感),但是有一个需要注意的地方是:自增字段得用integer,用int也行,但它不会自增
  1.   private const string SQL_CreateTable = @"
  2.                 create table if not exists `TestTable` (
  3.                     id int not null auto_increment,                    
  4.                     name varchar(64) not null,
  5.                     primary key(id),<br>            unique key(name)
  6.                 ) collate='utf8_general_ci' engine=InnoDB;";<br>
  7.   //上面是MySQL建表语句<br>  //下面是SQLite建表语句<br>
  8.   private const string SQL_CreateTable = @"
  9.                 create table if not exists `TestTable` (
  10.                     id integer PRIMARY KEY AUTOINCREMENT NOT NULL,                    
  11.                     name varchar(64) not null
  12.                 );";
复制代码
 
 
  5.删表差异 - truncate 语句
    SQLite不支持 truncate ,清空一张表需要先delete,然后再去sqlite_sequence表里删除对应表名的自增键
  1.   new SQLiteCommand(@"delete from tablename;", Connection).ExecuteNonQuery();<br>  new SQLiteCommand(@"DELETE FROM sqlite_sequence WHERE name = 'tablename';", Connection).ExecuteNonQuery();
复制代码
 
  6.数据类型差异
    MySqlDbType要更改为DbType,后者位于System.Data命名空间下,具体对照关系参考这个链接,图中的Key值为MySqlDbType类型,Value为对应的DbType类型
  
    

 
  7.逻辑操作符差异 -- &&符号
    若不是接手这个项目,我都不知道MySQL居然能用 && 操作符,SQLite当然是不支持的,得改成 and 关键字
 
  8.待补充,以后遇到其他问题再补充
翻译
搜索
复制

来源:https://www.cnblogs.com/CodingInRain/p/MysqlToSqlite.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具