Tag: sqlite

内存流作为数据库

我目前正在考虑使用SQLite作为我的C#项目的数据库引擎,但我遇到了以下问题:我找不到任何用于内存存储的API。 我想要实现的目标如下: 在程序启动时,我想将db文件(从HDD)加载到内存中。 在执行程序期间,我想将此内存流用作真正的数据库(读取,写入,插入,选择等)。 关闭后将流保存到文件中。 任何人都可以以正确的方式指出我或建议另一个更适合此目的的数据库引擎。

在C#中加密SQLite数据库

在.Net / C#中加密SQLite数据库文件的最佳方法是什么? 我正在使用sqlite-dotnet2包装器。 有像SQLite加密扩展和SQLite Crypt这样的工具,但两者都是非自由的,而我的项目是在GPL下。 我想要使​​用的天真方法是让SQLite处理一个临时文件,然后在程序退出时对其进行加密,并覆盖(清零)原始文件。 明显的缺点是,如果程序崩溃(并且在运行时),则可以访问纯文本DB。 有没有更好的方法来解决这个问题? 我可以将加密流传递给包装器(而不是使用SQLiteConnection.CreateFile)吗? [编辑]也许我在思考这个问题。 是否足以在连接字符串中使用密码选项? 在这种情况下,文件是否会被正确加密(或者是一些较弱的保护)?

是否可以在SQLite查询中参数化表名和列名?

我试图在SQLite中使用C#执行参数化查询,我使用的方法就是创建一个静态命令。 SQLiteCommand cmd = new SQLiteCommand( “SELECT [ID]” + “,[email]” + “,[serializedata]” + “,[restrictions]” + ” FROM ” + UserTable + ” WHERE @search = @searchparam”, SQLConnection); cmd.Parameters.Add(new SQLiteParameter(“@searchparam”)); cmd.Parameters.Add(new SQLiteParameter(“@search”)); 并像这样调用它: Command.Parameters[“@searchparam”].Value = searchdata; Command.Parameters[“@search”].Value = search; SQLiteDataAdapter slda = new SQLiteDataAdapter(UserSelectUsernameCommand); DataSet ds = new DataSet(); slda.Fill(ds); User[] array = new User[ds.Tables[0].Rows.Count]; int […]

是否可以从Sqlite查询返回动态对象或数据集?

我在我的Xamarin.Forms应用程序中使用Sqlite.Net 。 到目前为止,如果我的对象是这样的类,那么返回对象列表非常棒: SqliteDatabase.Connection.Query(“Select * from Customers”); 我现在想从查询中动态返回DataSet的等价物 SqliteDatabase.Connection.Query(“Select * from Customers inner join Calls on Customers.Id=Calls.CustomerId”) 现在从第二个查询我想返回一个DataSet而不是一个对象列表。 我知道我可以创建一个新的对象,它组合了Customers和Calls的列,但我不想每次想要查询数据库时都要创建对象。 是否可以动态返回Dataset或Object ?

无法找到请求的.Net Framework数据提供程序 – SQLite

我认为sqlite很简单,但它让我很难过。 我只想创建一个应用程序,我可以使用ado.net实体数据类连接到sqlite数据库。 我在运行Windows XP的虚拟计算机上测试应用程序时遇到此问题。 当我部署它们时,应用程序在我当前的计算机上以及我的笔记本电脑上运行良好。 以下是虚拟计算机上发生的情况: 该应用程序能够启动。 应用程序能够使用System.Data.SQLite与数据库进行交互 应用程序无法使用ADO.NET Entity数据模型连接到数据库 当我尝试连接时,我得到以下exception: 我知道有很多post谈论这个,大多数人都说你需要为Sqlite下载.NET提供程序。 我已经安装了sqlite-netFx40-setup-bundle-x86-2010-1.0.79.0.exe,我遇到了同样的问题。 我该怎么办? 编辑 我设法通过添加以下内容来建立连接: 到我的app.config文件。 问题是现在我无法选择数据也不能将记录插入数据库。 我尝试插入新记录时获得的例外情况是: 在“System.Data.SQLite.SQLiteFactory”类型的商店提供程序实例上调用“GetService”方法后返回null。 商店提供商可能无法正常运行。

SQLite中的SHA1哈希:怎么样?

并行使用多个DB,需要使用散列密码初始化一些记录。 在MS SQL server有一些方便的函数可以动态散列: HashBytes(‘SHA1′, CONVERT(nvarchar(32), N’admin’)) SQLite是否有类似的function? 如果没有,这是最简单的解决方法(例如从SQL server选择并以某种方式将其插入到SQLite表中)? 首选的散列算法是SHA1 ,密码存储在BLOB列中。 更新:我在当前项目中使用C#语言。

在C#中使用SQLite.NET获取最后一个插入ID

我有一个简单的问题,一个不那么简单的解决方案……我目前正在将一些数据插入到这样的数据库中: kompenzacijeDataSet.KompenzacijeRow kompenzacija = kompenzacijeDataSet.Kompenzacije.NewKompenzacijeRow(); kompenzacija.Datum = DateTime.Now; kompenzacija.PodjetjeID = stranka.id; kompenzacija.Znesek = Decimal.Parse(tbZnesek.Text); kompenzacijeDataSet.Kompenzacije.Rows.Add(kompenzacija); kompenzacijeDataSetTableAdapters.KompenzacijeTableAdapter kompTA = new kompenzacijeDataSetTableAdapters.KompenzacijeTableAdapter(); kompTA.Update(this.kompenzacijeDataSet.Kompenzacije); this.currentKompenzacijaID = LastInsertID(kompTA.Connection); 最后一行很重要。 为什么我提供连接? 那么有一个名为last_insert_rowid()的SQLite函数,您可以调用它并获取最后一个插入ID。 问题是它绑定到一个连接,.NET似乎重新打开并关闭每个数据集操作的连接。 我认为从表适配器获取连接会改变一些事情。 但事实并非如此。 有谁知道如何解决这个问题? 也许从哪里获得持续的连接? 或者更优雅的东西? 谢谢。 编辑: 这也是事务的问题,如果我想使用事务,我需要相同的连接,所以这也是一个问题……

在32位和64位C#世界中使用System.Data.SQLite的选项

我理解为什么在32位和64位版本中提供System.Data.SQLite.dll。 所以我们不要再纠缠于此并继续前进。 🙂 由于它以这种方式完成,它似乎使得纯粹的C#开发更难以做出3个选择。 是仅支持32位并强制使用托管程序集来编译x86并在32或64位运行时处理它,并且当你在64位环境中时会失去优势。 是强制64位并且仅支持64位并且失去了在32位上运行的能力但是获得了64位的所有优点。 是创建两个版本的程序集,一个编译x86并使用32位SQLite,另一个编译x64并使用64位SQLite。 它阻止使用“ANY”作为编译选项,并且能够轻松地将单个构建部署到任一类型。 从发展的角度来管理并不是那么可怕,因为我们需要两个项目。 只将C#代码正式放在一个,而另一个只使用“链接”到另一个代码。 这仅用于编译目的。 仍然让我们必须管理两个输出以进行部署。 尽管如此,我只是在寻找确认以上是唯一正确的选择。 但是,如果我有其他选择,请告诉我。 具体来说,如果有一种方法可以获得一个可以编译为ANY的C#DLL,那么它可以利用32位或64位,具体取决于它的运行位置,仍然使用System.Data.SQLite.dll。

SQLite .NET的性能,如何加快速度?

在我的系统上,大约86000个SQLite插入占用了20分钟,意味着每秒约70次插入。 我必须做数百万,我怎么能加快它? 在SQLiteConnection对象上为每一行调用Open()和Close()会降低性能? 交易能帮忙吗? 单线的典型插入方法: public int InsertResultItem(string runTag, int topicId, string documentNumber, int rank, double score) { // Apre la connessione e imposta il comando connection.Open(); command.CommandText = “INSERT OR IGNORE INTO Result ” + “(RunTag, TopicId, DocumentNumber, Rank, Score) ” + “VALUES (@RunTag, @TopicId, @DocumentNumber, @Rank, @Score)”; // Imposta i parametri command.Parameters.AddWithValue(“@RunTag”, runTag); […]

Unity的安装数据库(SQLite)

我看过太多教程列表,他们都推荐相同的东西。 但是,他们没有帮助解决我的问题。 我试图在我的项目中包含一个SQLite数据库,当构建PC,MAC和Linux Standalone(在Windows机器上测试)时,数据库按预期工作。 在Android设备上进行测试时,出现以下错误。 E/Unity: ArgumentException: Invalid ConnectionString format for parameter “/storage/emulated/0/Android/data/com.tbltools.tbl_project/files/TBLDatabase.db” at Mono.Data.Sqlite.SqliteConnection.ParseConnectionString (System.String connectionString) [0x00000] in :0 at Mono.Data.Sqlite.SqliteConnection.Open () [0x00000] in :0 at UIHandler+c__Iterator2.MoveNext () [0x00000] in :0 at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in :0 我认为对connectionString进行修改应该很简单,但这并没有解决我的问题。 这是我到目前为止: if (Application.platform != RuntimePlatform.Android) { // The name of the db. tblDatabase […]