C#中使用SQLite

摘要:
试图加载格式不正确的程序。Source=UseSQLiteFileName=System.Data.SQLite,Version=1.0.83.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139FusionLog====预绑定状态信息===日志:用户=yonghang-PCyonghang日志:DisplayName=System.Data.SQLite,Version=1.0.83.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139日志:Appbase=file:///E:/Source/PC/UseSQLite/bin/Debug/日志:初始PrivatePath=NULL调用程序集:UseSQLite,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null。日志:使用主机配置文件:日志:使用C:WindowsMicrosoft.NETFrameworkv4.0.30319configmachine.config的计算机配置文件。日志:策略后引用:System.Data.SQLite,Version=1.0.83.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139日志:尝试下载新的URLfile:///E:/Source/PC/UseSQLite/bin/Debug/System.Data.SQLite.DLL。

(1) 从下面的网址下载了 SQLite 版本(sqlite-netFx40-setup-bundle-x64-2010-1.0.83.0):
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
安 .cs 文件中使用了 using:using System.Data.SQLite;
增加代码:SQLiteConnection.CreateFile(dataSource); 运行时报错如下(第一次使用C#,请各位帮忙分析一下出错的原因):
未处理 System.BadImageFormatException
Message=未能加载文件或程序集“System.Data.SQLite, Version=1.0.83.0, Culture=neutral,
PublicKeyToken=db937bc2d44ff139”或它的某一个依赖项。试图加载格式不正确的程序。
Source=UseSQLite
FileName=System.Data.SQLite, Version=1.0.83.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
FusionLog==== 预绑定状态信息 ===
日志: 用户 = yonghang-PCyonghang
日志: DisplayName = System.Data.SQLite, Version=1.0.83.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
(Fully-
specified)
日志: Appbase = file:///E:/Source/PC/UseSQLite/bin/Debug/
日志: 初始 PrivatePath = NULL
调用程序集: UseSQLite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null。
===
日志: 此绑定从 default 加载上下文开始。
日志: 未找到应用程序配置文件。
日志: 使用主机配置文件:
日志: 使用 C:WindowsMicrosoft.NETFrameworkv4.0.30319configmachine.config 的计算机配置文件。
日志: 策略后引用: System.Data.SQLite, Version=1.0.83.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
日志: 尝试下载新的 URL file:///E:/Source/PC/UseSQLite/bin/Debug/System.Data.SQLite.DLL。
错误: 未能完成程序集的安装(hr = 0x8007000b)。探测终止。
StackTrace:
在 UseSQLite.Form1.CreateSqliteDatabase()
在 UseSQLite.Form1..ctor() 位置 E:SourcePCUseSQLiteForm1.cs:行号 22
在 UseSQLite.Program.Main() 位置 E:SourcePCUseSQLiteProgram.cs:行号 18
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object
state, Boolean ignoreSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object
state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:

代码:

1 usingSystem;  
2 usingSystem.Collections.Generic;  
3 usingSystem.ComponentModel;  
4 usingSystem.Data;  
5 usingSystem.Drawing;  
6 usingSystem.Linq;  
7 usingSystem.Text;  
8 usingSystem.Windows.Forms;  
9    
10 usingSystem.Data.SQLite;  
11    
12 namespaceUseSQLite  
13 {  
14     public partial classForm1 : Form  
15 {  
16         private string dataSource = "UseSQLite.sqlite";  
17         //private string dataSource = "E:/Source/PC/SQliteDB.db";  
18    
19         publicForm1()  
20 {  
21 InitializeComponent();  
22    
23 CreateSqliteDatabase();  
24 }  
25    
26         voidCreateSqliteDatabase()  
27 {  
28             System.Diagnostics.Debug.WriteLine("Use SQLite: start create database...");  
29 SQLiteConnection.CreateFile(dataSource);  
30 //SQLiteConnection conn = new SQLiteConnection();  
31 //SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();  
32 //connstr.DataSource = dataSource;  
33 //connstr.Password = "admin"; //设置密码,SQLite ADO.NET实现了数据库密码保护  
34 //conn.ConnectionString = connstr.ToString();  
35 //conn.Open();  
36             System.Diagnostics.Debug.WriteLine("Use SQLite: create database end.");  
37 }  
38 }  
39 }  

CSDN友回复可能是因为以下原因:
有可能是框架配置不正确,SQLite是.NET 4.0,而你的控制台为.NET 4.0 Client Profile;
.NET 4.0 大于 .NET 4.0 Client Profile 查看项目属性,更改试试.
.NET 4.0 Client Profile比.NET 4.0占用的空间要小,但支持的类型也比.NET 4.0支持的类型小。
SQLITE的动态库是.NET 4.0 Client Profile不支持的。
未验证是否是这样。
(2) 下载了:SQLite-1.0.66.0-setup.exe,安装后在 VS2010 的菜单“增加新数据源”的“新建连接...”中终于找到了 SQLite 的选项。
然后需要将工程的目标框架由 4.0 修改为 3.5,否则编译报错。
最后,在工程中“增加引用”,选择 SQLite.NETin 目录的:System.Data.SQLite.dll和System.Data.SQLite.dll(可选)

(3) 创建数据库

......

------------------------------------------------------------------------------------------------

* 从 http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 下载了 sqlite-netFx35-setup-bundle-x86-2008-1.0.83.0.exe
* 为 VS2008 版本,安装。安装过程中,在 console 界面提示了一些错误,最后安装完成。
* 在 VS2008 中新建一个 C# 的工程,"Add References..." 浏览到 sqlite-netFx35-setup-bundle-x86-2008-1.0.83.0.exe 的安装目录
* 例如,我的安装目录:D:Program FilesSystem.Data.SQLite2008in
* 选择 System.Data.SQLite.dll,在工程的 References 中可以看到多了一个: System.Data.SQLite
* 在工程的 Form1.cs 中增加: using System.Data.SQLite;
* 增加代码如下:

* 编译调试通过,引起问题的原因如 CSDNer 所说的 .Net 版本选择不对,导致前天测试一直通不过。

1 usingSystem.Data.SQLite;  
2   
3 namespaceTestUseSqlite  
4 {  
5     public partial classForm1 : Form  
6 {  
7         private string dataSource = "ContactBookDB.sqlite";  
8   
9         publicForm1()  
10 {  
11 InitializeComponent();  
12   
13 SQLiteConnection.CreateFile(dataSource);  
14   
15             SQLiteConnection dbConn = new SQLiteConnection("Data Source=" +dataSource);  
16   
17 dbConn.Open();  
18   
19             SQLiteCommand dbCmd =dbConn.CreateCommand();  
20   
21             dbCmd.CommandText = "CREATE TABLE TelephoneBook(personID varchar(20),telephone varchar(30),type varchar(20))";  
22 dbCmd.ExecuteNonQuery();  
23   
24             dbCmd.CommandText = "INSERT INTO TelephoneBook VALUES('MTB','1234567890','not mobile')";  
25 dbCmd.ExecuteNonQuery();  
26   
27             dbCmd.CommandText = "SELECT * FROM TelephoneBook";  
28             SQLiteDataReader dataReader =dbCmd.ExecuteReader();  
29   
30             DataTable dataTable = newDataTable();  
31             if(dataReader.HasRows)  
32 {  
33 dataTable.Load(dataReader);  
34 }  
35   
36             dataGridView1.DataSource =dataTable;  
37   
38 dataReader.Close();  
39 dbConn.Close();  
40 }  
41 }  
42 }  

免责声明:文章转载自《C#中使用SQLite》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇设计一个文本搜索引擎vim编辑器-删除命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

审计基础-PHP命令执行

1. 命令执行 1.1 程序执行函数 程序执行函数 这些函数和 执行运算符 是紧密关联的。 因此,当运行在 安全模式 时,你必须考虑 safe_mode_exec_dir指示 exec PHP 457 exec — 执行一个外部程序 exec ( string $command ) : string 返回命令执行结果的最后一行内容,实际不echo出来的话回...

Java 简单的excel读写操作

描述:简单的对excel的第一个Sheet表的读写操作 依赖包:apache.poi/poi-3.14、apache.poi/poi-ooxml-3.14 package excel; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel....

webapi-1 给现有MVC 项目添加 WebAPI

1. 增加一个WebApi Controller, VS 会自动添加相关的引用,主要有System.Web.Http,System.Web.Http.WebHost,System.Net.Http 2. 在App_Start 下创建 WebApiConfig.cs 并注册路由 using System; using System.Collections...

Sqlite—触发器(Trigger)

一、简单介绍 SQLite 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于 SQLite 的触发器(Trigger)的要点: SQLite 触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。 SQLite...

Vue生态圈之----Axios学习笔记

API 首先,我们把axios所有的【API】和【配置】及【返回内容】列一下: //通过配置发送请求 axios(config) axios(url[,config]) //别名 axios.request(config); axios.get(url[,config]); axios.delete(url[,config]); axios.head(u...

解决ASP.NET MVC返回的JsonResult 中 日期类型数据格式问题,和返回的属性名称转为“驼峰命名法”和循环引用问题

DateTime类型数据格式问题 问题 在使用ASP.NET MVC 在写项目的时候发现,返回给前端的JSON数据,日期类型是 Date(121454578784541) 的格式,需要前端来转换一下才能用来使用。 C#对象属性名称转换成JSON自动转成“驼峰命名法” 问题 在C#中推荐的属性命名方式是“帕斯卡命名法”【首字母大写】但是在前端推荐命名方式为“...