Diskuze: SQLite locked
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Nejsem si jistý, ale asi bych názvy "sloupců" dal do hranatých závorek, a zkusil bych se podívat, jaké hodnoty těch parametrů se dosazují do příkazu. Pokud to vyhazuje chybu asi se snažíš vložit jiný typ dat, než je na "sloupci" v databázi nastaven, nebo máš parametr prázdný a databáze vyžaduje nějakou hodnotu...
Typové dosazení proměnných je určitě dobře, kontrolováno. Můžeš uvést příklad té závorky, nějak nemám představu jak by to mohlo vypadat.
using (SQLiteCommand command = new SQLiteCommand("UPDATE [TabulkaUtok] SET [Lterc]=@param1, [Pterc]=@param2, [Cas]=@param3, [Hodnoceni]=@param4 WHERE [Druzstvo]=@param5 AND [Okres]=@param6 AND [Kategorie]=@param7", this.connection))
Zkus si před ukládáním ty parametry vypsat...
Bohužel nic, závorky opraveny a prováděna kontrola při zápisu, vždy vše naplněno jak má být.
Pak už nevím, s SQLite jsem nikdy nedělal... Neprovádí se současně s tím UPDATEm ještě něco jiného, co by mohlo zamykat tu DB?
Před volám funkce mám vše uzavřené.
MessageBox.Show(getConnection().State.ToString());
getConnection().Open();
MessageBox.Show(getConnection().State.ToString());
Kontrolováno, vždy je Close ikdyž hodí chybu a pak open. Uměle jsem tam vytvořil chybu v uzavření a to zobrazí při dvojitém pokusu o otevření hned v příkazu getConnection().Open() takže by měl mít jen jeden přístup.
Nevím, jestli SQLite má taky nějaké transakční logy, zkus se podívat,
když ti to vyhodí chybu, jestli není ten konkrétní záznam uzamčen...
Jinak už jsem v koncích...
Nevím co jsou transakční logy ještě jsem se s tím nesetkal ale já jsem nic vědomě nezamykal. Můžou se nějak uzamčít sami?
Ve chvíli, kdy pracuji s nějakým záznamem, je tento automaticky uzamčen databází, abychom si navzájem dva uživatelé nemohli měnit údaje, takže pokud změním záznam, je v tu chvíli uzamčen a pokud se "nestihne odemknout" dřív, než ten záznam chci měnit znovu, nelze ho měnit...
Takže výsledek bádání je, že padání měla na svědomí jedna funkce
public string PosledniHodnocene(bool kategorie)
{
string results = null;
getConnection().Open();
using (SQLiteCommand command2 = new SQLiteCommand("Select * FROM TabulkaUtok WHERE Kategorie = @param1 ORDER BY StartCislo ASC ", getConnection()))
{
command2.Parameters.Add(new SQLiteParameter("@param1", kategorie));
using (SQLiteDataReader reader2 = command2.ExecuteReader())
{
while (reader2.Read())
{
if (reader2["Hodnoceni"] + "" == "6004")
{
results = (reader2["Druzstvo"].ToString() + " " + reader2["Okres"].ToString());
break;
}
}
}
}
getConnection().Close();
return results;
}
U příkazu reader jsem neměl použitý using, který asi blokoval přístup do databáze. Teď už to vypadá, že funguje dobře ještě jednou děkuji všem za pomoc.
Myslel jsem si to, že se do toho někde cpe něco jinýho, co blokuje
přístup do DB...
Hlavně, že se ti to podařilo najít
Zobrazeno 13 zpráv z 13.