【问题标题】:System.Data.Sqlite problemsSystem.Data.Sqlite 问题
【发布时间】:2013-05-30 17:52:35
【问题描述】:

我在让 Sqlite 在我的 c# irc 机器人中工作时遇到问题。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.IO;

namespace ModBot
{
class Database
{
    private SQLiteConnection myDB;
    private SQLiteCommand cmd;

    public Database()
    {
        InitializeDB();
    }

    private void InitializeDB()
    {
        if (File.Exists("ModBot.db"))
        {
            Console.WriteLine("HEYOOOOOOO");
            myDB = new SQLiteConnection("Data Source=ModBot.db;Version=3;");
            String sql = "CREATE TABLE IF NOT EXISTS twitch (id INTEGER PRIMARY KEY, user TEXT, currency INTEGER DEFAULT 0, subscriber INTEGER DEFAULT 0, btag TEXT DEFAULT null);";
            cmd = new SQLiteCommand(sql, myDB);
            cmd.ExecuteNonQuery();
        }
        else
        {
            Console.WriteLine("YOOHOOOOO");
            SQLiteConnection.CreateFile("ModBot.db");
            myDB = new SQLiteConnection("Data Source=ModBot.db;Version=3;");
            String sql = "CREATE TABLE IF NOT EXISTS twitch (id INTEGER PRIMARY KEY, user TEXT, currency INTEGER DEFAULT 0, subscriber INTEGER DEFAULT 0, btag TEXT DEFAULT null);";
            cmd = new SQLiteCommand(sql, myDB);
            cmd.ExecuteNonQuery();
        }
    }
}
}

我下载了 System.Data.Sqlite,并将其作为资源添加到我的项目中。当我运行代码时,它会在尝试建立实际连接时引发 DllNotFound 异常(特别是:无法加载 DLL 'SQLite.Interop.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)) .

有什么想法吗?

【问题讨论】:

  • 您确定您的目标是正确的平台吗? stackoverflow.com/questions/4744293/…
  • 你粘贴正确了吗?
  • @wgraham:我不确定如何使用 Visual C# 2010 更改目标平台。不过,我尝试同时使用 x86 和 x64 SQLite dll。与任一错误相同。
  • @AnnArbor:我相信。什么看起来不正确?
  • 你添加到参考文献了吗?

标签: c# system.data.sqlite


【解决方案1】:
  1. 安装 RTM 版本的 Visual C++ 运行时库可与 System.Data.SQLite 1.0.74 完美配合。所以不需要SP1版本。

  2. 与 .NET 4 运行时一起安装的 C 运行时版本是 msvcr100 的 RTM 版本,但名称为 msvcr100_clr0400.dll。将此副本重命名为 msvcr100.dll,无论是在 System32 中还是在 System.Data.SQLite.dll 旁边,似乎一切正常。

  3. 似乎他们已经远离了 C 运行时的 SxS 部署。因此,嵌入式清单中不再有“依赖”标记,并且无论 System32 中的最新版本(或与 .exe 相同的目录)都将被加载。

有朋友在 StackOverflow 上询问了有关这些更改的问题:Visual C++ 2010: Changes to MSVC runtime deployment (no more SxS with manifest)

这一切都意味着对于 .NET 4 版本,您可以将 System.Data.SQLite.dll 和 msvcr100.dll 部署在同一目录中,这在以前的运行时版本中是不可能的。对我来说,这解决了我所有的问题,您可以转到 System.Data.SQLite.dll 的当前版本。

【讨论】:

  • 似乎对我不起作用,假设我按照您的建议正确执行。到C:\Windows\System32\,复制msvcr100_clr0400.dll,和.exe放在同一个文件夹,重命名为msvcr100.dll。
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2019-08-25
  • 2014-03-12
相关资源
最近更新 更多