标签: system.data.sqlite

实体框架+ SQLite部署

我有一个ASP.NET MVC应用程序,通过实体框架使用SQLite数据库.一切都适用于VS 2008的本地开发网络服务器.

但是,将Web应用程序部署到我的服务提供商会导致此错误:

[ArgumentException: Unable to find the requested .Net Framework Data Provider.  It may not be installed.]
   System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1308959
   System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35
Run Code Online (Sandbox Code Playgroud)

服务提供商评论说他们不支持SQLite.我曾经认为SQLite独立于服务提供商的设置,因为它可以部署App_Data.

有没有成功实体框架+ SQLite部署的经验?

干杯,-pom-

sqlite asp.net-mvc entity-framework system.data.sqlite

6
推荐指数
2
解决办法
7437
查看次数

如何使用ADO.NET将SQLite内存数据库转储到文件中?

我正在使用System.Data.SQLite.dllSQLite内存数据库.程序完成后,我想将内存数据库转储到.db3文件中以供下次使用.我怎样才能在C#中实现这一目标?

c# sqlite system.data.sqlite

6
推荐指数
1
解决办法
4839
查看次数

是否可以将sqlite中的“0”字符保存为文本

我在 sqlite 表中有一个带有 \0 字符和文本字段的 UTF 字符串。
当我尝试将字符串插入表文本字段然后从数据库中读取它时,我注意到字符串值在 \0 字符后被截断。

问题:是否有可能在 sqlite 中保存/恢复这样的字符串而不会在\0之后丢失数据?

代码片段:

 public static void IssueWith0Character()
    {
        const string sql = "DROP TABLE IF EXISTS SomeTable;" +
                           "CREATE TABLE SomeTable (SomeField TEXT not null);"
                           + "INSERT INTO SomeTable (SomeField) Values ( :value )";

        var csb = new SQLiteConnectionStringBuilder
                      {DataSource = "stringWithNull.db", Version = 3};

        // string with '0' character
        const string stringWithNull = "beforeNull\0afterNull";

        using (var c = new SQLiteConnection(csb.ConnectionString))
        {
            c.Open();

            using (var cmd …
Run Code Online (Sandbox Code Playgroud)

sqlite system.data.sqlite

6
推荐指数
1
解决办法
2246
查看次数

从sqlite读取数据到C#然后到sqlite

可重现的例子:

sqlite db test3.s3db 有一张名为“MathRec”的表:

name score
Bill 2
Mary 3
John 3
Run Code Online (Sandbox Code Playgroud)

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SQLite;

namespace ConsoleApplication7

{
    class Program
    {
    static void Main(string[] args)
    {

        string fullPath = "C:\\Users\\Desktop\\dataset\\test3.s3db";
        SQLiteConnection conread = new SQLiteConnection("Data Source=" + fullPath);
        conread.Open();

        string selectSQL = "SELECT * FROM MathRec";
        SQLiteCommand selectCommand = new SQLiteCommand(selectSQL, conread);
        SQLiteDataReader dataReader = selectCommand.ExecuteReader();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable("MathRec");
        dt.Load(dataReader); …
Run Code Online (Sandbox Code Playgroud)

c# sqlite system.data.sqlite

6
推荐指数
1
解决办法
3万
查看次数

使用System.Data.SQLite在C#app中缓慢打开SQLite连接

编辑3:

我想我的问题暂时解决了......我将我的服务和测试应用程序更改为SYSTEM帐户而不是NetworkService帐户.更改用户帐户的好处是否会持续存在,或者只是暂时性的,还有待观察.

原始问题:

我注意到我的小型224kB SQLite数据库在我的C#应用​​程序中打开非常慢,从一些小的ms到1.5秒或更长时间.下面是我的代码,以及我今天下午添加的所有额外调试语句.我把它缩小到调用,cnn.Open();如下面的日志所示:

2014-03-27 15:05:39,864 DEBUG - Creating SQLiteConnection...
2014-03-27 15:05:39,927 DEBUG - SQLiteConnection Created!
2014-03-27 15:05:39,927 DEBUG - SQLiteConnection Opening...
2014-03-27 15:05:41,627 DEBUG - SQLiteConnection Opened!
2014-03-27 15:05:41,627 DEBUG - SQLiteCommand Creating...
2014-03-27 15:05:41,627 DEBUG - SQLiteCommand Created!
2014-03-27 15:05:41,627 DEBUG - SQLiteCommand executing reader...
2014-03-27 15:05:41,658 DEBUG - SQLiteCommand executed reader!
2014-03-27 15:05:41,658 DEBUG - DataTable Loading...
2014-03-27 15:05:41,767 DEBUG - DataTable Loaded!
Run Code Online (Sandbox Code Playgroud)

如您所见,在这种情况下,打开连接需要1.7秒.我试过重复这个,无法预测后续连接是否会立即打开,或者像这样延迟.

我考虑过使用某种形式的连接池,但是对于单实例单线程应用程序来说,这是值得的吗?现在,我正在创建一个SQLiteDatabase类的实例,并为每个查询调用以下函数.

public DataTable GetDataTable(string sql)
{ …
Run Code Online (Sandbox Code Playgroud)

c# file-io system.data.sqlite network-service

6
推荐指数
1
解决办法
2554
查看次数

System.Data.SQLite 和 sqlite-net-pcl 的区别

鉴于我已经阅读了Xamarin关于本地数据库的文档,我只是对此感到好奇。

sqlite-net-pcl是专为与XAMARIN?一起使用而设计的。我的意思是,如果他们都运行SQLite数据库引擎,那么假设我也可以使用System.Data.SQLiteNuGet 包是否安全?

SQLITE-NET-PCL NuGet Package

在此处输入图片说明

SYSTEM.DATA.SQLITE NuGet Package

在此处输入图片说明

会不会造成伤害?还是真的,而且只推荐使用这个sqlite-net-pcl插件?

希望有人能用这个来澄清我。

另外,我正在考虑Dapper ORM在我的Xamarin.Android项目中实现SQLite Database Engine. 我已经使这种方法适用于标准WinForm Apps. 所以也可以使用Xamarin.Android?

sqlite system.data.sqlite xamarin.android xamarin sqlite-net

6
推荐指数
1
解决办法
3818
查看次数

SQLite在多用户本地网络环境下性能不佳的问题

我们在应用程序中使用 SQLite 作为共享数据库。(我知道这不是最好的解决方案,但服务器/客户端架构是不可能的)只有几个用户,一个非常小的数据库和很少的写入。

该应用程序是用 C# 编写的,我们使用System.Data.SQLite.dll,但问题也会发生,例如SQLiteDatabaseBrowser

只要只有一个用户连接到数据库并查询一些结果,速度就非常快。只需几毫秒。一个用户可以建立多个连接并并行执行 select 语句。这对性能也没有影响。

但是,一旦来自不同机器的另一个用户连接到数据库,每个连接的用户的性能就会变得非常差。只要所有连接/应用程序都关闭,性能就会一直很差。之后,第一个用户连接即可恢复良好的性能,直到下一个用户连接为止。

我尝试了很多事情:

  • PRAGMA 同步 = 关闭
  • 更新到最新的 sqlite 版本(并使用该版本创建了一个新的数据库文件)
  • DB 文件只读
  • 网络共享对所有人只读
  • 具有不同选项的连接字符串(几乎全部)
  • 不同的 sqlite 程序(我们的应用程序和 SQLiteDatabaseBrowser)
  • 主机上的不同文件系统(NTFS 和 FAT32)

之后,我编写了一个小应用程序,用于打开连接、查询一些结果并显示经过的时间。这一切都在无限循环中。

这是这个简单应用程序的代码:

    static void Main(string[] args)
    {
        SQLiteConnectionStringBuilder conBuilder = new SQLiteConnectionStringBuilder();
        conBuilder.DataSource = args[0];
        conBuilder.Pooling = false;                                    
        conBuilder.ReadOnly = true;

        string connectionString = conBuilder.ConnectionString;

        while (true)
        {
            RunQueryInNewConnection(connectionString);
            System.Threading.Thread.Sleep(500);
        }
    }

    static void RunQuery(SQLiteConnection con)
    {
        using (SQLiteCommand cmd = con.CreateCommand())
        {
            cmd.CommandText = "select * from …
Run Code Online (Sandbox Code Playgroud)

c# sqlite performance system.data.sqlite

6
推荐指数
1
解决办法
1159
查看次数

使用 SQLiteStudio 打开加密的 SQLite 数据库

我正在使用 System.Data.SQLite 在 WPF 项目中创建加密的 SQLite 数据库。加密是通过在连接字符串中提供密码来完成的,如下所示:

new SQLiteConnection("Data Source=database.sqlite;Password=123456;Version=3;New=false;Compress=True;);
Run Code Online (Sandbox Code Playgroud)

这很有效,但由于数据库现在已加密,我无法再使用 DB Browser for SQLite 或 SQLiteStudio 等工具打开它。SQLite Studio 提供了打开 SQLCipher 类型的数据库的可能性,但我正在努力为要打开的数据库提供正确的设置。

有谁知道如何打开加密的 SQLite 数据库,以便我可以检查其中的数据?

sqlite system.data.sqlite sqlitestudio

6
推荐指数
1
解决办法
3808
查看次数

“在 DLL 'SQLite.Interop.dll' 中找不到名为 'sqlite3_open_interop' 的入口点。”

我正在使用 C# 应用程序尝试连接到 SQLite 数据库。该应用程序使用库 System.Data.Sqlite,版本 108。在 Visual Studio 2017 中,我的解决方案配置是调试,我的解决方案平台是任何 CPU。每当我构建并运行应用程序时,我都会收到以下运行时异常:

在此输入图像描述

异常未处理,应用程序终止。

当然,我的 bin\Debug 目录中有一个 SQLite.Interop.dll 文件。(如果没有,例外情况会有所不同。)具体来说,有两个,每个都位于各自名为 x64 和 x86 的子目录中。我的假设是正在使用 x86 目录中的文件,因为解决方案平台设置为任何 CPU。SQLite.Interop.dll 程序集的版本与 System.Data.SQLite.dll 的版本匹配,为 1.0.108.0。

当我使用以下命令询问程序集时:

dumpbin /exports SQLite.Interop.dll
Run Code Online (Sandbox Code Playgroud)

我确实在 x64 版本的程序集的输出中找到了以下行:

175   AE 00040750 sqlite3_open_interop
Run Code Online (Sandbox Code Playgroud)

但在 x86 版本的输出中我没有。相反,我找到了这一行:

175   26 00037F10 _sqlite3_open_interop@20
Run Code Online (Sandbox Code Playgroud)

很接近,但不匹配。所以程序集确实没有暴露sqlite3_open_interop这样的方法。

我尝试了将解决方案平台更改为 x64 的明显解决方案,但该更改导致了另一个异常 (BadImageFormatException),我不太想应对它。

我尝试删除对 System.Data.SQLite 的引用并使用 Nuget 添加最新版本 1.0.111.0,然后清理并重建解决方案,但都没有效果。同样的问题再次出现。

有人能建议解决这个问题吗?我相信 SQLite 被广泛使用,所以我必须认为有一种方法可以解决它。

*Edit1:我在我的家用计算机上尝试了这个项目,并观察到两个 SQLite.Interop.dll 文件之间存在相同的差异。x64 版本有一个 sqlite3_open_interop,而 x86 版本有一个 _sqlite3_open_interop@20。然而问题并没有出现在那里。所以显然这个被破坏的名字“问题”是一个转移注意力的话题。我仍然对解决这个问题非常感兴趣,并且感谢从事 System.Data.Sqlite 工作的人的帮助!

c# sqlite system.data.sqlite

6
推荐指数
2
解决办法
8645
查看次数

System.Data.SQLite内存数据库多线程

我正在使用连接字符串创建System.Data.SQLite内存数据库

"Data Source=:memory:", 
Run Code Online (Sandbox Code Playgroud)

并希望在多线程之间访问该数据库。

现在,我要做的就是克隆SQLiteConnection对象并将副本传递给工作线程。

但是我发现,不同的线程实际上获得内存数据库的单个实例,而不是共享的。如何在线程之间共享一个内存数据库?

谢谢!

sqlite system.data.sqlite

5
推荐指数
1
解决办法
2588
查看次数