2013-03-28 23 views
6

Tabloda bir kaydın olup olmadığını kontrol etmeye çalışıyorum.Sqlite + C# içinde kayıt olup olmadığını kontrol etme #

Bunu nasıl yapabilirim? Bu kayıt sizin sorgu tarafından döndürülen ilk satırda ilk sütunu dönecektir kodunuzu

cmd.CommandText = "SELECT count(*) FROM wordlist WHERE word='word'"; 
int count = Convert.ToInt32(cmd.ExecuteScalar()); 
if(count == 0) 
{ 
    cmd.CommandText = "INSERT INTO wordlist(word) VALUES ('word')"; 
    cmd.ExecuteNonQuery(); 
} 

ExecuteScalar basitleştirmek olabilir varsa

string dbName = "Data Source=searchindex.db"; 
SQLiteConnection con = new SQLiteConnection(dbName); 
con.Open(); 
SQLiteCommand cmd = new SQLiteCommand(con); 

// If this sql request return false 
cmd.CommandText = "SELECT rowid FROM wordlist WHERE word='word'"; 
cmd.ExecuteNonQuery(); 

// then add record in table 
cmd.CommandText = "INSERT INTO wordlist(word) VALUES ('word')"; 
+0

i burada soruyorsun anlamaya olamaz
(SQLiteCommand IDbCommand arabirimini uygulamalıdır, çünkü bağlantı SqlServer için, ama SQLite için aynıdır)! – Mido

+0

Ekleme deyimine "nerede olmayan ...." koşulunu ekleyebilirsiniz. – Tim

+0

'Bu sql isteği false değerini döndürürse, tabloya kayıt ekleyin. Hedefiniz, yinelenmeleri önlemek, kelimeyi yalnızca mevcut değilse eklemek değil mi? – Tim

cevap

11

kontrol etmek için:

Zaten aşağıdaki kodu yazdım .

+0

OP'nin sorusuna fantastik cevap. Aramam bitti. –

0
 insert into wordlist(word) 
     select 'foo' 
     where not exists (select 1 from wordlist where word = 'foo') 
+0

Teşekkür ederim Tim. Amacım aslında masadaki bir kaydın olup olmadığını kontrol etmekti, ardından son sıralamayı çıkardı, aksi halde tabloya bir kayıt ekleyip son satır ekini çıkardı. Neden (1) sql isteğinde (*) kullanılsın? –

+0

'... aksi halde tabloya bir kayıt ekleyin ve son satır dizini ayıklayın. Kelimenin henüz mevcut olmaması durumunda, yukarıdaki kodunuz son satırın dışına çıkmıyordu. Yani 'var olmayan ...' 'eklemek istiyorum' ve sonra sıralıyı ayıklamak istiyorsunuz. Neden select * yerine 1'i seçmelisiniz? Select col veya Select 1, her sütunu seçmek için marjinal olarak daha verimlidir ve varlığını test ederken birden fazla sütuna ihtiyacınız yoktur. Çok sayıda sütununuz varsa ve söz konusu testi bir döngüde yürütüyorsanız, verimlilikteki bu marjinal iyileşme, konuşabilmek için "gerçek paraya" katkıda bulunabilir. – Tim

İlgili konular