SqLite اس كيو لايت

Logo_StrikeTeamSQLite

بسم الله الرحمن الرحيم

اللهم علمنا ما ينفعنا و انفعنا بما علمتنا و زدنا علما انك انت العليم الحكيم

 اس كيو لايت  SqLite

طبعا الكلمة شكلها غريب بالعربى بس بما ان فى مقالات كتير جدا بالانجليزى عن كيفية تهيئة و استخدام السكوال لايت فى ويندوز 8 فا قررت اخلى المقال دا بالعربى .

نبدأ بسم الله الرحمن الرحيم بالخطوة الاولى و هيا تعريف السكوال لايت و يفرق اية عن السكوال العادى .. السكوال لايت عبارة عن مكتبة بتستخدم مع لغات برمجية كتير تقدر من خلالها تعمل داتابيز و تشتغل عليها و تنفذ معظم العمليات ال بتتم على الداتابيز العادية خالص زى مثلا سكوال سيرفر داتابيز و لكن السؤال لايت بيتميز بصغر حجم قاعدة البيانات بالاضافة لان قاعدة البيانات بتكون مدمجة مع ملفات البرنامج و دى تعتبر من ضمن مميزات السكوال لايت على عكس استخدامك لاى نوع من انواع الداتابيز العادية ال بتكون ملفاتها منفصلة و كمان من ضمن المميزات ان المكتبة دى بتشتغل على منصات كتير فا نفس ال بتعملة فى ويندوز 8 موجود فى ويندوز فون و موجود فى الاندرويد و طبعا السكوال لايت يعتبر رائع بالنسبة للموبايلات علشان حجمة صغير . معلومات اضافية ويكيبديا     اس كيو لايت

الخطوة التانية ازاى نستخدمة مع ويندوز 8 ستور ابليكشن ..

1 – نبدأ مشروع جديد

newproject

 2- تحميل الران تايم download sqlite windows runtime Tools >> Extensions and Update >> SqLite for Windows Runtime

Download

3- نضيف مكتبة ال “لينك”علشان تساعدنا فى الشغل   Tools >> Library Package Manager >> Manage Nuget Packages>> sqlite-net   Linq

install sqlite-net Nuget Package

بعد كدا بيظهر ايرور نقدر نعالجية ببساطة دى صورة الايرور

error on build

 و نعمل زى فى الصورة هنعالجة باننا نروح لل Configuration Manager

Solve Error

Important used Namespaces

using System;
using System.Collections.Generic;
using System.IO; دا لاننا بنعمل الداتابيز فى فايل و بنديلو مكان معين فى الابليكشن يعمل فية الداتابيز
using System.Linq; مكتبة اللينك ال بنستخدمها علشان تسهل علينا العمليات ال هتتعمل فى الداتابيز
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Storage;
using SQLite; مكتبة ال اس كيو لايت “مصممة بلغة السى بلس بلس”
using System.Diagnostics;
using System.ComponentModel;
using Windows.UI.Popups; اذا احتجناها فى عمل رسائل توضيحية فى الابليكشن

الخطوة ال بعد كدا اننا هنعمل الديزاين بتاع الابليكشن و دا مثال علية

Capture

بعد كدا نبدأ الكود خطوة خطوة الخطوة الاولانية اننا نعمل ال جداول ال هنستخدمها فى المثال ال احنا شغالين علية فى جدولين جدول المدارس و جدول تانى للطلاب

خطوة انشاء جدول الطلاب

public class student
{
[MaxLength(5), PrimaryKey , AutoIncrement]
public Int32 ID { get; set; }
[MaxLength(255)]
public String Name { get; set; }
[MaxLength(255)]
public String Address { get; set; }
[MaxLength(255)]
public String Phone { get; set; }
[MaxLength(255)]
public String School { get; set; }
}

AutoIncrement دى وظيفتها انها هتضيف ال اى دى اوتوماتيك و فى الكود و احنا شغالين هنعرف ازاى نضيفة بنفسنا بردة كا طريقة تانية يعنى

الخطوة التانية انشاء قاعدة البيانات نفسها

private async void btn_craetedb_Click(object sender, RoutedEventArgs e)
{
var database = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, “Student_DB”);
var line = new MessageDialog(“Database Created Successfully”);
await line.ShowAsync();
}

async  بنستخدمها هنا للاننا هنضيف await و دى ليها استخدمات كتير هنشوفها فى موضوع تانى

Windows.Storage.ApplicationData.Current.LocalFolder.Path دا المكان ال هيتعمل فية الداتابيز

“Student_DB” دا  اسم الداتابيز

و كود اضافة الجدول بيكون كالتالى

   var database = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, “Student_DB”);

using (var db = new SQLite.SQLiteConnection(database))
{
db.CreateTable<Student>();
}

طبعا علشان اقدر اعمل الحركة دى لازم اكون ضايف الكلاس بتاع الطالب و بكدا نكون عملنا داتابيز و حطينا فيها جدول و نقدر طبعا نحط مجموعة جداول مش جدول واحد بس

ازاى نقدر نضيف ريكورد فى الجدول

using (var db = new SQLite.SQLiteConnection(database))
{
db.RunInTransaction(() =>
{
int query = 0;
if (db.Table<student>().Select(a => a).Count() != 0) الخطوة دى اضافية علشان بس نتأكد ان الداتابيز فيها بيانات و ميحصلش ايرور
{
query = db.Table<student>().Select(a => a).Max(a => a.ID); اما هنا فا دى الخطوة البديلة لل autoincrement فا من هنا بنجيب اكبر رقم فى ال اى دى
}
db.Insert(new student و هنا بنحط كود اضافة عنصر جديد للطالب مكون من الحاجات ال تحت دى
{
ID = int.Parse(query.ToString()) + 1, هنا ضيفنا 1 على اكبر رقم جبناة فى الاى دى علشان يبقا فى تسلسل
Name = txt_studentname.Text,
Address = txt_studentaddress.Text,
Phone = txt_phonestudent.Text ,
School = cmb_schools.SelectedItem.ToString()
});
});

اما طريقة المسح علشان نقدر نمسح ريكورد فا بتكون كالتالى

var selected = db.Table<student>().Where(a => a.Name == itemname).Select(a => a).FirstOrDefault();
db.Delete(selected);

Where دى طبعا بتخلينا نحدد انهى ريكورد بالظبط ال هيتمسح بناءا على شرط معين لو اتحقق يبقا هنمسح الريكود و الشرط دا

a.Name == itemname و لكن طبعا هنا فى ملاحظة منقدرش نمسح بناءا على الاسم لان الاسم وارد انة يتكرر اكتر من مرة المفروض ان الحذف بيكون بناءا على قيم غير قابلة للتكرار زى الاى دى

اما طريقة حذف كل البيانات ال فى جدول معين عن طريق

 db.DeleteAll<student>();

و دى طريقة البحث

var query = db.Table<student>().Where(a => a.Name.Contains(txt)).Select(a => a).FirstOrDefault();
lbl_schoolname.Text = query.School;

Name.Contains دى احنا عالمينها علشان يقدر يجيب نتيجة فى حالة حتى ان المستخدم مكتبش الاسم كامل و نقدر بردة نستخدم

StartsWith بتقوم بنفس العملية

و دا رابط تحميل المشروع كامل و فية اضافات اكتر من ال موجودة فى المثال للأفادة و ليس للنقل

 تحميل 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s