Çalıştırmamda bir kaynak olarak gömülü olacak bir SQLite veritabanını yüklemeye çalışıyorum. Merak edenler için, yapılandırma verilerini depolamak için küçük bir SQLite veritabanı kullanıyorum ve yürütülebilir dosyanın içine yerleştirilmiş varsayılan yapılandırmayı göndermek istiyorum (dosyaları bir programla birlikte taşımaktan nefret ediyorum)..NET'te bir bayt akışından bir SQLite veritabanı yükleniyor
Bu yalnızca varsayılan yapılandırma olur. Yani, bu yapılandırmayı değiştirmek zorunda değilim. Statiktir ve programım kurulduktan sonra değiştirilemez.
SQLite için System.Data.SQLite sarıcısını kullanıyorum.
Böyle bir bayt akışına erişim elde edebilirsiniz:
using (var stream =
Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
// use of "stream" here.
}
Ancak, bu akıştan bir SQLiteConnection
nesnesi oluşturarak açısından bir kayıp am.
Program her yüklendiğinde, basit bir çıkış basitçe yeni bir yapılandırma dosyası oluşturmak ve sonra SQLiteyi bu dosyadan okuyacağını söylemek olabilir. Bu muhtemelen işe yarayacaktır, ancak bu tekniği kullanmaktan kaçınmak istiyorum - çözümümün bu soruna yeniden kullanılmasını da planlıyorum (ayrıca her dil bir [sıkıştırılmış] SQLite veritabanıdır ve varsayılan dil yürütülebilir dosyaya yerleştirilmiştir). kullanıcı diğer dilleri basitçe diğer dil veritabanlarını programın çalışma dizinine kopyalayabilir).
Bu veritabanını bellekte tutmanın bellek maliyetiyle ilgilenmiyorum. Çok küçük (muhtemelen 50 KiB'den az), bu da beni rahatsız etmiyor. Açıkçası bu daha büyük bir veritabanı olsaydı, bu bir sorun olabilir. Son olarak, bunun bir yapılandırmayı depolamanın zayıf bir yolu olarak görülebileceğinin farkındayım. Kullanıcının tüm ayarlarını el ile girdiği durumlarda, düz metin tabanlı bir çözümün iyi olduğunu kabul etmekteyken, bu çoğunlukla kullanıcının açıkça tanımlayamadığı ayarlar için kullanılır. Örneğin, çeşitli yerleştirme pencerelerinin konumlarını bir uygulamada saklamak veya dahili kaynakların nerede bulunabileceği hakkında veri depolamak.
Yardımlarınız için teşekkür ederiz.
7 yıl sonra, bir sql lite db'yi bir ikili belleğe kaydetmenize veya bir akıştan yüklemenize izin veren bir çözüme sahip olup olmadığınızı merak ediyor musunuz? – lucuma