[ mish_ns @ 19.03.2010. 13:55 ] @
Pozdrav svima...

Interesuje me kako proveriti pre upisivanja podataka u bazu da li neko polje vec postoji, tj. da li je taj podatak vec upisan...
U pitanju je SQLite baza.

Nasao sam nesto ovako...

Code:

INSERT INTO tabela (ime)
SELECT "Milos"
WHERE NOT EXISTS (SELECT 1 FROM tabela WHERE ime="Milos")


Da li je ovo dobro i da li postoji bolji nacin?
Podaci su vec ucitani u datGridView, da li je bolje da vrsim proveru (podatak vec upisan) putem dataGridView-a ili SQLom???
tacnije sta je bolje sa stanovista performansi??

Hvala unapred.

[ AMD guy @ 19.03.2010. 14:39 ] @
Pogledaj ovo, mozda ti pomogne
http://www.elitesecurity.org/p2224869
[ mish_ns @ 19.03.2010. 15:13 ] @
Hmmm...ne pomaze mi ovo...
Izgleda da SQLite ne podrzava - if exists...
[ AMD guy @ 19.03.2010. 15:22 ] @
A sto ne bi probao SQL express
http://www.microsoft.com/express/database/
[ mish_ns @ 19.03.2010. 15:26 ] @

Pa mogao bih, ali bolje da isteram sad sa ovim do kraja...

Problem mi je i case sensivity.
Kada ovako poredim "milos" i "Milos" nije isto, pa ce on dodati u bazu, a ja ne bih tako.
[ AMD guy @ 19.03.2010. 15:37 ] @
Code:
 public Boolean doesTableExist(SQLiteConnection theDatabase, String tableName)
    {
      SQLiteCommand cmd = new SQLiteCommand(theDatabase);
      cmd.CommandText = "SELECT name FROM sqlite_master WHERE name='" + tableName + "'";
      SQLiteDataReader rdr = cmd.ExecuteReader();
      if (rdr.HasRows)
        return true;
      else
        return false;
    }


Ovo je za proveru tabele, ali malo preformulisi Commandtext pa vidi da li radi.
[ marko_81 @ 19.03.2010. 23:26 ] @
Sto ne stavis da ti kolona "ime" bude UNIQUE? A sto se tice case (in)sensitive opcije, pogledaj na google: sqlite collate nocase. To bi trebalo da ti resi problem.
[ mish_ns @ 22.03.2010. 18:02 ] @
Ljudi probacu sve...nisam mogao ovih dana...
Cim nesto uradim javljam kako je proslo...
[ mish_ns @ 22.03.2010. 18:49 ] @
Evo resenja...

SQL:
Code:

"INSERT INTO tabela(ime) SELECT @ime WHERE NOT EXISTS (SELECT 1 FROM tabela WHERE ime=@ime COLLATE NOCASE)"


I kasnije proveravam da li postoji poklapanje:
Code:

if (response >= 1)
                MessageBox.Show("Podatak dodat u bazu");
            else
                MessageBox.Show("Podatak vec postoji u bazi");


E sad mene interesuje da li je to dobro resenje sa stanovista performansi...
Prethodno sam naunio dataGridView, da li je bolje da uporedjujem uneti podatak putem SQL-a ili da prolazim kroz GridView????

PS. Hvala...AMD i marko
[ AMD guy @ 22.03.2010. 18:58 ] @
Citat:
E sad mene interesuje da li je to dobro resenje sa stanovista performansi...


U poredjenju sa cime, vidim da koristis Datareader to ti je vec dovoljno brzo

http://www.eggheadcafe.com/asp...mance/Apr2006/post26456730.asp
Performance Comparison: Data Access Techniques <- Malo stariji text January 2002

Summary: Compares performance of data access techniques in common application scenarios. Applies to Microsoft .NET Framework Beta 2 and Microsoft SQL Server 2000. (23 printed pages)

DataReaders, DataSets, and performance

[ mish_ns @ 22.03.2010. 19:14 ] @
Da li je brze da koristim SQL kada zelim da ispitam da li postoji neki elemenat u bazi, ili da recimo to proverim koristeci petlju koja ce da prolazi kroz dataGridView kolonu??? Na to sam mislio...

[ AMD guy @ 22.03.2010. 19:24 ] @
Ne razumem sta tacno zelis.
Gridview je samo container u njemu se samo ispisuju podaci a SQL radi sve
[ mish_ns @ 22.03.2010. 19:31 ] @
Prilikom pokretanja programa punim gridView sa podacima iz baze...
Pa me iteresuje da li mi je brze da pretrazujem gridView kad su mi vec ucitani podaci, da ne bih ponovo morao da se konektujem na bazu i cupam podatke iz nje...nadam se da sam sad dobro objasnio...
[ marko_81 @ 22.03.2010. 23:04 ] @
Ako vec imas podatke u memoriji, onda ti je sigurno bolje (brze) da ih odatle pretrazujes nego da se ponovo konektujes na bazu.
[ mish_ns @ 23.03.2010. 09:12 ] @
OK...to je to.
Hvala na odgovorima.