2013-05-30 2 views
0

У меня проблема с Sqlite для работы в моем боксе C# irc.Проблемы с System.Data.Sqlite

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)), когда он пытается сделать фактическое соединение ,

Любые идеи?

+0

Вы уверены, что используете таргетинг на правильную платформу? http://stackoverflow.com/questions/4744293/unable-to-load-dll-sqlite3-the-specified-module-could-not-be-found-exceptio – wgraham

+0

Вы вставляете его правильно? – AAlferez

+0

@wgraham: Я не уверен, как изменить целевую платформу с Visual C# 2010. Однако я попытался использовать как dll x86, так и x64 SQLite. Одна и та же ошибка. – Keirathi

ответ

0
  1. Установка RTM-версии библиотек времени исполнения Visual C++ отлично работает с System.Data.SQLite 1.0.74. Поэтому версия SP1 не нужна.

  2. Версия среды исполнения C, установленная во время выполнения .NET 4, представляет собой версию RTM версии msvcr100, но имеет имя msvcr100_clr0400.dll. С копией этого файла, переименованного в msvcr100.dll, либо в System32, либо рядом с System.Data.SQLite.dll все работает.

  3. Кажется, они отошли от развертывания SxS среды выполнения C. Таким образом, не больше тега «dependency» во встроенном манифестах, и какая бы последняя версия не была в 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.

+0

Кажется, не работает для меня, предполагая, что я сделал то, что вы предлагали правильно. Пошел в C: \ Windows \ System32 \, скопировал msvcr100_clr0400.dll и поместил его в ту же папку, что и .exe, и переименовал его в msvcr100.dll. – Keirathi