下面这两个是不同的:
1.System.Data.SQLite ( http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki)
2.SQLite(https://www.sqlite.org/download.html)
尽管是一个网站,但是,是两个产品。前者可用于C#,后者可以直接使用。前者的安装目录包含的文件很多,后者包含很少。详细差别可以自行查找。
在C#项目中使用的是System.Data.SQLite,所以,首先要下载并安装System.Data.SQLite 。
然后在项目中添加System.Data.SQLite.dll:项目右键——添加——引用——浏览——安装目录——System.Data.SQLite.dll——确定。如下图:
添加完成后,在项目的引用目录中会出现System.Data.SQLite,如下图:
这时候就可以新建项目使用SQLite了。需要using System.Data.SQLite;此时在项目的bin/Debug文件夹中会有System.Data.SQLite.dll和System.Data.SQLite.dll.config。
C#中数据库访问使用的是ADO.NET模型。使用SQLite也不例外。
(如果有问题,可以从System.Data.SQLite的安装目录中复制System.Data.SQLite.dll.config到项目的文件夹中,和上图中的AllForms、Properties等在相同文件夹中)
(上图中代码使用的并不是SQLite数据库,而是SQL Server数据库)
在C#项目中创建数据库:
var fileName = "D:/testDB.db";
SQLiteConnection.createFile(fileName);
相应位置就出现了数据库文件。
这时候可以用SQLite的图形界面管理工具验证该数据库。
成功建立数据库。接下来在VS中C#项目里连接该数据库并建立一个表。
连接数据库:
string databaseFileName = "D:/testDB.db";
string connectionString = "data source = " + databaseFileName;
SQLiteConnection dbConnection = new SQLiteConnection(connectionString);
dbConnection.Open();
此时出了些问题:
1.缺少SQLite.Interop.dll。
只要从SQLite的安装目录中的bin目录下找到该文件,并复制到项目目录bin的debug中即可。
2.试图加载格式不正确的程序。
原来这是64位应用32位产生的问题。就是平台和软件的版本不兼容。我的电脑是64位的,我装的System.Data.SQLite也是64位的,但是项目属性——生成——平台目标却是Any CPU(首选32位),将平台目标改为64位后,问题消失了。
创建一个表:
string[] colNames = new string[] { "ID", "Name", "Age", "Email" };
string[] colTypes = new string[] { "INTEGER", "TEXT", "INTEGER", "TEXT" };
string tableName = "table1";
string queryString = "CREATE TABLE IF NOT EXISTS " + tableName + "( " + colNames[0] + " " + colTypes[0];
for (int i = 1; i < colNames.Length; i++)
{
queryString += ", " + colNames[i] + " " + colTypes[i];
}
queryString += " ) ";
SQLiteCommand dbCommand = dbConnection.CreateCommand();
dbCommand.CommandText = queryString;
SQLiteDataReader dataReader = dbCommand.ExecuteReader();
成功连接数据库并建立了一个表,用图形界面管理工具,会看到:
可以在C#项目中建立数据库、连接数据库、建立表,其他操作还没有测试。
也可以通过VS菜单栏中的项目——管理NuGet程序包——浏览——System.Data.Sqlite——安装
使用此方法时要注意项目的.NET Framework框架的版本,因为可能会出现添加了System.Data.Sqlite后在项目中却不能使用Sqlite的问题,using找不到此类型。