我有一个 .Net Core 应用程序,并使用 System.Data.SQLite.dll 包连接到 SQLite DB。
我正在尝试使用密码加密数据库。
在System.Data.SQLite.dll库的1.0.93.0版本中,我可以设置或更改数据库的密码加密:
SQLiteConnection con = new SQLiteConnection($"Data Source=DBName;Version=3;");
conn.SetPassword($"{password}");
conn.ChangePassword($"{password}");
conn.Open();
Run Code Online (Sandbox Code Playgroud)
在最新版本1.0.113.7中,该 api 似乎不再受支持。Visual Studio 在 SetPassword() 和 ChangePassword() 调用上引发编译器错误。
如何使用密码加密我的数据库?是否有另一种方法可以使用此库(或类似的库)来实现此目的?
我正在使用SQLite和http://sqlite.phxsoftware.com/的包装器,当我向项目添加数据源时,我收到错误:
"无法自动生成某些更新命令,数据库返回到以下错误:无法找到或加载已注册的.Net Framework数据提供程序"
我有最新的.Net服务包,我已经卸载并重新安装了SQLite软件.我还查看了其他地方,建议此条目不在machine.config文件中:
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.27.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
Run Code Online (Sandbox Code Playgroud)
当我看到我甚至没有在C:\ WINDOWS\Microsoft.NET\Framework\v3.5文件夹中找到machine.config文件,但我确实在C:\ WINDOWS\Microsoft.NET\Framework\v2中找到了一个.0.50727
有谁知道发生了什么事?我是否需要卸载整个.Net Framework,然后只是安装3.5版本才能让这个错误消失?
任何帮助,将不胜感激.
谢谢.
我开发了一个方法,允许我通过参数传入表(字符串),列数组(字符串)和值数组(对象),然后我使用这些参数创建参数化查询.虽然它工作得很好,代码的长度以及多个for循环都会产生代码气味,特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的更好的方式完成.
public static int Insert(string source, string[] column, object[] values)
{
int rowsAffected = 0;
try
{
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
StringBuilder query = new StringBuilder();
query.Append(" INSERT INTO ");
query.Append(source);
query.Append("(");
for (int i = 0; i < column.Length; i++)
{
query.Append(column[i]);
if (i < values.Length - 1)
{
query.Append(",");
}
}
query.Append(")");
query.Append(" VALUES ");
query.Append("(");
for (int i = 0; i < values.Length; i++)
{
query.Append("@" + values[i].ToString());
if (i < values.Length - 1) …Run Code Online (Sandbox Code Playgroud) 根据2010年的这个帖子,"EnforceFKConstraints"连接字符串属性应该在未来的SQLite版本中实现.有谁知道开发商是否已经开始这样做了?
如果没有,是否有另一种方法可以启用外键支持而不在每个连接上执行"PRAGMA foreign_keys = ON"?我需要这个以确保删除总是级联.
我正在使用x64 windows编写Windows应用程序.在开发机器上我可以导出安装程序,安装应用程序并且它工作得很好,无论我是否为任何CPU,x86或x64编译,看起来无论我使用的是什么版本的System.Data.SQLite.dll - 混合模式,x64,x86,非混合模式......
将安装程序转移到另一台机器时,也是x64 Win7,无论应用程序是如何编译的,无论我使用什么System.Data.SQLite.dll.
我得到的错误范围从BadImageFormatException到UnsafeNativeMethods,具体取决于我正在使用的组合.
我应该使用System.Data.SQLite.dll和CPU编译的哪种组合?x64/x64似乎是合乎逻辑的选择,但肯定强制x86编译和使用x86 dll也应该工作?
还是我完全吠叫错了树?
谢谢
编辑:至少现在,应用程序在x64 w7上编译才真正重要.
在SQL Server中,我可以在Cursor的帮助下完成此操作(循环遍历结果集中的每一行并构建我的字符串).但我不知道如何在SQLite中做同样的事情,这个任务不像所谓的Pivoting,据我所知,我们必须知道我们想要转向列的确切行.我的情况不同,我想将一个指定列的所有值都选择成一个字符串(然后可以选择为1行的列),这个列可以有各种值取决于SELECT查询.以下是它的外观示例:
A | B
------------
1 | 0
8 | 1
3 | 2
... ....
Run Code Online (Sandbox Code Playgroud)
我想将列A的所有值选择为一个字符串,如"183 ......"(或"1,8,3,..."就可以了).
这可以用作另一个SELECT中的列,我必须实现这个,因为我需要将所有子信息(在列A的每一行上)显示为另一行中以逗号分隔的列表.
我对此没有任何想法,它似乎需要一些程序性语句(例如放在一个程序中)但SQLite对如何处理循环,变量声明有很大的限制,......我真的被卡住了.编程数据库时这种任务很常见,我没有理由拒绝这样做.
请帮助,我们将非常感谢您的帮助!谢谢!
我正在使用System.Data.SQLite(版本1.0.85.0)来连接我的SQLite数据库.我想使用SQLiteConnection.BackupDatabase()方法创建数据库备份,但是它会抛出SQLiteException并显示消息:"not an error"(重复两次).这是一些代码:
SQLiteConnection cnnIn = new SQLiteConnection("Data Source=test.db;foreign keys=True");
SQLiteConnection cnnOut = new SQLiteConnection("Data Source=backup.db;foreign keys=True");
cnnIn.Open();
cnnOut.Open();
cnnIn.BackupDatabase(cnnOut, "backup", "test", -1, null, -1);
cnnIn.Close();
cnnOut.Close();
Run Code Online (Sandbox Code Playgroud)
错误来自 System.Data.SQLite.SQLite3.InitializeBackup(SQLiteConnection destCnn, String destName, String sourceName)
有谁知道什么可能是错的?
PS.我必须说错误信息有点误导:)
我已经使用NuGet 安装了System.Data.SQLite.Core包,如FAQ中的System.Data.SQLite中所述:(5)是否有NuGet包?.
如何在Visual Studio 2013中启用设计时支持?

我正在执行一个SQL查询(system.data.SQLite),如下所示:
var color = "red";
var command = new SQLiteCommand("SELECT something FROM tabletop WHERE color = '" + color + "'", Connection);
var reader = command.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
颜色变量是用户提供的文本.如何逃避此文本以防止SQL注入?或者这是一种不好的做法,我应该以一种完全不同的"受保护"方式执行查询?
在我的c#应用程序中,我想将SQLite 与Dapper(on SqliteConnection)一起使用.
当前nuget System.Data.SQLite版本的问题是还加载了与EntityFramework相关的依赖项,但它们不是必需的.