0

我在让 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)) .

有任何想法吗?

4

1 回答 1

0
  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 的当前版本。

于 2013-05-30T17:58:16.327 回答