2013-03-28 7 views
6

में रिकॉर्ड मौजूद है या नहीं, मैं यह जांचने की कोशिश कर रहा हूं कि तालिका में कोई रिकॉर्ड पहले से मौजूद है या नहीं।जांचें कि रिकॉर्ड एसक्लाइट + सी #

मैं यह कैसे कर सकता हूं? अगर है कि रिकॉर्ड मौजूद है आप अपने कोड

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 को आसान बनाने में कर सकता है पहली पंक्ति अपने क्वेरी द्वारा रिटर्न पर पहले कॉलम वापस आ जाएगी

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

मैं समझ नहीं है कि तुम क्या यहाँ के बारे में पूछ रहे हैं (लिंक क्योंकि SQLiteCommand IDbCommand इंटरफ़ेस को लागू करना चाहिए SqlServer के लिए है, लेकिन यह SQLite के लिए समान है,)! – Mido

+0

आप सम्मिलित कथन में "जहां मौजूद नहीं है ...." स्थिति जोड़ सकते हैं। – Tim

+0

'यदि यह एसक्यूएल अनुरोध झूठी वापसी करता है ... तो तालिका में रिकॉर्ड जोड़ें 'आपका लक्ष्य डुप्लिकेट को रोकने के लिए है, केवल शब्द डालने पर, यदि यह अस्तित्व में नहीं है, है ना? – Tim

उत्तर

11

जांचने के लिए:

मैं पहले से ही निम्नलिखित कोड लिखा था ।

+0

ओपी के सवाल का शानदार जवाब। मेरी खोज खत्म हो गई है –

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

धन्यवाद टिम। मेरा लक्ष्य मूल रूप से अगर वहाँ एक रिकॉर्ड तालिका में मौजूद हैं, तो पिछले rowid निकालने की जाँच करें, अन्यथा तालिका में एक रिकॉर्ड जोड़ने और पिछले rowid निकालने के लिए किया गया था। आप (1) एसक्यूएल अनुरोध (*) की असमान में क्यों उपयोग करते हैं? –

+0

'... अन्यथा तालिका में एक रिकॉर्ड जोड़ें और अंतिम पंक्ति को निकालें। यदि आपका शब्द अभी तक अस्तित्व में नहीं है तो उपर्युक्त आपका कोड अंतिम पंक्ति को निकाला नहीं जा रहा था। तो आप 'डालना चाहते हैं ... जहां मौजूद नहीं है' और बाद में पंक्ति को निकालना चाहते हैं। चयन * के बजाय 1 का चयन क्यों करें? col का चयन करें या चयन करें 1 मामूली प्रत्येक स्तंभ का चयन तुलना में अधिक कुशल है, और जब अस्तित्व के लिए परीक्षण आप एक से अधिक स्तंभ जरूरत नहीं है। यदि आप कई कॉलम, कहते थे, और एक पाश में अस्तित्व के लिए परीक्षण को क्रियान्वित कर रहे थे, दक्षता में है कि सीमांत सुधार "असली पैसे" इतनी बात करने के लिए अप करने के लिए जोड़ सकते हैं। – Tim

संबंधित मुद्दे