问题标签 [microsoft.data.sqlite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
280 浏览

c# - SQLite 外键约束使用 EF Core 添加到子集合失败

已使用 EF Core 在 SQLite 数据库中插入订单。尝试向该订单添加订单详细信息,如下所示,SaveChanges引发异常

SQLite 错误 19:“外键约束失败”

代码:

在调用之前,SaveChanges我可以看到它order是从数据库中正确填充的,v11OrderDetail.Order是保存的订单,v11OrderDetail.OrderId也是正确的。

这个OrderDetail类看起来像这样

OrderDetail集合在类Order中声明

在里面DataContext

堆栈跟踪

在 .NET 5.0 类库中

我已经能够使用 SQLite 数据库编辑器输入相同的数据,因此它似乎是我的代码而不是数据。

编辑 1: 的CREATE TABLE声明OrderDetails

我已经实现了Simple Logging。EF 输出的失败语句为

我在 SQLIte 数据库编辑器中执行相同的命令(不带参数)

该行已成功输入。

如何使用 EF Core 将此订单详细信息添加到数据库中?

0 投票
0 回答
209 浏览

c# - 使用事务批量更新 SQLite

Microsoft.Data.Sqlite在循环中将产品添加到 SQLite 数据库时出现错误。错误:

在我的代码中,我尝试遵循Microsoft.Data.Sqlite中的批量插入和批量插入中的示例

第一次叫cmd.ExecuteNonQuery()火。为第二次迭代输入的异常foreach (Product newItem in newItems)抛出。相同的异常抛出有和没有cmd.Prepare()

没有产品被输入数据库。数据库连接配置是正确的,因为可以一次在数据库行中输入产品。

如何更新交易中的项目列表?

0 投票
1 回答
175 浏览

sqlite - 使用 System.Data.Sqlite 创建的 Microsoft.Data.Sqlite 打开加密的 Sqlite 数据库

我有一个使用 System.Data.Sqlite 包和 ChangePassword 方法使用密码创建的数据库。

是否可以使用 Microsoft.Data.Sqlite 包打开此数据库?我尝试使用此处描述的 sqlcipher 包: https ://docs.microsoft.com/en-us/dotnet/standard/data/sqlite/encryption?tabs=netcore-cli 但我收到错误:

我的连接字符串如下所示:

更多信息:Microsoft.Data.Sqlite.Core 包 5.0.2 SQLitePCLRaw.bundle_e_sqlcipher 包 2.0.4

我也尝试过不在连接字符串中指定密码,而是在打开连接字符串后的 pragma 语句中指定密码,如下所述: https ://www.bricelam.net/2016/06/13/sqlite-encryption.html

但我得到同样的错误。

0 投票
2 回答
65 浏览

sqlite - WITH RECURSIVE 循环遍历数据库中的每一天,每个日期的两个日期之间的 SUM 数

我在下面的最后一部分“递归”中挣扎。当然,我可以使用 C# 循环访问数据库中的每一天的 TimestampOrigin。这将意味着数百次相同的查询。但是使用“带递归”的一个查询可能是可能的。

测试数据:

按 T​​imestampOrigin 分组的查询:

我每天需要的是当前到时间戳的总和,即当天+17天。以 2021-02-08 天为例,时间戳来源为 2021-02-08 到 2021-02-08 +17 天的所有行的总和(时间戳列)。不知道是否真的需要 TimestampOrigin +17 天的中午时间的额外列 Timestamp。但是随着时间的推移查询是我在项目一开始就创建它的原因。

我没有每天执行数百次上述查询并求和,而是认为“使用递归”是正确的方法“。但到目前为止还不能让它工作。在哪里添加 17 天?

预期结果将是(就像我在测试数据中的 4 天中的每一天运行上述查询时一样):

在此处输入图像描述

0 投票
1 回答
125 浏览

sqlite - 如果我的 Winforms 应用程序的平台设置为 x86,SQLite 会无法运行吗?

在我准备将我的应用程序提交到 Microsoft Store(我的应用程序“通过警告”)时获得的 ValidationResult 中,我在报告的“包健全性测试”部分下得到了这个“失败”:

在此处输入图像描述

我觉得这很令人困惑,因为它说“e_sqlite3.dll 仅适用于 arm 处理器类型”和“e_sqlite3.dll 仅适用于 x64 处理器类型”

“仅”这个词不应该排除这种类型的多个陈述吗?我说“我唯一的狗叫 Fido”和“我唯一的狗叫 Spot”对我来说有意义吗?

此外,在抱怨“e_sqlite3.dll 仅适用于 x64 处理器类型”之后,该消息“承认”在这种情况下,ProcessorArchitecture 确实被声明为 x86。所以有什么问题?

我觉得奇怪的是这被归类为测试的失败部分,但总体结果是我的应用程序通过了(尽管有警告)。

以下是此解决方案的配置管理器设置:

在此处输入图像描述

如果按原样部署应用程序会导致 SQLite 无法在某些用户的计算机上运行,​​我需要做什么?

更新

为了回答 Peter Torr 的问题,这里是项目中的 SQLite 参考:

在此处输入图像描述

我所有与 SQLite 相关的用法是:

...关于项目架构,这是配置管理器所说的,将解决方案显示为 x86,将主项目显示为 AnyCPU,将包项目显示为 x86:

在此处输入图像描述

这是我尝试在“MyMaps”项目中将“AnyCPU”更改为“x86”的地方,以便它全面采用 x86(屏幕截图显示选择了 x64,但我在捕获屏幕截图后选择了 x86):

在此处输入图像描述

然后当我选择 x86 和“确定”按钮时,它会告诉我:

在此处输入图像描述

所以它不会让我将“AnyCPU”更改为“x86”......?!?

0 投票
3 回答
178 浏览

c# - 移动 StorageFile 后立即在 UWP 中打开 SQLite 连接

序幕:

我正在为 UWP 编写 SQLite GUI 客户端。我使用Microsoft.Data.SqliteC# 的 SQLite API 库。我还使用重定向表来打开我在 Microsoft Store 中发布的沙盒应用程序中的数据库。重定向表替换CreateFileWCreateFileFromAppW调用和类似的。

问题:

用户具有File->Save as功能。当用户创建一个新的数据库文件时,会在应用程序本地目录中创建一个。接下来当用户保存他/她的数据库时我需要移动这个文件。我使用StorageFileAPI 因为我不能在沙盒应用程序中使用任何其他文件 API。所以我打电话:

我还尝试跳过关闭并重新打开连接->然后移动文件失败。如果我FileOpenPicker在两者之间调用await currentStorageFile.MoveAndReplaceAsync(file);sqliteConnection = new SqliteConnection("Data Source=" + file.Path);那么一切都会正常工作,但是在文件保存选择器之后立即显示文件打开选择器是非常糟糕的用户体验。我知道沙盒应用程序仅在用户手动选择文件后才授予文件访问权限。但看起来这FileSavePicker并没有像我一样给我许可FileOpenPicker。我找不到任何有关它的信息。

结语:

这是应用程序https://sqliteman.dev。请随时批评,因为它使我的应用程序变得更好。

0 投票
1 回答
252 浏览

sqlite - Microsoft.EntityFrameWork 中的 SQLite 加密

我目前正在尝试在使用 Microsoft 实体框架时使用官方SEE扩展来加密 SQLite 数据库。

使用 ADO.NET 时,我能够加密数据库。但是在使用实体框架时出现错误“您在连接字符串中指定了密码,但本机 SQLite 库 'e_sqlite3' 不支持加密”。

使用的 Nuget 包:

[Microsoft.EntityFrameWork.Core Microsoft.EntityFrameWork.Core.SQLite SQLite.Encryption.Extension System.Data.SQLite.Core]

请您建议如何使用官方 SEE 扩展来修复此错误?

CustomDBContext.cs:

程序.cs:

0 投票
1 回答
49 浏览

asp.net-core - 如何在异步项目中处理 SQLite

SQLite 不是异步的,公开的 Microsoft.Data.Sqlite ADO.net*Async方法在后台同步实现。

我的问题:您将如何在 asp.net core 5 API 项目中使用 SQLite,该项目可以受益于异步代码,以及 async/await 关键字来协调它?

我看到两个选项

  • 使用“假”*Async方法,并失去了接触数据库的代码部分的异步代码的好处。如果我理解正确,在 .net 核心中阻塞线程不会导致死锁(https://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.html)。如果我理解正确,这就像在线程池线程上执行的同步代码一样,会增加 async/await 机器的开销。
  • 只写同步代码,失去部分代码的好处

你认为哪一个会更好?

谢谢!

0 投票
0 回答
34 浏览

sqlite - SqliteConnection 的生命周期

使用SqliteConnection对象的推荐方式是什么?
我们在控制台应用程序中使用 sqlite,我想知道我们是否应该在整个应用程序生命周期中使用单个连接,或者每次需要查询数据时创建一个新连接。

这里的最佳做法是什么?

0 投票
1 回答
210 浏览

vb.net - 如何将 e_sqlcipher 与 microsoft.data.sqlite 一起使用?

我正在尝试将我的应用程序从访问 SQLite 切换,并且我喜欢加密。我正在尝试将“Microsoft.data.sqlite”与“SQLitePCLRaw.bundle_e_sqlcipher”一起使用,但设置密码似乎无济于事。遵循官方指南:从这里

它像这样设置它:Public DBConnection As String = "Data Source=" & Environment.CurrentDirectory & "\test.db;Mode=ReadWriteCreate;Password=testtest123" 并打开连接,我也尝试这样做:

我在使用连接之前尝试了这些设置方法SQLitePCL.raw.SetProvider(New SQLitePCL.SQLite3Provider_e_sqlcipher()),它们都没有对其进行加密,也没有给出异常。我也尝试使用“SQLitePCLRaw.bundle_sqlcipher”,但它给出了这个例外:找不到方法“Int32 SQLitePCL.ISQLite3Provider.sqlite3_win32_set_directory(Int32,System.String)”。

我还尝试使用 SQLCipher 3 和 4 使用 SQLite 的 DB Browser 加密外部数据库,但这些方法都不能从我的应用程序连接到数据库...谢谢!

编辑。:我以为我会重新启动,所以我删除了每个包并重新下载了我最初提到的两个(+提供程序包),现在当我SQLitePCL.raw.SetProvider(New SQLitePCL.SQLite3Provider_e_sqlcipher())每次设置时都会出现异常:无法加载“e_sqlcipher”DLL。找不到指定的模块。如果有人对另一个解决方案有很好的经验,我也愿意使用另一种解决方案。