`
darkbaby123
  • 浏览: 104240 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

.NET Framework 4.0 安装SQLite Provider碰到的一些问题

阅读更多

怎么在.NET中安装SQLite provider就不说了。网上一搜一大把。

这里是一篇InfoQ上的文章:SQLite——只要3分钟,你就可以在.NET上创建和运行它

 

这里只说碰到的两个问题。

 

1. 连接数据库时出现错误 -- 混合模式程序集是针对“v2.0.50727”版的运行时生成的……

建立 SQLiteConnection 时抛出异常 FileLoadException 。具体错误信息为:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

 

这是因为.NET Framework 4.0中把版本号全部统一成4.0了,而这个SQLite provider是.NET 2.0的。解决方法也很简单。在app.config的configuration节点下加入以下节点:

 

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

 

想了解原理的可以去看 这篇文章

 

 

2. 使用DataContext对象(Linq的用法)连接数据库,长时间程序无响应

 

如果你为了图省事不想建立SQLiteConnection,直接建立DataContext,像这样:

 

var dc = new DataContext(@"data source=your_sqlite_db_path");

 

那么稍后执行查询的时候,就会出现程序长时间无响应的情况。我想这是因为程序会默认创建 SQLServer 的 connection 而不是 SQLite 的 connection 的缘故。解决方法也很简单。手动建立一个 SQLiteConnection 然后传给 DataContext 就行。像这样:

 

var conn = new SQLiteConnection(@"data source=your_sqlite_db_path");
var dc = new DataContext(conn);

 

 

顺便附上一小段Linq代码,算是备忘:

 

string dbPath = @"your_sqlite_db_path";
var dc = new DataContext(new SQLiteConnection(dbPath));

Table<User> user = dc.GetTable<User>();

// Linq form
// var query = from u in user
//                    where u.Name = "David"
//                    select u;

// lambda expression form
var query = user.AsQueryable().Where(u => u.Name == "David").Select(u => u);

foreach (User u in query)
    Console.WriteLine("id: {0}, Name: {1}", u.Id, u.Name);

 

其中User是数据表的实体类。定义如下:

 

// // table definition
// CREATE TABLE users (
//   id INTEGER PRIMARY KEY AUTOINCREMENT,
//   name VARCHAR(30)
// )

[Table(Name="users")]
class User
{
    [Column(Name="id")]
    public int Id { get; set; }

    [Column(Name="name")]
    public string Name { get; set; }
}

 

搞Rails习惯了,表没有按照SQLServer的那一套命名规则来,所以还需要手动指定表名和字段名。如果表名和字段名都和实体类一样的话,就没必要手动指定映射了。不过Attribute还是要写的。

分享到:
评论

相关推荐

    System.Data.SQLite.dll .net4.0版 64位 支持EntityFramework

    invariant="System.Data.SQLite"description=".NET Framework Data Provider for SQLite"type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite,Version=1.0.118.0, Culture=neutral,PublicKeyToken=db937bc...

    sqlite3_SharpPlus.Sqlite.Developer_sqlitejdbc合集

    3. **SharpPlus.Sqlite.Developer.v4.0**:这看起来是一个针对.NET Framework 4.0的SQLite数据库开发工具包。SharpPlus可能是对SQLite .NET Provider的一个增强版本,提供了更丰富的功能和更方便的API,使得.NET...

    sqlite for C# 控件包

    1. SQLite .NET Provider:这是C#与SQLite交互的核心,它提供了ADO.NET接口,使得开发人员可以使用.NET Framework的数据访问技术(如SqlCommand、SqlConnection等)来操作SQLite数据库。在这个控件包中,可能包含...

    sqlite-netFx46-binary-x64-2015-1.0.109.0

    描述中提到的".net4.0以上"意味着这个SQLite版本兼容.NET Framework 4.0及更高版本。这很重要,因为不同的.NET版本可能不兼容某些库,所以确保库与项目使用的框架版本匹配至关重要。 标签"sqlite x64 VS2015"进一步...

    代码生成器(CodeBuilder) 2.5

    CodeBuilder 基于.NET Framework 4.0 开发,它使用了动态编译技术,你可以嵌入 C#或 VB.NET 代码对对象属性进行个性化的扩展,结合灵活的模板生成你所想要的任何代码。 数据源(ISourceProvider)。提供数据结构的来源...

    dotNET(.net)中各种数据库连接源代码大全,非常实用,希望对大家用。

    string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\myDatabase.mdb;Jet OLEDB:Database Password=myPassword;"; OleDbConnection conn = new OleDbConnection(connStr); conn.Open(); ...

    sqlserver,sqlite,access数据库链接字符串整理

    在使用SQLite时,还需要确保项目引用了System.Data.SQLite库,并且可能需要解决.NET Framework版本兼容问题。如果遇到“混合模式程序集是针对‘v2.0.50727’版的运行时生成的,在没有配置其他信息的情况下,无法在...

    C#winform读取Excel文档实例

    - 构建连接字符串,例如:`string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=YES\"";` - 创建OleDbConnection对象并打开连接:`...

    winC#连接DBF

    要连接到DBF文件,C#可以借助ADO.NET(Microsoft .NET Framework的一部分)来实现。ADO.NET提供了一套全面的数据访问接口,允许开发者与各种数据库系统交互,包括非关系型数据库如DBF。 首先,我们需要引用必要的...

    NET中各种数据库连接大全

    string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\myDatabase.mdb;Jet OLEDB:Database Password=myPassword;"; // 创建连接对象 using (OleDbConnection connection = new ...

Global site tag (gtag.js) - Google Analytics