그래서 연결하거나 시도하면이 코드가 Database.cs에서 실행됩니다. 또한 IRC 처리를 위해 SmartIRC4Net을 사용하고 있습니다. 이제 Database.cs의 Init()가 실행되지 않기 때문에 이것이 오류라는 것을 알고 있습니다! 그렇다면 테이블과 함께 "trubot.sqlite"파일을 작성하지 않습니다.SQLite가 데이터베이스 테이블을 만들지 않고 충돌합니다.
나는 왜 그것이 그것을하고 있는지 전혀 알지 못합니다. 그러나 그렇습니다.
다음은 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();
}
}
사이드 노트입니다 : 내가 MySQL을하지만 난을 사용하십시오 가능한 한 많은 운영 체제에서 실행되도록이 응용 프로그램을 가능한 빨리 포팅해야합니다. 오히려 MSSQL 또는 MySQL보다 SQLite를 사용하고 싶습니다.
오류가 정확히 무엇인지 알려주지 않았습니다. 어둠 속에서 완전한 찔러 보니, 내 추측은 파일 권한이 sqlite 데이터 파일을 만들거나 데이터 파일의 수정을 차단하는 것을 차단하는 것입니다. –
오류는 SmartIRC4Net :: Connect() void에서 변수가 누락되었다고 말하면서 연결을 중단하게됩니다. –