کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش ذخيره داده در پايگاه داده Local SQLite.NET در زامارين

دوره آموزش زامارین

ذخیره داده در Local SQLite.NET Database


درVisual Studio 2019


دانلودsample


دانلود sample در این بخش شما یاد میگیرید چگونه:

  • از NuGet Package Manager برای اضافه کردن یک NuGet Package به پروژه استفاده کنید.
  • دیتا را به صورت Local در یک دیتا بیس SQLite.NET ذخیره کنید.

این quickstart به شما کمک میکند داده ها را در دیتابیس local SQLite.NET ذخیره کنید. اپلیکیشن نهایی به شکل زیر خواهد بود:

صفحه یادداشت ها
صفحه ورود توجه داشته باشید

پیش نیاز ها:

شما باید بخش قبلی )ساخت اپلیکیشن های چند صفحه ای ) را با موقیت به اتمام رسانده باشید و یا میتوانید از sample بخش قبل برای شروع این بخش استفاده کنید.

آپدیت اپلیکیشن با Visual Studio 2019

1. Visual Studioرا باز کنید و پروژه Notes solution را باز کنید.

2. در Solution Explorer پروژه Notes را انتخاب کنید و روی آن راست کلیک کنید و Manage NuGet Packages… را انتخاب کنید:

بسته های NuGet را اضافه کنید

3. در NuGet Package Manager، تب Browser را انتخاب کنید وNuGet پکیج sqlite-net-pcl را جستجو کنید، آن را انتخاب کنید و Install را بزنید و آن را به پروژه اضافه کنید:

بسته را اضافه کنید
توجه !

تعدادی پکیج NuGet با نام های مشابه وجود دارند. پکیج صحیح دارای مشخصات زیر است:

  • Author(s): Frank A. Krueger
  • Id: sqlite-net-pcl
  • NuGet link: sqlite-net-pcl
بدون توجه به نام پکیج، این NuGet package میتواند در پروژه های .NET Standards استفاده شود.

این پکیج برای برای ترکیب عملیات دیتابیس با اپلیکیشن، استفاده میشود.

4. در Solution Explorer در پروژه Notes، Note.cs را در فولدر Models باز کنید و کد های موجود را حذف کنید. کد زیر را جاگیگزین کنید:

    using System;
    using SQLite;
    
    namespace Notes.Models
    {
        public class Note
        {
            [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string Text { get; set; }
            public DateTime Date { get; set; }
        }
    }

این کلاس یک Note model تعریف میکند که داده های مربوط به هر یادداشت در اپلیکیشن را ذخیره میکند. مشخصه ID، PrimeryKey و AutoIncrement است که باعچ میشود هر یادداشت، در SQLite.NET یک id اختصاصی داشته باشد. تغییرات را ذخیره کنید و از فایل خارج شوید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

5. در Solution Explorer، یک فولدر جدید به نام Data به پروژه Notes اضافه کنید.

6. در Solution Explorer ، در پروژه Notes، کلاس جدیدی با نام NoteDatabase در فولدر Data ایجاد کنید.

7. در NoteDatabase.cs، کد های موجود را حذف کنید و کد زیر را جایگزین کنید:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using SQLite;
    using Notes.Models;
    
    namespace Notes.Data
    {
        public class NoteDatabase
        {
            readonly SQLiteAsyncConnection _database;
    
            public NoteDatabase(string dbPath)
            {
                _database = new SQLiteAsyncConnection(dbPath);
                _database.CreateTableAsync().Wait();
            }
    
            public Task<>> GetNotesAsync()
            {
                return _database.Table().ToListAsync();
            }
    
            public Task GetNoteAsync(int id)
            {
                return _database.Table()
                                .Where(i => i.ID == id)
                                .FirstOrDefaultAsync();
            }
    
            public Task SaveNoteAsync(Note note)
            {
                if (note.ID != 0)
                {
                    return _database.UpdateAsync(note);
                }
                else
                {
                    return _database.InsertAsync(note);
                }
            }
    
            public Task DeleteNoteAsync(Note note)
            {
                return _database.DeleteAsync(note);
            }
        }
    }

این کلاس شامل کد هایی برای ایجاد database، خواندن داده ، نوشتن داد و حذف دیتا ازآن میباشد. این کد از API SQLite.NET های ناهمگام استفاده میکند که محاسبات دیتا بیس را به background thread ها منتقل میکند. علاوه بر آن؛ constructor این کلاس، آدرس فایل دیتا بیس را به عنوان یک آرگومان دریافت میکند. این آدرس توسط کلاس App در گام بعدی فراهم میشود. تغییرات را ذخیره کنید و فایل را ببندید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

8. در Solution Explorer در پروژه Notes ، روی App.xaml.cs دبل کلیک کنید تا باز شود. کد های موجود را حذف کنید و کد زیر را جایگزین کنید:

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Notes.Data;
    
    namespace Notes
    {
        public partial class App : Application
        {
            static NoteDatabase database;
    
            public static NoteDatabase Database
            {
                get
                {
                    if (database == null)
                    {
                        database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3"));
                    }
                    return database;
                }
            }
    
            public App()
            {
                InitializeComponent();
                MainPage = new NavigationPage(new NotesPage());
            }
    
            protected override void OnStart()
            {
                // Handle when your app starts
            }
    
            protected override void OnSleep()
            {
                // Handle when your app sleeps
            }
    
            protected override void OnResume()
            {
                // Handle when your app resumes
            }
        }
    }

این کد دیتابیسی را ایجاد میکند که یک NoteDatabase instance به عنوان یک singleton ایجاد میکند و filename آن را به عنوان یک آرگومان به NoteDatabase constructor ارسال میکند. مزیت ایجاد دیتابیس به عنوان singleton این است که فقط یک connection برای ارتباط با بیتا بیس، زمان فعالیت اپلیکیشن، ایجاد شده و حفظ میشود. در نتیجه نیازی به باز کردن ب بستن فایل دیتابیس، هر زمان که عملیات مربوط به دیتابیس انجام میشود، نیست. تغییرات را ذخیره کنید و فایل را ببندید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

9. در Solution Explorer در پروژه Notes، بر NotePage.xaml.cs دابل کلیک کنید تا باز شود و OnAppearing متد را با کد زیر جایگزین کنید:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
    
        listView.ItemsSource = await App.Database.GetNotesAsync();
    }

این کد، هر یادداشتی که در دیتابیس ذخیره شده باشد را در ListView جمع آوری میکند. تغییرات را ذخیره کنید و فایل را ببندید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

10. در Solution Explorer، بر NoteEntryPage.xaml.cs دابل کلیک کنید OnSaveButtonClicked و OnDeleteButtonClicked را با کد زیر جایگزین کنید:

    async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }
    
    async void OnDeleteButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        await App.Database.DeleteNoteAsync(note);
        await Navigation.PopAsync();
    }

NoteEntryPage یک instance از یک Note را حفظ میکند که یک یادداشت را در BindingContext صفحه نمایش میدهد. زمانی که متد OnSaveButtonClicked اجرا میشود، Note instance در دیتا بیس ذخیره میشود و اپلیکیشن به صفحه قبل باز میگردد. زمانی که متد OnDeleteButtonClicked اجرا میشود، Note instance از دیتابیس حذف شده و اپلیکیشن به صفحه قبل بازمیگردد. تغییرات را ذخیره کنید و فایل را ببندید.

11. پروژه را روی پلتفرم های مختلف Build و Run کنید. در NotesPage دکمه + را بزنید و به صفحه NoteEntryPage بروید ن یک یادداشت وارد کنید. یادداشت را ذخیره کنید و به اپلیکیشن به صفحه NotesPage باگردانده میشود. چند یادداشت با طول های مختلف وارد کنید و عملکرد اپلیکیشن را مشاهده کنید.

در Visual Studio for Mac


دانلودsample


در این بخش شما یاد میگیرید چگونه:

  • از NuGet Package Manager برای اضافه کردن یک NuGet Package به پروژه استفاده کنید.
  • دیتا را به صورت Local در یک دیتا بیس SQLite.NET ذخیره کنید.

این quickstart به شما کمک میکند داده ها را در دیتابیس local SQLite.NET ذخیره کنید. اپلیکیشن نهایی به شکل زیر خواهد بود:

صفحه یادداشت ها
صفحه ورود توجه داشته باشید

پیش نیاز ها:

شما باید بخش قبلی )ساخت اپلیکیشن های چند صفحه ای ) را با موقیت به اتمام رسانده باشید و یا میتوانید از sample بخش قبل برای شروع این بخش استفاده کنید.

آپدیت اپلیکیشن با Visual Studio for Mac

1. Visual Studio for Mac را باز کنید و سپس پروژه Notes را باز کنید.

2. در Solution Pad، پروژه Notes را انتخاب کنید، بر آن راست کلیک کنید و Add> Add NuGet Packages… را انتخاب کنید:

بسته های NuGet را اضافه کنید

3. در پنجره Add Package، NuGet پکیج sqlite-net-pcl را جستجو کنید، آن را انتخاب کنید و Add Package را بزنید تا آن را به پروژه اضافه کنید:

بسته را اضافه کنید
توجه !

تعدادی پکیج NuGet با نام های مشابه وجود دارند. پکیج صحیح دارای مشخصات زیر است:

  • Author(s): Frank A. Krueger
  • Id: sqlite-net-pcl
  • NuGet link: sqlite-net-pcl
بدون توجه به نام پکیج، این NuGet package میتواند در پروژه های .NET Standards استفاده شود.

این پکیج برای برای ترکیب عملیات دیتابیس با اپلیکیشن، استفاده میشود.

4. در Solution Pad، در پروژه Notes، Note.cs را در فولدر Models باز کنید و کد موجود را با کد زیر جایگزین کنید:

    using System;
    using SQLite;
    
    namespace Notes.Models
    {
        public class Note
        {
            [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string Text { get; set; }
            public DateTime Date { get; set; }
        }
    }

این کلاس یک Note model تعریف میکند که داده های مربوط به هر یادداشت در اپلیکیشن را ذخیره میکند. مشخصه ID، PrimeryKey و AutoIncrement است که باعچ میشود هر یادداشت، در SQLite.NET یک id اختصاصی داشته باشد. تغییرات را ذخیره کنید و از فایل خارج شوید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

5. در Solution Pad، یک فولدر جدید به نام Data به پروژه Notes اضافه کنید.

6. در Solution Pad ، در پروژه Notes، کلاس جدیدی با نام NoteDatabase در فولدر Data ایجاد کنید.

7. در NoteDatabase.cs، کد های موجود را حذف کنید و کد زیر را جایگزین کنید:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using SQLite;
    using Notes.Models;
    
    namespace Notes.Data
    {
        public class NoteDatabase
        {
            readonly SQLiteAsyncConnection _database;
    
            public NoteDatabase(string dbPath)
            {
                _database = new SQLiteAsyncConnection(dbPath);
                _database.CreateTableAsync().Wait();
            }
    
            public Task<>> GetNotesAsync()
            {
                return _database.Table().ToListAsync();
            }
    
            public Task GetNoteAsync(int id)
            {
                return _database.Table()
                                .Where(i => i.ID == id)
                                .FirstOrDefaultAsync();
            }
    
            public Task SaveNoteAsync(Note note)
            {
                if (note.ID != 0)
                {
                    return _database.UpdateAsync(note);
                }
                else
                {
                    return _database.InsertAsync(note);
                }
            }
    
            public Task DeleteNoteAsync(Note note)
            {
                return _database.DeleteAsync(note);
            }
        }
    }

این کلاس شامل کد هایی برای ایجاد database، خواندن داده ، نوشتن داد و حذف دیتا ازآن میباشد. این کد از API SQLite.NET های ناهمگام استفاده میکند که محاسبات دیتا بیس را به background thread ها منتقل میکند. علاوه بر آن؛ constructor این کلاس، آدرس فایل دیتا بیس را به عنوان یک آرگومان دریافت میکند. این آدرس توسط کلاس App در گام بعدی فراهم میشود. تغییرات را ذخیره کنید و فایل را ببندید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

8. در Solution Pad در پروژه Notes ، روی App.xaml.cs دبل کلیک کنید تا باز شود. کد های موجود را حذف کنید و کد زیر را جایگزین کنید:

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Notes.Data;
    
    namespace Notes
    {
        public partial class App : Application
        {
            static NoteDatabase database;
    
            public static NoteDatabase Database
            {
                get
                {
                    if (database == null)
                    {
                        database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3"));
                    }
                    return database;
                }
            }
    
            public App()
            {
                InitializeComponent();
                MainPage = new NavigationPage(new NotesPage());
            }
    
            protected override void OnStart()
            {
                // Handle when your app starts
            }
    
            protected override void OnSleep()
            {
                // Handle when your app sleeps
            }
    
            protected override void OnResume()
            {
                // Handle when your app resumes
            }
        }
    }

این کد دیتابیسی را ایجاد میکند که یک NoteDatabase instance به عنوان یک singleton ایجاد میکند و filename آن را به عنوان یک آرگومان به NoteDatabase constructor ارسال میکند. مزیت ایجاد دیتابیس به عنوان singleton این است که فقط یک connection برای ارتباط با بیتا بیس، زمان فعالیت اپلیکیشن، ایجاد شده و حفظ میشود. در نتیجه نیازی به باز کردن ب بستن فایل دیتابیس، هر زمان که عملیات مربوط به دیتابیس انجام میشود، نیست. تغییرات را ذخیره کنید و فایل را ببندید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

9. درSolution Pad در پروژه Notes، بر NotePage.xaml.cs دابل کلیک کنید تا باز شود و OnAppearing متد را با کد زیر جایگزین کنید:

        protected override async void OnAppearing()
        {
            base.OnAppearing();
        
            listView.ItemsSource = await App.Database.GetNotesAsync();
        }
    

این کد، هر یادداشتی که در دیتابیس ذخیره شده باشد را در ListView جمع آوری میکند. تغییرات را ذخیره کنید و فایل را ببندید.

هشدار !

اقدام به build کردن اپلیکیشن در این مرحله باعث اییاد کردن اپلیکیشن در این مرحله باعث ایجاد error هایی میشود که در مراحل بعدی رفع خواهند شد.

10. در Solution Pad، بر روی NoteEntryPage.xaml.cs دابل کلیک کنید تا باز شود و OnSaveButtonClicked و OnDeleteButtonClicked متد را با کد زیر جایگزین کنید:

    async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }
    
    async void OnDeleteButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        await App.Database.DeleteNoteAsync(note);
        await Navigation.PopAsync();
    }

NoteEntryPage یک instance از یک Note را حفظ میکند که یک یادداشت را در BindingContext صفحه نمایش میدهد. زمانی که متد OnSaveButtonClicked اجرا میشود، Note instance در دیتا بیس ذخیره میشود و اپلیکیشن به صفحه قبل باز میگردد. زمانی که متد OnDeleteButtonClicked اجرا میشود، Note instance از دیتابیس حذف شده و اپلیکیشن به صفحه قبل بازمیگردد. تغییرات را ذخیره کنید و فایل را ببندید.

11. پروژه را روی پلتفرم های مختلف Build و Run کنید. در NotesPage دکمه + را بزنید و به صفحه NoteEntryPage بروید ن یک یادداشت وارد کنید. یادداشت را ذخیره کنید و به اپلیکیشن به صفحه NotesPage باگردانده میشود. چند یادداشت با طول های مختلف وارد کنید و عملکرد اپلیکیشن را مشاهده کنید.

1399/01/14 2181 590
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...