[英]System.Data.Sqlite problems
我在讓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)) 。
有任何想法嗎?
安裝Visual C ++運行時庫的RTM版本與System.Data.SQLite 1.0.74完美配合。 因此不需要SP1版本。
與.NET 4運行時一起安裝的C運行時的版本是msvcr100的RTM版本,但名稱為msvcr100_clr0400.dll。 將其副本重命名為msvcr100.dll,無論是在System32中還是在System.Data.SQLite.dll旁,一切似乎都可以正常工作。
看來他們已經脫離了C運行時的SxS部署。 因此,嵌入清單中不再有“ dependency”標記,並且將加載System32(或與.exe相同的目錄)中的最新版本。
一些伙伴在StackOverflow上就這些更改提出了一個問題: Visual C ++ 2010:對MSVC運行時部署的更改(不再帶有清單的SxS) 。
這一切都意味着對於.NET 4版本,您可以將System.Data.SQLite.dll和msvcr100.dll部署在同一目錄中,而早期版本的運行時則無法實現。 對我來說,這可以解決所有問題,您可以移至當前版本的System.Data.SQLite.dll。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.