edit2: решение SQLite и `Ссылка на объект не установлена` исключение
Мне трудно понять мою ошибку.
edit1: я установил свое определение, чтобы сделать мой код однопоточным. Проблема ушла. Так что это похоже на состояние гонки.
Я получаю ошибку ниже. Но не всегда, я замечаю, что, если я не устанавливаю перерыв или я быстро прохожу их, я не получаю исключения. Если установить точку останова на var o = command.ExecuteScalar();
или строку перед ней и подождать 10+ секунд (я использовал системные часы для проверки, не считая), она ВСЕГДА получит исключение (я пробовал это дважды, однако в зависимости от того, что я заметил, исключение происходит) только когда я перерываю больше, чем на несколько секунд).
Я не понимаю, ПОЧЕМУ я получаю ошибку. Я распечатал и заявление sql, и значения параметров, которые я его кормил, и я вижу его правильные значения. В чем дело!?! и меня беспокоит то, что COUNT (*) работает, а вставка - нет.
Вот мой код
else
{
command.CommandText = "SELECT COUNT(*) FROM link_list;";
var o = command.ExecuteScalar();
int status = (int)r.status;
command.CommandText = "UPDATE link_list SET status=@status WHERE id=@id;";
command.Parameters.Add("@status", System.Data.DbType.Byte).Value = status;
command.Parameters.Add("@id", System.Data.DbType.Int32).Value = info.linkId;
Console.WriteLine("CommandText {0} {1} {2}", command.CommandText, status, info.linkId);
command.ExecuteNonQuery();
Console.WriteLine("CommandText no exception");
}
в других местах
catch(Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
Мой вывод
CommandText UPDATE link_list SET status=@status WHERE id=@id; 5 108
The thread '<No Name>' (0xbc8) has exited with code 0 (0x0).
A first chance exception of type 'System.NullReferenceException' occurred in System.Data.SQLite.dll
Object reference not set to an instance of an object.
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
at WebDLManager.DB.updateStatus(DLInfo info, ReturnVal r) in C:\dev\source\prvTrunk\WebDLManager\WebDLManager\db.cs:line 134
at WebDLManager.SiteBase.threadStart() in C:\dev\source\prvTrunk\WebDLManager\WebDLManager\SiteType.cs:line 241
The program '[1360] WebDLManager.vshost.exe: Managed' has exited with code 0 (0x0).
По запросу
//this is called through form_load
connection = new SQLiteConnection("Data Source=mydb.sqlite3;Version=3");
command = new SQLiteCommand(connection);
connection.Open();