Tag: system.data.sqlite

当我从’int’类型的sqlite列中选择时,我可以转换为.net int但是当我从’integer’列中选择时我不能

我正在使用System.Data.SQLite,从一个sqlite数据库表中选择一个列的类型为’integer’,当我做这样的事情时: int x = (int)reader[“myColumn”]; 它失败。 问题不在于该值为空; 该列不可为空。 如果我将列的数据类型更改为“int”,那么它可以正常工作。 列中的值为“2”,“3”,“4”等; 没什么大不了的。 任何人都知道这是否是预期的行为?

使用System.Data.Linq.Mapping并在sqlite数据库中自动递增主键时出错

我正在使用SQLite和System.Data.Linq.Mapping 。 当使用linq映射属性IsDbGenerated = true时,我遇到了id AUTOINCREMENT字段的问题。 创建表的语法。 我用/不用AUTOINCREMENT试过这个 CREATE TABLE [TestTable] ([id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,[title] TEXT NULL) 我的TABLE类: [Table(Name = “TestTable”)] public class TestTable { [Column(IsPrimaryKey = true, IsDbGenerated =true)] public int id { get; set; } [Column] public string title { get; set; } } 这是我如何称呼它。 提交时我收到错误,我会在此示例下面粘贴错误。 有一点需要注意的是,如果我取出上面的IsDbGenerated =true并手动输入id ,它确实插入正常,但是我想将它转换为AUTOINCREMENT并且出于某种原因IsDbGenerated=true正在杀死插入。 寻找一些指导。 […]

什么“数据源不能为空。 使用:内存:打开内存数据库“是什么意思?

我最近将我的SQL Server数据库转换为SQLite DB。 但是当我尝试使用.Open()打开我的SQLite时,它会抛出这个错误: Data Source cannot be empty. Use :memory: to open an in-memory database 编辑:添加连接字符串: ConnectionString = @”Data Source=D:\XXX.db;Version=3″; connection = new SQLiteConnection(connectionString); connection.Open(); 为什么我会这样? 我将相同的SQL Server数据库转换为SQL CE和mySQL,但我没有得到这些错误。

Unicode字符串到SQLite数据库中

我想在Visual Studio C#代码中提供一些帮助,将unicode字符串插入到SQLite数据库中。 下面是我将测试字符串写入数据库的测试代码: string testStr = “á Á ñ ç é á”; SQLiteConnection mydataConnection = new SQLiteConnection(); // setup new sql connection obj try { //// SQLite DB mydataConnection.ConnectionString = “Data Source=C:\\Users\\John\\Desktop\\location.db; Version=3; UseUTF16Encoding=True;Synchronous=Normal;New=False”; // set up the connection string mydataConnection.Open(); // open the connection to the db SQLiteCommand myCmd = new SQLiteCommand(); // […]

如何在不锁定数据库的情况下使用数据读取器执行SQLite查询

我使用System.Data.Sqlite来访问C#中的SQLite数据库。 我有一个查询必须读取表中的行。 在遍历行并且在阅读器打开时,必须执行某些SQL更新。 我遇到了“数据库被锁定”的exception。 SQLite文档说明: 当进程想要从数据库文件中读取时,它遵循以下步骤: 打开数据库文件并获取SHARED锁。 该文档进一步说明了“共享”锁定: 可以读取数据库但不写入。 任意数量的进程可以同时保存SHARED锁,因此可以有许多同时读取器。 但是,当一个或多个SHARED锁处于活动状态时,不允许其他线程或进程写入数据库文件。 FAQ说明: 多个进程可以同时打开同一个数据库。 多个进程可以同时执行SELECT。 但是,只有一个进程可以随时对数据库进行更改。 SQLite权威指南一书指出: …通过使用read_uncommited编译指示,连接可以选择具有读取未提交的隔离级别。 如果将其设置为true ,则连接将不会在其读取的表上放置读锁定。 因此,另一个writer实际上可以更改表,因为read-uncommitted模式下的连接既不会阻塞也不会被任何其他连接阻塞。 我尝试将pragma设置为在SQL查询命令语句中读取未提交,如下所示: PRAGMA read_uncommitted = 1; SELECT Column1, Column2 FROM MyTable 使用不同连接的同一线程上的SQL更新仍然失败,并出现“数据库已锁定”exception。 然后,我尝试将隔离级别设置为在连接实例上读取未提交。 同样的例外仍然没有变化。 如何在不锁定数据库的情况下使用开放数据读取器来遍历数据库中的行,以便我可以执行更新? 更新: 以下两个答案都有效。 然而,我已经从使用默认回滚日志转移到现在使用预写日志,这提供了改进的数据库读写并发性。

我应该如何禁用每个对象的Entity Framework表引用(外部)列表?

我正在使用Sqlite数据库和System.Data.SQLite 1.0.92这里有2个表: 表人 : PERSONID PERSONNAME 表学生 : 学生卡 PersonId(参考表人FK) StudentNo 现在每次我在EF5中获得Persons Collection: using (var ctx = new myEntities) { AllPersons = ctx.Persons.ToList(); } 还有AllPersons.student集合将包含在结果中; 但我不需要它。 当然这只是一个例子,有很多大表有这么多的引用,因此它总是存在性能问题。 所以我试图不让它出现在我的结果中。 所以我改变它: using (var ctx = new myEntities) { ctx.Configuration.ProxyCreationEnabled = false; ctx.Configuration.LazyLoadingEnabled = false; AllPersons= ctx.Persons.ToList(); } 现在很好,因为AllPersons.student集合将始终为null 但现在我发现:如果我把人和学生放在一起 : using (var ctx = new myEntities) { […]

SQLite.net SQLiteFunction在Linq to SQL中不起作用

我使用System.Data.SQLite.SQLiteFunction在C#中创建了一些自定义SQLite函数。 它在使用SQLiteDataAdapter执行查询时效果很好, 但它不起作用,但是,当使用Linq to SQL时,我收到错误,指出该函数不存在 。 我想底线是, 我怎样才能让Custom SQLiteFunctions在Linq to SQL中运行? 要么让它们加载它们应该的方式,要么通过修改SQLite.Net的源代码使它们成为dll的一部分? 注意:我理解entity framework是首选,这是遗留应用程序,我没有选项来更改它。 我尝试手动将函数绑定到DataContext.Connection,没有骰子。 有关尝试修改System.Data.SQLite的背景:我尝试下载源代码,我可以从源代码成功构建,但源代码对我来说有点令人费解。 在System.Data.SQLite.2012项目中,项目中不包含任何文件,但所有源文件都存在于实际文件夹中。 它们似乎包含在名为System.Data.SQLite.Files.targets的文件的解决方案中。 这对我来说是一个奇怪的设置。 我将自定义函数添加到项目文件夹中,但没有将它们包含在项目中,就像所有其他文件一样。 然后我将它们添加到System.Data.SQLite.Files.targets中。 我构建了解决方案,它们确实出现在程序集中。 虽然我似乎可以将文件添加到程序集和构建中,但修改现有代码似乎没有任何影响。 我进入了SQLiteConnection类并在Open方法中添加了一个新的Exception,我在关键位置添加了Console.Writeline,我在现有代码中修改的任何内容似乎都没有进入已编译的程序集。 这样做的目的是尝试将我的自定义函数构建到System.Data.SQLite.dll中,而不是依赖于通过reflection自动加载。

C#无法找到或加载已注册的.Net Data Provider错误

我正在使用SQLite和来自http://sqlite.phxsoftware.com/的包装器,当我向项目添加数据源时,我收到错误: “无法自动生成某些更新命令,数据库返回到以下错误:无法找到或加载已注册的.Net Framework数据提供程序” 我有最新的.Net服务包,我已经卸载并重新安装了SQLite软件。 我还查看了其他地方,建议此条目不在machine.config文件中: 当我看到我甚至没有在C:\ WINDOWS \ Microsoft.NET \ Framework \ v3.5文件夹中找到machine.config文件,但我确实在C:\ WINDOWS \ Microsoft.NET \ Framework \ v2中找到了一个.0.50727 有谁知道发生了什么事? 我是否需要卸载整个.Net Framework,然后只是安装3.5版本才能让这个错误消失? 任何帮助,将不胜感激。 谢谢。

‘System.Data.SQLite’锁定了数据库文件’

添加新事务后,我突然从SQLite收到以下错误: 数据库文件被锁定数据库被锁定 有没有人见过这个? 我添加了一个更新事务(在一些成功的选择/插入之后)。 我找不到关于这个的任何不同……

connection.Close()和connection.Dispose()有什么区别?

我注意到System.Data.SQLite中的SQLiteConnection对象拥有两个类似的方法: Close() Dispose() 对于SQLiteDataReader对象也是如此。 有什么不同 ?