2014-09-05 2 views
0

Итак, когда я подключился или попытался запустить этот код в Database.cs. Кроме того, я использую SmartIRC4Net для обработки IRC Теперь я знаю, что это ошибка, потому что Init() в Database.cs даже не запускается! Если это так, он не создает файл «trubot.sqlite» с таблицами.SQLite не создает таблицы базы данных, аварийные ошибки irc bot

Я понятия не имею, почему это делается, но это так.

Вот код Database.cs:

public void Init(){ 
     try { 
      if (File.Exists("trubot.sqlite")) { 
       dbf = new SQLiteConnection("Data Source=trubot.sqlite;Version=3"); 
       dbf.Open(); 
       String db; 
       db = "CREATE TABLE IF NOT EXISTS '"+chan+"' (id INTEGER PRIMARY KEY, user TEXT, currency INTEGER DEFAULT 0, subscriber INTEGER DEFAULT 0, battletag TEXT DEFAULT null, uLevel INTEGER DEFAULT 0, mod INTEGER DEFAULT 0, rlvl INTEGER DEFAULT 0);"; 
       using (query = new SQLiteCommand(db, dbf)){ 
        query.ExecuteNonQuery(); 
       } 
      } else { 
       SQLiteConnection.CreateFile("trubot.sqlite"); 
       dbf = new SQLiteConnection("Data Source=trubot.sqlite;Version=3"); 
       dbf.Open(); 
       String db; 
       db = "CREATE TABLE IF NOT EXISTS '"+chan+"' (id INTEGER PRIMARY KEY, user TEXT, currency INTEGER DEFAULT 0, subscriber INTEGER DEFAULT 0, battletag TEXT DEFAULT null, uLevel INTEGER DEFAULT 0, mod INTEGER DEFAULT 0, rlvl INTEGER DEFAULT 0);"; 
       using (query = new SQLiteCommand(db, dbf)){ 
        query.ExecuteNonQuery(); 
       } 
      } 
     } catch (Exception s) { 
      Console.WriteLine("[ERROR] Error in code. " + s.Message); 
     } 
    } 
    public void addUser(String user) { 
     // add new user 
     try { 
      if (!usrExist(user)) { 
       String db = "INSERT INTO '"+chan+"' (user) VALUES ('"+user+"');"; 
       using (query = new SQLiteCommand(db,dbf)) { 
        query.ExecuteNonQuery(); 
       } 
      } 
     } catch (Exception err) { 
       Console.WriteLine("addUser is causing an error: " + err.Message); 
      } 
    } 

и вот другая причина, он выходит из строя (что в Program.cs)

public static void OnJoined(object sender, JoinEventArgs e) { 
    try { 
     var conf = new Config(); 
     var db = new Database(); 
     Console.WriteLine("[SELF] ["+conf.Channel+"] > *** "+e.Data.Nick+" has joined the channel!"); 
     if (!db.usrExist(e.Data.Nick)) { 
      try { 
       db.addUser(e.Data.Nick); 
      } catch (Exception er1) { 
       string lnNum = er1.StackTrace.Substring(er1.StackTrace.Length - 7, 7); 
       Console.WriteLine("Error: -- Trubot Error "+ er1.Message + " " + er1.Data.ToString() 
          + " " + er1.InnerException.Message.ToString() 
          + " " + er1.TargetSite.ToString() + " Ln: " + lnNum); 
       Console.ReadKey(); 
      } 
     } 
    } catch (Exception er1) { 
     string lnNum = er1.StackTrace.Substring(er1.StackTrace.Length - 7, 7); 
     Console.WriteLine("Error: -- Trubot Error "+ er1.Message + " " + er1.Data.ToString() 
       + " " + er1.InnerException.Message.ToString() 
       + " " + er1.TargetSite.ToString() + " Ln: " + lnNum); 
     Console.ReadKey(); 
    } 
} 

Side Примечание: Я хотел бы использовать MySQL, но я нужно, чтобы это приложение было максимально переносимым и выполнялось как можно больше операционных систем. Я бы предпочел использовать SQLite, чем MSSQL или MySQL.

+0

Вы никогда не говорили нам, что именно представляет собой ошибка. Из полного удара в темноте, я предполагаю, что разрешения на файлы блокируют создание файла данных sqlite или блокируют модификацию файла данных. –

+0

Ошибка в том, что это просто прекратило бы соединение, заявив, что у него нет переменных из SmartIRC4Net :: Connect() void. –

ответ

0

Я установил его. Проблема была в том, что когда я назначил канал SQL как имя таблицы, мне нужно было удалить «#» из него. Итак, вот итоговый код:

public Database() { 
    var conf = new Config(); 
    chan = conf.Channel.Replace("#",""); 
    Init(); 
} 
+0

1. Вы не должны динамически создавать таблицы, подобные этому. Вместо этого добавьте имя канала в качестве столбца центральной таблицы. 2. Ваш код уязвим для SQL-инъекции. Знаете ли вы, что произойдет, если пользователь с именем '"), DROP TABLE some_channel; - 'входит? –

+0

Это бот твич IRC, существуют ограничения на то, что может быть именем пользователя. –