Tag: sqlite

唯一索引约束上的EF Core / Sqlite一对多关系失败

上下文是每个Car都有一个相应的CarBrand 。 现在我的课程如下所示: public class Car { public int CarId { get; set; } public int CarBrandId { get; set; } public CarBrand CarBrand { get; set; } } public class CarBrand { public int CarBrandId { get; set; } public string Name { get; set; } } public class MyContext : DbContext { public […]

应用程序中的SQLite文件版本兼容性

我有一个C#.NET应用程序(一种复杂的计算应用程序),其中用户输入数据,处理后的信息使用JSON序列化和EF保存到SQLite文件中。 必要时可以将相同内容加载到我们的应用程序中。 应用程序在开发过程中经历了很多变化,并且类也被修改。 因此,以前在SQLite文件中保存的序列化对象与较新的序列化对象不同。 我想为旧文件提供兼容性,以便可以在新应用程序中打开它。 简单来说,使用JOL将带有bool作为成员的.NET类“类XYZ”序列化,并在SQLite文件中保存为BLOB。 稍后在较新版本的app中,“类XYZ”的bool成员被修改为int。 如何使用bool类型将以前保存的文件反序列化到新的应用程序中? 在整个版本中,SQLite表结构也有变化。 如何在.NET中实现这一目标?

使用LINQ访问表中的第一个元素时出现SQLite错误

使用LINQ访问SQLite数据库时遇到以下问题。 Abreviated代码如下所示: … using System.Linq using System.Data.Linq using System.Data.Linq.Mapping using System.Data.SQLite … DataContext sqltContext= new DataContext(sqltConnection); featureTable = sqltContext.GetTable(); count= featureTable.Count(); // count == 1 以下行失败并显示错误:“SQL逻辑错误或缺少数据库\ r \ nnunknown错误” //currentFeature = featureTable.First(); 但迭代器工作正常: foreach (var feature in featureTable) { currentFeature = feature; break; } 在这两种情况下,我在调试输出中收到以下错误: SQLite error (1): near “.”: syntax error 什么会导致这个错误? 我希望有人之前已经看过这个问题,并且可以指出我正确的方向。 但我可能最终会在调试器中逐步调试System.Data.SQLite代码。 […]

将配置添加到App.config文件时出错

相关问题: 在另一台机器上运行我的应用程序会给我一个错误 这就是我的App.config文件的样子: 在我的开发机器上运行它可以工作,但是当部署到另一台计算机时,我收到了数据提供程序错误。 (见上面的相关问题)。 建议的解决方案是将其添加到App.config文件中: 当我将其添加到App.config文件时,我在Visual Studio 2010中启动应用程序时出现此错误: 为system.data创建配置节处理程序时发生错误:列’InvariantName’被限制为唯一。 值’System.Data.SQLite’已存在。 (C:\ Users \ Sergio.Tapia \ Desktop \ DocumentScannerDanyly \ DocumentScannerDanyly \ bin \ Debug \ DocumentScannerDanyly.vshost.exe.Config line 13) 关于这个错误是什么的任何建议? 此外,由于.sqlite文件的位置与安装位置有关,我是否必须将AppConfig文件中的connectionString更改为更动态的文件? 谢谢您的帮助。 编辑: 当我按照这里的人的建议将其添加到配置中时,我收到一个错误: 无法找到或加载已注册的.Net Framework数据提供程序。

许多行的SQLite更新非常慢

我相信我已经用很多方法来加速许多行的更新,但到目前为止没有任何帮助。 我们正在打开一个交易,如下所示: private SQLiteTransaction BeginTransaction(SQLiteConnection connection) { return connection.BeginTransaction(); } 并在课程结束时关闭它。 我们打开一个连接,一个事务,然后我们更新数据库上的许多行。 这意味着我们在很多表中累积了许多不同的SQL语句。 一个重要的部分是在一个表中更新12000条记录 protected override void UpdateRows(SQLiteConnection connection, IEnumerable rowsToUpdate) { var command = new SQLiteCommand(Queries.SQLUpdateDocument, connection); foreach (DataRow documentRow in rowsToUpdate) { command.Parameters.AddWithValue(“@Filename”, documentRow[Constants.Col_Document_Filename]); command.Parameters.AddWithValue(“@ClassID”, documentRow[Constants.Col_Document_ClassID]); command.Parameters.AddWithValue(“@PageCount”, documentRow[Constants.Col_Document_PageCount]); command.Parameters.AddWithValue(“@DocID”, documentRow[Constants.Col_Document_GlobalDocID]); command.Parameters.AddWithValue(“@ReadOnly”, documentRow[Constants.Col_Document_ReadOnly]); command.Parameters.AddWithValue(“@Confirmed”, documentRow[Constants.Col_Document_Confirmed]); command.Parameters.AddWithValue(“@ParentFolderID”, documentRow[Constants.Col_Document_ParentFolderID]); command.Parameters.AddWithValue(“@SequenceNumber”, documentRow[Constants.Col_Document_SequenceNumber]); command.Parameters.AddWithValue(“@XmlRepr”, documentRow[Constants.Col_Document_XmlRepr]); command.ExecuteNonQuery(); documentRow.AcceptChanges(); } […]

C#WPF DataGrid不显示SQLite 3数据库中的小数

我遇到了C#WPF的问题,我想在WPF DataGrid控件中显示一些SQLite数据表。 我们将产品的价格存储为NUMERIC(但也尝试为REAL,但它完全相同),但在datagrid控件中它显示为整数,尽管在SQLite数据库浏览器中它显示正确的十进制值。 以下是我们将数据填入DataGrid的代码: ProductsDataGrid.ItemsSource = db.GetDataSet(“*”, “products”).Tables[0].AsDataView(); 并且GetDataSet方法如下所示: public DataSet GetDataSet(string columns, string table, string trailingCommands = “”) { var sqlcmd = string.Format(“select {0} from {1} {2}”, columns, table, trailingCommands); Utility.Log.Info(sqlcmd); DataSet dataSet = new DataSet(); SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(sqlcmd, this.dbconn); dataAdapter.Fill(dataSet); return dataSet; } 简短版本:程序在SQLite DB的数据网格中将十进制数显示为int

使用数据库作为存储介质在.NET中实现日志记录库

我刚刚开始研究一个日志库,每个人都可以使用它来跟踪用户运行我们的应用程序时的任何类型的系统信息。 到目前为止,最简单的示例是跟踪信息,警告和错误。 我希望所有插件都能够使用此function,但由于每个开发人员可能对报告的重要性有不同的想法,因此我希望尽可能保持通用。 在C ++世界中,我通常会使用像stl::pair这样的东西作为键值对结构,并且在这些日志中有一个stl::list作为“行”。 然后,日志缓存将是一个list<list<pair>> (唉!)。 这样,开发人员可以使用像INFO,WARNING,ERROR这样的const字符串键来为数据库中的列提供一致的命名(用于选择特定类型的信息)。 我希望数据库能够处理任意数量的不同列名。 例如,John可能有一个INFO行,其中一列名为USER,而Bill可能有一个INFO行,其中一列名为FILENAME。 我希望日志查看器能够显示所有信息,如果一个报告没有INFO / FILENAME的值,那些字段应该只显示为空白。 因此,一种选择是使用List<List<KeyValuePair> ,另一种选择是让日志库使用者以某种方式“注册”其模式,然后让数据库执行ALTER TABLE来处理这种情况。 另一个想法是拥有一个仅用于键值对的表,其中一个外键将键值对映射回原始日志条目。 我显然不希望日志记录陷入困境,因此我只锁定日志缓存以复制数据(并删除已经复制的数据),然后后台线程将信息转储到数据库。 我对此的具体问题是: 你看到任何性能问题吗? 换句话说,你有没有试过这样的事情,发现某些事情在实践中效果不好? 除了List<List<KeyValuePair>>之外,还有更多的.NETish方法来实现键值对吗? 即使有办法更好地做#2,我上面提出的ALTER TABLE的想法是不是很糟糕? 你会推荐一个多个数据库吗? 我还不知道日志写入的频率,但理想情况下我们希望有大量的低级信息。 也许应该有一个只有低级别东西的固定模式的数据库,然后是另一个更灵活的数据库,用于向用户报告信息。

正确包含x32或x64 System.Data.SQLite.dll文件

我在互联网上搜索它,但我不确定该怎么做。 我发现我需要在Program.csproj文件中包含一些代码。 当我打开Program.csproj时,它说 ShowAllFiles 这是我需要包含的代码: False library\sqlite\x32\System.Data.SQLite.dll False False library\sqlite\x64\System.Data.SQLite.DLL 但是我不太确定这是否正确,因为我的程序从它的根目录而不是“library \ sqlite \”中获取所有dll。有人可以帮我正确地执行吗? 我无法做对

使用SQLite的System.AccessViolationException

现在,我正在处理这个错误: An unhandled exception of type ‘System.AccessViolationException’ occurred in Unknown Module. Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 没有调用堆栈,因为没有为抛出它的DLL加载模块。 我有一个应用程序枚举整个注册表,并尝试将所有键/值保存到SQLite数据库文件,作为注册表快照。 它不是贪婪的,如果它无法访问某些键,那些键被丢弃等等: using Microsoft.Win32; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; […]

从MMF访问SQLite数据库

我正在使用System.Data.SQLite lib来访问我的SQLite数据库。 我想将db文件加载到内存并使用MMF(内存映射文件)来访问数据库。 这是否可以使用默认的SQLite库? 编辑: 我喜欢有关如何拥有内存数据库的替代方案。