2010-09-05 18 views
16

जब कोई उपयोगकर्ता मेरा ऐप शुरू करता है तो वह एक नई परियोजना बना सकता है, जिसका अर्थ है सभी तालिकाओं के साथ एक नया डेटाबेस बनाना।मैं सभी टेबलों के साथ, फ्लाई पर एक नया SQLite डेटाबेस कैसे बना सकता हूं?

मैं पुराने डेटाबेस/प्रोजेक्ट से तालिकाओं की संरचना की प्रतिलिपि बनाना नहीं चाहता क्योंकि इस दौरान, प्रोग्राम द्वारा अपडेट के कारण टेबल बदल सकते थे। यह दुर्घटनाओं का कारण बन जाएगा।

तो प्रत्येक एप्लिकेशन अपडेट के साथ मैं तैनात करता हूं, मुझे एक स्क्रिप्ट फ़ाइल भी तैनात करनी चाहिए जो डेटाबेस और टेबल बनाता है, है ना?

स्क्रिप्ट फ़ाइल कैसा दिखना चाहिए और आप इसे सी # में कैसे कॉल करेंगे?

+0

(क्यों यह एक जवाब नहीं है जो) मैं SQLLite की जरूरत नहीं है, लेकिन आप डेटाबेस स्कीमा और एसक्यूएल स्क्रिप्ट फ़ाइलें के लिए किसी भी प्रारंभिक डेटा निर्यात करने में सक्षम होना चाहिए । फिर आप अपने डेटाबेस को स्थापित करने के लिए स्थापना पर उन स्क्रिप्ट को निष्पादित कर सकते हैं। जब आप अपनी स्कीमा अपडेट करते हैं तो स्क्रिप्ट अपडेट करें। – ChrisF

+0

उस लिंक के लिए धन्यवाद Timwi। – Elisabeth

उत्तर

3

आप इसे करने के लिए एक स्क्रिप्ट लिख सकते हैं, लेकिन आपके पास एक यूनिट टेस्ट प्रोजेक्ट भी हो सकता है जो आपके डेटाबेस इंटरफ़ेस का परीक्षण करता है। यदि आप ऐसा करते हैं, तो आप केवल परीक्षण के लिए डमी डेटा के साथ एक परीक्षण डेटाबेस बनाने में सक्षम होना चाहेंगे। असल में, मेरा मुद्दा यह है कि यदि आप एप्लिकेशन डेटा बनाने के लिए एक स्क्रिप्ट फ़ाइल का उपयोग करते हैं और यदि आप यूनिट परीक्षण जोड़ना चाहते हैं, तो आपको उनके लिए एक और स्क्रिप्ट फ़ाइल की आवश्यकता होगी, या आप कोड में अपना डेटाबेस बनाना चाहते हैं ।

मैं आपके कोड में एक कक्षा के संलेखन की वकालत करता हूं जो एप्लिकेशन और यूनिट परीक्षणों के लिए फ्लाई पर डेटाबेस स्कीमा बना सकता है। फिर यदि आप स्कीमा बदलते हैं, तो आपको केवल एक ही स्थान पर इसकी चिंता करनी होगी और सिंक से बाहर होने वाली चीजों से निपटने की ज़रूरत नहीं है (उम्मीद है)।

चूंकि आप SQLite और C# का उपयोग कर रहे हैं, तो मैं SQLite.NET को आज़माने की सलाह देता हूं। इसने मेरे जीवन को बहुत आसान बना दिया है, और मैं अब तक इसके साथ बहुत खुश हूं।

SQLite.NET के साथ, आप एक SQLiteCommand बनायेंगे, इसके कमान टेक्स्ट को "तालिका बनाएं (अपनी स्कीमा यहां बनाएं)" पर सेट करें, और फिर तालिका उत्पन्न करने के लिए ExecuteNonQuery को कॉल करें।

+0

एप्लिकेशन या एप्लिकेशन अपडेट के मेरे सेटअप इंस्टॉलर में स्क्लाइट बनाएं स्क्रिप्ट शामिल करने के बारे में आप क्या सोचते हैं। जब यह उपयोगकर्ता एक नई परियोजना बनाता है तो यह स्क्रिप्ट निष्पादित की जाती है। इसलिए जब भी मैं एक नया संस्करण जारी करता हूं तो मुझे केवल एक फ़ाइल फ़ाइल बनाना होगा और इस फ़ाइल में मेरी टेबल के सभी टेबल बनाएं ... कॉपी करें। – Elisabeth

+0

मैं जिस एसक्लाइट आईडीई का उपयोग करता हूं, वह सभी टेबल और इसकी संरचनाओं को आसानी से एक .sql फ़ाइल में डंप कर सकता है, सभी अर्ध कोलन अलग-अलग होते हैं जैसे कि मुझे एक ExecuteNonQuery के साथ कई कथन चलाने की आवश्यकता होती है :) – Elisabeth

0

कुछ सहायता के लिए, आप सार्वजनिक डोमेन प्रोजेक्ट को मेरे एक दोस्त को देख सकते हैं: www.codeplex.com/publicdomain

अन्य उपयोगी उपयोगिताओं के साथ, Data.SQLHelper.GenerateCreateTablesQuery(DataTable[] tables) पर देखें। डेटाबेस प्रकार के लिए बस SQL ​​का उपयोग करें।

23

हो सकता है कि इस में मदद मिलेगी:

SQLiteConnection.CreateFile("c:\\Ik.db"); 

मक्खी पर एक नया डेटाबेस बनाने और उस पर एक प्रश्न पर अमल। क्वेरी कुछ इस तरह होना चाहिए:

CREATE TABLE IF NOT EXISTS [Setting](
[ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
[Key] NVARCHAR(2048) NULL, 
[Value] NVARCHAR(2048) NULL 
); 
+2

टाइप नाम का पालन करने वाले कोष्ठक में संख्यात्मक तर्क, _e। जी। "एनवीएआरएआरएआर (2048)" _ को SQLite द्वारा अनदेखा किया जाता है; SQLite किसी भी लंबाई प्रतिबंध लागू नहीं करता है। –

+0

आपको अपने 'पथ को हार्ड-कोड नहीं करना चाहिए।डीबी 'फाइल; यह स्थापना पर कॉन्फ़िगर करने योग्य होना चाहिए (हालांकि इसका मतलब यह नहीं है कि अंतिम उपयोगकर्ता को डीबी को स्थापित करना चाहिए), खासकर जब से सी # और एसक्लाइट क्रॉस-प्लेटफॉर्म हैं। –

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