جستجو در تالار

در حال نمایش نتایج برای برچسب های 'sqlite'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالار ها

  • عمومی
    • اطلاعیه
    • اخبار
    • پیشنهادها و انتقادات
    • درخواست آموزش
    • مشکلات و مسائل انجمن
    • متفرقه
  • سوالات، مشکلات و درخواست
    • ویندوز استور
    • وب (ASP.Net)
    • ویندوز دسکتاپ (Win32 & WPF)
    • زامارین فرم (Xamarin.Forms)
    • زامارین اندروید
    • زامارین iOS
    • دات نت کور
    • اینترنت اشیاء (IOT)
    • سوالات کلی و عمومی
  • توسعه نرم افزارهای ویندوز استور
    • سوالات، مشکلات پروژه های ویندوز استور
    • مقالات، کتاب ها و منابع آموزشی
    • سورس کدهای آموزشی
  • برنامه نویسی زامارین
    • زامارین فرم (Xamarin.Forms)
    • زامارین ios
    • زامارین اندروید
    • عمومی
  • برنامه نویسی ASP.NET
    • مقالات، کتاب ها و منابع آموزشی
    • .Net Core
    • ASP.NET MVC
    • ASP.NET WebForm
  • اینترنت اشیاء
    • مقالات، کتاب ها و منابع آموزشی
    • سخت افزار
    • نرم افزار
    • پروژه ها
  • متفرقه
    • آموزش ابزارها و نرم افزار ها
    • آموزش های سرویس ها و سایت ها
    • سوالات و مشکلات برنامه نویسی Win 32
  • نرم افزار
    • نرم افزار های تیم انجمن
    • نرم افزار های ساخت شما
    • سفارش نرم افزار و برنامه نویسی
    • معرفی ابزارها و نرم افزارهای مرتبط
    • درخواست ابزار کمکی
    • مشکلات و سوالات در مورد نرم افزار ها

گروه


آدرس تارنما


یاهو


اسکایپ


حساب مایکروسافت


شماره تماس


تلگرام


مکان


علایق


نام توسعه دهندگی

12 نتیجه پیدا شد

  1. سلام.تقاضا میشه از دوستانی که زامارین اندروید بلد هستن لطف کنن اموزش sqlite در زامارین بزارن، که شامل ثبت،حذف،بروزرسانی باشه.ممنون
  2. سلام لطفا آموزش استفاده از دیتابیس sqlite در زامازین فورم را قرار دهید
  3. سلام چطوری دیتابیس SQLite به برنامه اندروید متصل کنم ؟
  4. با سلام و عرض ادب و احترام خدمت شما. امروز با آموزش اولیه ی انتیتی فریمورک کور در خدمت شما هستیم. در این آموزشی شما : با مفاهیم پایه ای ORM و انتیتی فریمورک آشنا خواهید شد + با یک آموزش پروژه محور، راه اندازی انتیتی فریمورک کور و عملگر های اصلی آن را فرا خواهید گرفت. همانطور که می دانید، انتیتی فریمورک یک نوع ORM است. (از نظر خودم بهترین ORM) که اجازه ی ارتباط و مدیریت دیتابیس را در اختیارتان قرار می دهد. انتیتی فریمورک کور همان انتیتی فریمورک است که به صورت فراپلتفرمی اجرا شده است. این ORM میتواند در پروژه های دات نت فریمورک، زامارین، دات نت کور، ویندوز اپلیکیشن و ... روی هر پلتفرمی اجرا شود! ORM چیست؟ ORM (Object Relational Mapping) یک لایه مترجم بین زبان برنامه‌نویسی و پایگاه داده رابطه‌ای است که این دو را به هم تبدیل می‌کند و در عمل باعث می‌شود که این دو حیطه کاملا متفاوت زبان یکدیگر را به خوبی بشناسند و با هم تبادل اطلاعات داشته باشند. یک ORM قوی ، برنامه را از نوع پایگاه داده استفاده شده، جدا می‌کند. این کار باعث می‌شود که استقلال نسبت به نوع پایگاه داده حفظ شود. ORM ارتباط های دایمی و احتمالا پیچیده با پایگاه داده را انجام می دهد و نیازی به انجام اعمال تکراری وکد نویسی هایی تکراری توسط برنامه نویس در هر بار ذخیره فیلد و رکورد جدید و بازیابی اطلاعات و...نیست.از طریق ارتباطی که بوسیله ORM بین اشیاء و پایگاه داده ایجاد می شود می توان اطلاعات اشیاء را با صدا زدن یک متد در پایگاه داده ی خود ذخیره کنید. این ساده سازی که توسط ORM فراهم می شود باعث میشودبا کدهای کمتری کارهایی نظیر بازیابی اطلاعات را انجام دهیم وبعدها اگه خواستیم تغییراتی اعمال کنیم به راحتی بتونیم بازسازی وتغییرش بدیم. ORM محدود به هیچ زبان خاصی نیست و تنها یک تکنیک و سیستم است که می تواند در زبانهای مختلف پیاده سازی شود . چند نوع ارتباط اولیه با دیتابیس داریم؟ 1-Database First:در این روش ابتدا دیتابیس طراحی و پیاده سازی می شود و بعد از آن انتیتی فریمورک به وسیله ی ویزارد، کلاس ها و موارد دیگر ارتباط با دیتابیس را می سازد. 2-Model First: در این روش ابتدا به وسیله ی کلاس دیاگرام، مدل برنامه طراحی می شود و انتیتی فریمورک با آن دیتابیس و کلاس ها و موارد دیگر را می سازد. 3- Code First: در این روش ابتدا کلاس ها و منطق ابتدایی برنامه نوشته میشود، سپس با انتیتی فریمورک این کلاس ها و آبجکت ها به صورت فیلد ها و رکورد های دیتابیس در میاورد. در این روش برنامه نویس فقط وظیفه ی کد نویسی را دارد و این ORM است که دیتابیس را ساخته و آن را مدیریت میکند. در انتیتی فریمورک فقط اتصال اولیه ی دیتابیس راه های مختلف دارد اما از اینجا به بعد، همه چیز یکسان است. مفاهیم پایه ای: انتیتی(Entity): انتیتی یک کلاس ساده است که پس از فرایند مایگریت به جدول های دیتابیس تبدیل می شود. همچنین این کلاس ها در ارتباط کد فرست با دیتابیس مارا یاری خواهند کرد. DbSet: یک کالکشن در حافظه که مقادیر دیتابیس را در خود دارد. با کوئری های Linq میتوانیم به آن دسترسی داشته باشیم و اعمال add(inset),Delete,Update,Select را در آن انجام دهیم. مایگریتشن(Migration): فرایندی که ORM انتیتی ها را به کد های ساخت و یا تغییرات دیتابیس تبدیل می کند. مایگریت(Migrate): اجرای دستورات مایگریشن و اعمال تغییرات و یا ساخت دیتابیس. در ادامه به صورت پروژه محور با انتیتی فریمورک کور (به صورت Code First) آشنا خواهیم شد.
  5. با عرض سلام و خسته نباشید ، چنتا موضوع ساده هست در رابطه با دیتابیس که ممنون میشم اگر راهنمایی کنید . 1) مثلا دیتابیس SQLite من در فولدر assets هست ، چطوری من موقع ایجاد کانکشن به اون رفرنس بدم ؟ ( چطور به اون دیتابیس اماده رفرنس بدم ؟ ) var con = new SQLitePCL.SQLiteConnection("Assets/db.sqlite"); کد بالا مثلا ارور میده . 2) اگر من بخوام این دیتابیس اماده رو در فولدر local یا پکیج فولدر اپلیکیشن قرار بدم داستان چجوری میشه ؟ 3 ) در کد پایین SQLiteResult.ROW به چه معناست ؟ و اون اندیس x دقیقا یعنی چی ؟ ایا اون اندیس به ستون دیتابیس اشاره داره ؟ کی باید 0 بزاریم کی اعداد دیگه ... using (var x = con.Prepare("SELECT rowid FROM ashoora")) { while (x.Step() == SQLitePCL.SQLiteResult.ROW) { x.Step(); result.Text += x[0] } } 4 ) در SQLite.net-pcl ( یک نسخه از SQLite که با رفتار linq باید ازش استفاده کرد ) چجوری ازش select کنم ؟ یعنی چجوری در این نوع SQLite دریافت داده انجام بدم ؟ مثلا : من الان یه دیتابیس با دوتا ستون دارم میخوام ازشون داده بگیرم ولی نمیتونم با این ساختار ازشون اطلاعات بگیریم conn.Table<Customer>(); ​من چجوری باید بجای customer شیئ خودمو بزارم که با دیتابیس تطابق داشته باشه ؟ ( مثلا اینجا کاستومر id name age داره از طرفی داخل دیتابیس هم دقیقا این ستون ها هست به همین علت بهش داده هارو برمیگردونه . منتها شئی من با اینکه با دیتابیس تطابق داره ولی داده نمیده . var query = conn.Table<Customer>(); string id = ""; string name = ""; string age = ""; foreach (var message in query) { id = id + " " + message.Id; name = name + " " + message.Name; age = age + " " + message.Age; } ****** اگر یکی از مورد هارو هم راهنمایی کنید یه دنیا ممنون میشم **********
  6. با سلام، من با استفاده از کد زیر رکوردی رو میتونم حذف کنم، ولی وقتی که رکورد حذف میشه، Id اون رکورد هم کلا حذف میشه، یعنی مثلا من وقتی رکورد 80ام رو حذف میکنم، فیلد آیدی بصورت: 78 79 81 82 میشه. string path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "mydb.db"); SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); conn.Execute("Delete from MyTable where Id =?", 80); با تشکر
  7. با سلام من یه آبجکت DateTime رو در SQLite ذخیره کردم، میخواستم ببینم میشه روی اون کوئری زد؟ ​مثلا درخواست بدم که آبجکت هایی از فلان روز یا فلان روز بودن رو به من بده. در حال حاضر وقتی کوئری میدم تمام جدول رو برام میاره ... ​امکان این کار هست یا باید آبجکت DateTime رو تبدیل کنم هر موجودیش رو به یه ستون ؟ یا راه دیگه ای داره ؟ ​ممنون میشم اگه کمک کنید.
  8. بسم الله الحمن الرحیم سلام دوستان؛ من برای ذخیره سازی دیتاهام از این پایگاه داده استفاده می کنم، چون هم ساده است و هم بسیار سبک. چون ممکن هست برخی از دوستان هم به یک پایگاه داده سبک و سریع نیاز داشته باشند، پس منم سعی می کنم یک آموزش مقدماتی برای شروع کار بنویسم و امیدوارم در کنار اساتید بتونیم یه تاپیک جامع برای پایگاه داده در برنامه های UWP داشته باشیم. حالا با این مقدمه کوتاه می‌ریم سراغ خود آموزش. سعی می کنم هر قطعه کد رو با مثال توضیح بدم تا اگر بیان من ناقص بود از روی مثال بتونید لپ کلام رو بفهمید. در هر صورت هر جا مشکلی بود بفرمایید که اگر بدونم حتما پاسخ می دم یا از اساتید می پرسم. ابتدا باید فایل sqlite-uap-3100200.vsix را دانلود و نصب کنید. در گام بعدی، در Nuget عبارت SQLite.Net-PCL رو سرچ و سپس نصب کنید. و در آخر هم در Reference پروژه مانند تصویر رفرنسهای مشخص شده رو اضافه کنید. اگر Sqlite for universal Ap.. رو نمی بینید، از نصب بودن اون اطمینان پیدا کنید و ویژوال استدیو رو مجددا اجرا کنید. برای اجرای بهتر پایگاه داده نیازمند Visual C++ 2015 نیز هستیم که باید به رفرنس ها اضافه کنیم. برای مثال، می خواهیم یک دیتابیس از اطلاعات یک کلاس دانش آموزی داشته باشیم. من فرض می کنم که شما تا حدودی با برنامه نویسی یک پارچه آشنا هستید، بنابراین تنها به دیتابیس می پردازم. ما به یک کلاس واسط نیازمندیم تا اطلاعات رو بین دیتابیس و سایر متد ها منتقل کند public class Students { [PrimaryKey, AutoIncrement] public int Id { get; set; } public int StudentID { get; set; } public string Name { get; set; } public string Family { get; set; } public string Father { get; set; } } برای استفاده از این کلاس نیازمند فضای نامی زیر هستید: using SQLite.Net.Attributes; اما توضیحات لازم: [PrimaryKey, AutoIncrement] فیلد کلیدی ما رو مشخص می کند و AutoIncrement نیز سبب مقداردهی خودکار به آن می شود. که در اینجا فیلد Id رو به عنوان کلید معرفی شده است. به دو شی برای نگهداری آدرس و کانکشن دیتابیس نیازمندیم: string path; SQLite.Net.SQLiteConnection conn; Path برای ذخیره سازی آدرس محل ساخت فایل دیتابیس است و conn نیز وظیفه ایجاد ارتباط با آن را بر عهده دارد. ایجاد ارتباط با پایگاه داده: path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "mydb.sqlite"); conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path); conn.CreateTable<Students>(); سطر اول، برای ایجاد دیتا بیس با نام mydb.sqlite است. در سطر بعد، جدولی را بر اساس فیلدهای کلاس Students ساخته خواهد شد. اگر چنین جدولی وجود داشته باشد، تنها ارتباط صورت می گیرد و داده ها پاک نمی شوند. ذخیره اطلاعات: با این دستور insert با استفاده از کانکشن تعریف شده و کلاس واسط می توانید اطلاعات را در جدول مورد نظر (Students) ذخیره سازید. این دستور در هر بار اجرا یک شی جدید از نوع کلاس واسط ایجاد، مقداردهی و سپس در جدول مورد نظر پیاده می کند. var j = conn.Insert( new Students() { StudentID = studentID, Name= name, Family=family, Father= father } ); اگر لازم باشد یک جدول را به کلی حذف کنید می توانید از دستور زیر استفاده کنید: conn.DropTable<Students>(); زمان‌هایی مانند گرفتن نسخه پشتیبانی از دیتابیس لازم است ارتباط با پایگاه داده را قطع کنید. تنها کافیست کانکشن را Close کنید: conn.Close(); اما برخی کوئری های لازم! اولین کوئری رو برای گرفتن تمامی آیتم های موجود در جدول و ذخیره آن در یک لیست: public System.Collections.Generic.List<CDB> List() { List<Students> listmaster = conn.Query<Students>("Select * From Students).ToList<Students>(); return listmaster; } خب ما در این متد با کوئری Select * From Students تمامی آیتم ها را دریافت و در لیستی به نام listmaster میریزیم و آن را برمی گردانیم. در پایان چند کوئری پرکاربرد رو می نویسم: 1. انتخاب یک یا بیشتر از آیتم هایی که مقدار فیلد مشخص شده (در اینجا id) برابر مقدار معینی باشد که عموما برای جست و جو یا لیست کردن تعداد خاصی از آیتم ها کاربرد داره: Select * From Students WHERE Id like '%" + X + "%' X مقداری است که جهت مقایسه استفاده می کنیم. 2. حذف یک مقدار مشخص "Delete From Students Where Id like '%" + X + "%' " 3. گرفتن یک رنج (با تشکر از رامین عزیزم): "Select * From Students WHERE Id >= " + C + " AND Id <= " + D تمامی id هایی که بین C و D هست رو به ما میدهد!
  9. فایل دیتابیس SQLite را قبلا توسط نرم افزار (SQLite Expert Personal ) ایجاد کرده ایم و جدول ها رو پر کرده ایم . چگونه با دیتابیس ارتباط برقرار کنیم ؟ و اطلاعات را در برنامه نمایش دهیم ؟ بهترین نرم افزار برای کار با SQLite چه نرم افزاریه ؟
  10. در این آموزش قصد داریم که نحوه ساخت دیتابیس SQLite در ویندوز فون آموزش دهیم که برای همه نوع های ویندوز فون از قبیل silverlight و universal قابل استفاده میباشد ولی من خودم در این آموزش از silverlight استفاده میکنم. و نکته بعدی این است که در این آموزش نحوه ساخت دیتابیس میباشد نه وصل شدن به دیتابیس از قبل ساخته شده ، که سعی میکنم خیلی زود آموزش نحوه وصل شدن به دیتابیس از قبل آماده و ساخته شده هم برای شما دوستان ارائه کنم. قبل از ورود به مراحل انجام کار جا داره یک نکته را برای شما بگم این آموزش را من در چند منبع مطالعه کردم و با تغییرات خودم به ساده ترین حالت ممکن پیاده کردم ( برای من این پیاده سازی از همه تا اینجا راحتتره ) در نتیجه این روش اختراع یا ابداع خودم نمیباشد ولی تغییرات را من انجام دادم. نکته دیگری که باید بگم چون من خودم با تغییرات انجام شده سعی در راحتتر کردن کار شده ام ، تنها وظیفه ای که بر گردن شما قرار میدهم این است که هرکسی که از شما در مورد نحوه کار دیتابیس سوال کرد اگر این آموزش برای شما خوب بودش و کار شما را راه انداخت حتما به دوست خود هم بگید ( ساده ترش اینه پیش خودتون نگه ندارید راز نیستش که کمک کنید بهم دیگه ) در غیر این صورت بنده راضی به استفاده از این آموزش نیستم.وسلام خب زیاد حرف زدم بریم سراغ آموزش : در ابتدا یه پروژه ویندوز فونی ساخته ( من خودم در این آموزش از WindowsPhone Silverlight استفاده میکنم) همانند تصویر و در قسمت بعد میتوانید ورژن هدف این پروژه رو مشخص کرده که من از ورژن 8.1 استفاده میکنم. بعد از ساخت پروژه اولین صفحه ای که مشاهده میکنید MainPage هستش که فعلا با این قسمت کاری نداریم. مرحله بعد اضافه کردن کتابخانه های لازم برای SQLite هستش : 1)ابتدا شما از منو Tools گزینه Extensions and Updates… را انتخاب کرده در صفحه باز شده در قسمت Online عبارت Sqlite را نوشته و سرچ کرده تا لیستی برای دانلود کتابخانه های مورد نظر برای شما نمایان شود و در ای صفحه گزینه انتخاب شده در تصویر را انتخاب کرده یعنی همان کتابخانه SQLite for Windows Phone را انتخاب کرده و دانلود کرده ، پس از اتمام دانلود صفحه مربوط به نصب به نمایش در می آید که با زدن دکمه install به نصب کتابخانه پرداخته. بعد پایان نصب به صورت اتوماتیک به صفحه اینترنتی مربوط به Sqlite میرودید که میتوانید مطالعه کنید ( چرت و پرته خودمونیم!). بعد نصب یکبار ویژوال را بسته و دوباره اجرا پروژه رو اجرا کنید یا میتوانید در همان صفحه باز شده دکمه Restart رو بزنید. 2)حالا نوبت به نصب کتابخانه بعدی میرویم برروی پروژه در قسمت solution Explorer کلیک راست کرد و گزینه Manage NuGet Packages… رو زده و در قسمت مربوط به جستجو عبارت sqlite-net-wp8 را وارد کرده و کتابخانه مشخص شده رو شروع به دانلود کرده.(ورژه این کتابخانه را به حافظه سپرده یا در جایی نوشته بعدا لازمش داریم) توجه کنید در هنگام نصب این کتابخانه به ورژن آن که در عکس مشخص شده است توجه کنید چراکه برای هماهنگ بودن با کتابخانه ای که در قسمت اول نصب کرده ایم باید هم ورژن باشد ( هرچند که اگر کتابخانه ای که در قسمت اول دانلود شده است همه شماره ورژن انتشار یافته جلوتر هستش از این کتابخانه و مشکلی پیش نمی آید ولی برای جلوگیری از مشکل احتمالی به هماهنگ کردن ورژن ها در قسمت های بعد میپردازیم). 3) در این مرحله به دانلود آخرین کتابخانه مربوط میپردازیم که در همان قسمت Manage NuGet Packages… میباشد و به عبارت sqlite-net را جستجو کرده و شروع به دانلود کرده و به پروژه اضافه کرده.بعد از نصب این فایل به پروژه شما دو کلاس سی شارپ با نام های SQLite.cs و SQLiteAsynce.cs اضافه میشود. خب تا اینجا تمام فایل های مورد نظر دانلود شده است. حالا میرسیم به هماهنگ کردن ورژن های کتابخانه هایی که در قسمت اول و دوم دانلود کرده که کاری بسیار سخت میباشد پس لطفا این مراحل را با دقت انجام دهید وگرنه مجبور به دوباره دانلود کرده کتابخانه های مراحل اول و دوم میشوید.! قبل از اینکه به هماهنک کردن برسیم ابتدا در پروژه خود کلیک راست کرده و گزینه Add و سپس گزینه Refrence… را انتخاب کرده تا به صفحه مربوط وارد شده و مطابق عکس ورژن کتابخانه دانلود شده در قسمت اول و موجود را مشاهده کنید ولی آنرا اضافه نکنید.! حالا برای هماهنگ کردن ورژن ها ابتدا به مسیر زیر در سیستم خود رفته : C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\ExtensionSDKs\SQLite.WP80 در این فایل یک یا ممکن است چن فایل وجود داشته باشد با ورژن های مختلف و حتما یکی از آن فایل های موجود با ورژنی که در ویژوال دیدیم ( یعنی همون کتابخانه دانلود شده قسمت اول که سه خط بالاتر دیدیم) وجود دارد و آنرا با تغییر نام به ورژنی که کتابخانه دانلود شده قسمت دوم دارد عملیات هماهنگ کردن را انجام میدهیم. که این عکس بعد تغییر نام هستش که بر روی سیستم من هستش ورژن کتابخانه قسمت دوم دانلود شده من 3.8.5 بودش. به همین راحتی تغییر ورژن را انجام میدهیم !!! حالا ویژوال رو بسته و دوباره اجرا کرده تا تغییرات اعمال شود. حالا دوباره روی پروژه کلیک راست کرده و گزینه Add و سپس گزینه Refrence… را انتخاب کرده و مطابق عکس کتابخانه مورد نظر را تیک دار کرده و به پروژه اضافه کرده. همانطور که میبینم شماره ورژن آن هم به شماره ورژن دلخواه ما تغییر کرد. سپس برروی پروژه کلیک راست کرده و گزینه آخر که همان properties هستش را انتخاب کرده و قسمت Build و در کادر مشخص شده در عکس عبارت USE_WP8_NATIVE_SQLITE را وارد کرده و درنهایت باید عبارت موجود در کادر مشخص همانند عبارت زیر باشد : SILVERLIGHT;WINDOWS_PHONE;USE_WP8_NATIVE_SQLITE که همانطور میبینم قسمت اضافه شده ما هم موجود هستش به اضافه متنی که از قبل وجود داشت و ما آنرا تغییری نمیدهیم. حالا به احتمال خیلی قوی کامپایلر به پروژه شما ارور هایی وارد کرده که مسئله مهمی نیستش و دو راه برای حل این ارور را به شما پیشنهاد میدهم. راه حل اول :احتمال خیلی الان به پروژه شما ارور هایی وارد شده که مربوط به کتابخانه های اضافه شده هستش برای رفع این ارور میتوان با تغییر Any CPU به ARM که در عکس مشخص هستش میتوان این ارور را رفع کردش ولی باز هم مشکل وجود دارد و مشکل این است که شما نمی توانید پروژه را روی شبیه ساز اجرا کرده و حتما نیاز به دستگاه فیزیکی هستش. برای حل این مشکل راه حل دوم را پیشنهاد کرده. راه حل دوم : همانطور که گفته شدش راه حل اول اصلا خوب نیستش و پیشنهاد نمیشود.برای اینکه پروژه را هم روی شبیه ساز و هم روی دستگاه فیزیکی اجرا بشه ابتدا روی پروژه کیک راست کرده و گزینه آخر یا همون Properties رو انتخاب کرده و گزینه Build را انتخاب کرده عبارت موجود در کادری که در قسمت قبلی متنی را اضافه کرده ، همه ی متن موجود در اون کادر را کپی کرده یعنی متن : SILVERLIGHT;WINDOWS_PHONE;USE_WP8_NATIVE_SQLITE و گزینه platform را به All Platforms تغییر داده و متن کپی شده را در کادر وارد کرده.تا مطابق عکس شود.تا تغییرات را سیو کرده با زدن ctrl + s . و سپس حالا مقدار Any Cpu رابه x86 تغییر داده (همان کاری که در روش اول انجام دادید و برروی ARM تنظیم کرده اید اینبار برروی x86 تنظیم کنید). حالا پروژه رو بیلد بگیرید بدون هیچ اروری بیلد میشود.( اگه یه اخطار بودش اونو برید روی false ست کنید تموم بشه بره اون اخطار هم چیز خاصی نیستش) و در نهایت باید قسمت solution Explorer باید به شکل زیر باشد: خب تا اینجا که انجام دادیم پیش زمینه بودش حالا میریم سراغ ساخت دیتابیس و اعمال حرکت های آکروباتیک روی آن! قبل از اینکه وارد این قسمت بشیم یه نکته بگم که میدونم میدونید ولی بگم من هم : ( دیتابیس SQLite از رابطه بین ستون ها و جدول ها پشتیبانی نمیکنه ساده ترش اینه کلید خارجی نداره اگه هم داشته باشه بدون کاربرد هستش تا این لحظه که این متن رو دارم مینویسم و تنها کلید اصلی دارد) اینم از شمای جدول و دیتابیس ما که قراره کار کنیم باهاش : ما در اینجا برای ساخت جدول مورد نظر یک نمونه کلاس با نام Person.cs ساخته که نام جدول ما هم همان Person قرار میگیرد که در این کلاس ویژگی های مورد نظر را مشخص میکنیم. کلاس ما به شکل زیر در می آید ( مراحل ساخت کلاس رو دیگه نمیگم براتون به من چه !!! :-) ) namespace Sqlite_Test { public class Person { [SQLite.PrimaryKey,SQLite.AutoIncrement] public int id { set; get; } public string firstname { set; get; } public string lastname { set; get; } public string phonenumber { set; get; } public override string ToString() { return string.Format("id = {0}\tFirstName = {1}\tLastName = {2}\tPhoneNumber = {3}\n", id,firstname,lastname,phonenumber); } public Person() { id = -1; firstname = ""; lastname = ""; phonenumber = ""; } } } حالا وارد فایل App.xaml.cs شده و این دو تابع را نوشته ( این تابع ها برای ساخت دیتابیس و جدول مورد نظر هستش) و در تابع Application_Launching اجرا کرده که در نهایت به شکل زیر در می آید : private async Task<bool> checkFileExists(string fileName) { try { var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName); return true; } catch { return false; } } public async Task<bool> onCreate(string fileName) { try { if (!checkFileExists(fileName).Result) { using (var database = new SQLite.SQLiteConnection(fileName)) { database.CreateTable<Person>(); } } return true; } catch { return false; } } private string DB_PATH = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, "People.sqlite")); // name database private async void Application_Launching(object sender, LaunchingEventArgs e) { await onCreate(DB_PATH); } که ما یک دیتابیس با نام People.sqlite میسازیم. خب حالا میریم بعد از اولین اجرا برنامه روی شبیه ساز یا دستگاه فیزیکی دیتابیس ما ساخته میشود . حالا میریم سراغ کار با دستورات SQL برای انجام اعمال CRUD روی دیتابیس ساخته شده ما :-) برای اینکار یک کلاس به نام SQLiteHandling ساخته و تمام تابع های مورد نظر را داخل آن کلاس نوشته که به شکل زیر در می آید که از بعضی هاشون استفاده میشه داخل کدهای این پروژه و وجود بقیه به خاطر آشنایی بیشتر شما قرار گرفته است. using System.Collections.Generic; using System.IO; using System.Linq; using Windows.Storage; namespace Sqlite_Test { public static class SQLiteHandling { private static string DB_PATH = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, "People.sqlite")); // name database public static void addNewPerson(Person inputData) { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { database.RunInTransaction(() => { database.Insert(inputData); }); } } public static void updateExistsPerson(int id,Person inputData) { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { var existingconact = database.Query<Person>("select * from Person where Id =" + id).FirstOrDefault(); if (existingconact == null) return; existingconact.firstname = inputData.firstname; existingconact.lastname = inputData.lastname; existingconact.phonenumber = inputData.phonenumber; database.RunInTransaction(() => { database.Update(existingconact); }); } } public static void deleteExistsPerson(int id) { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { var existingconact = database.Query<Person>("select * from Person where Id =" + id).FirstOrDefault(); if (existingconact == null) return; database.RunInTransaction(() => { database.Delete(existingconact); }); } } public static void deleteAllPersons() { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { database.DropTable<Person>(); database.CreateTable<Person>(); database.Dispose(); database.Close(); } } public static List<Person> readAllPersons() { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { List<Person> myCollection = database.Query<Person>("select * from Person").ToList<Person>(); List<Person> PersonsList = new List<Person>(myCollection); return PersonsList; } } public static Person searchPersonWithID(int id) { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { Person person = database.Query<Person>("select * from Person where id = " + id).FirstOrDefault(); return person; } } public static Person searchPersonWithFirstName(string name) { using (var database = new SQLite.SQLiteConnection(DB_PATH)) { Person person = database.Query<Person>("select * from Person where firstname = '" + name + "'").FirstOrDefault(); return person; } } } } سپس صفحه اول برنامه یا همان MainPage را برای اضافه کردن و ویرایش و حذف قرار میدهیم و سپس صفحه ای برای خواندن درست میکنیم با نام ReadPage. کد گرافیکی صفحه اول به صورت زیر در می آید که به صورت این هستش که برای آپدیت و حذف فقط از طزیق id میتوان اینکار را انجام دادش و نه فیلد های دیگر و تکست باکس اول برای سرچ id هستش و بقیه تکست باکس ها به تربیت برای اسم کوچک و فامیل و شماره تلفن و بقیه گزینه های موجود مشخص هستش. و نیازی به توضیح بییشتر ندارد. <phone:PhoneApplicationPage x:Class="Sqlite_Test.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="100"/> <RowDefinition/> <RowDefinition Height="200"/> </Grid.RowDefinitions> <RadioButton Name="rdbInsert" GroupName="hessam" Content="Insert" Grid.Row="0" HorizontalAlignment="Left" Checked="rdbInsert_Checked"/> <RadioButton Name="rdbUpdate" GroupName="hessam" Content="Update" Grid.Row="0" HorizontalAlignment="Center" Checked="rdbUpdate_Checked"/> <RadioButton Name="rdbDelete" GroupName="hessam" Content="Delete" Grid.Row="0" HorizontalAlignment="Right" Checked="rdbDelete_Checked"/> <Grid Grid.Row="1"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="3*"/> </Grid.RowDefinitions> <TextBox Name="txtSearchID" Height="100" IsEnabled="False"/> <TextBox x:Name="txtfirstName" Grid.Row="1" Height="100" VerticalAlignment="Top"/> <TextBox x:Name="txtlastName" Grid.Row="1" Height="100" VerticalAlignment="Center"/> <TextBox x:Name="txtphoneNumber" Grid.Row="1" Height="100" VerticalAlignment="Bottom"/> </Grid> <Button x:Name="btnInsert" Grid.Row="2" HorizontalAlignment="Left" Width="160" Height="100" Content="Insert" Click="btnInsert_Click"/> <Button x:Name="btnUpdate" Grid.Row="2" HorizontalAlignment="Center" Width="160" Height="100" Content="Update" IsEnabled="False" Click="btnUpdate_Click"/> <Button x:Name="btnDelete" Grid.Row="2" HorizontalAlignment="Right" Width="160" Height="100" Content="Delete" IsEnabled="False" Click="btnDelete_Click"/> </Grid> </phone:PhoneApplicationPage> سپس کد های مربوط به این صفحه هم به شکل زیر در می آید : using System; using System.Collections.Generic; using System.Windows; using Microsoft.Phone.Controls; namespace Sqlite_Test { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } private void rdbInsert_Checked(object sender, RoutedEventArgs e) { txtSearchID.IsEnabled = false; btnInsert.IsEnabled = true; btnDelete.IsEnabled = false; btnUpdate.IsEnabled = false; } private void rdbUpdate_Checked(object sender, RoutedEventArgs e) { txtSearchID.IsEnabled = true; btnInsert.IsEnabled = false; btnDelete.IsEnabled = false; btnUpdate.IsEnabled = true; } private void rdbDelete_Checked(object sender, RoutedEventArgs e) { txtSearchID.IsEnabled = true; btnInsert.IsEnabled = false; btnDelete.IsEnabled = true; btnUpdate.IsEnabled = false; } private void btnInsert_Click(object sender, RoutedEventArgs e) { Person person = new Person(); person.firstname = txtfirstName.Text; person.lastname = txtlastName.Text; person.phonenumber = txtphoneNumber.Text; SQLiteHandling.addNewPerson(person); List<Person> list = SQLiteHandling.readAllPersons(); foreach (Person p in list) { System.Diagnostics.Debug.WriteLine(p.ToString()); } } private void btnUpdate_Click(object sender, RoutedEventArgs e) { Person person = new Person(); person.firstname = txtfirstName.Text; person.lastname = txtlastName.Text; person.phonenumber = txtphoneNumber.Text; SQLiteHandling.updateExistsPerson(Convert.ToInt32(txtSearchID.Text),person); List<Person> list = SQLiteHandling.readAllPersons(); foreach (Person p in list) { System.Diagnostics.Debug.WriteLine(p.ToString()); } } private void btnDelete_Click(object sender, RoutedEventArgs e) { SQLiteHandling.deleteExistsPerson(Convert.ToInt32(txtSearchID.Text)); List<Person> list = SQLiteHandling.readAllPersons(); foreach (Person p in list) { System.Diagnostics.Debug.WriteLine(p.ToString()); } } } } و کد های گرافیکی مربوط به صفحه ReadPage به شکل زیر میباشد که کاملا مشخص هستش و نیازی به توضیج بیشتر نمیباشد : <phone:PhoneApplicationPage x:Class="Sqlite_Test.ReadPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="100"/> <RowDefinition/> <RowDefinition Height="200"/> </Grid.RowDefinitions> <RadioButton Name="rdbShowAll" GroupName="hessam" Content="showAll" Grid.Row="0" HorizontalAlignment="Left" Checked="rdbShowAll_Checked"/> <RadioButton Name="rdbSearchID" GroupName="hessam" Content="search ID" Grid.Row="0" HorizontalAlignment="Center" Checked="rdbSearchID_Checked"/> <RadioButton Name="rdbSearchName" GroupName="hessam" Content="search name" Grid.Row="0" FontSize="18" HorizontalAlignment="Right" Checked="rdbSearchName_Checked"/> <Grid Grid.Row="1"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="3*"/> </Grid.RowDefinitions> <TextBox Name="txtSearchID" Height="100" IsEnabled="False"/> <RichTextBox x:Name="rtxShow" Grid.Row="1" VerticalContentAlignment="Top" Background="White" Foreground="Black"/> </Grid> <Button x:Name="btnShowAll" Grid.Row="2" HorizontalAlignment="Left" Width="160" Height="100" Content="show all" Click="btnShowAll_Click"/> <Button x:Name="btnSearchID" Grid.Row="2" HorizontalAlignment="Center" Width="160" Height="100" Content="search id" IsEnabled="False" Click="btnSearchID_Click"/> <Button x:Name="btnsearchname" Grid.Row="2" HorizontalAlignment="Right" Width="160" Height="100" FontSize="18" Content="search name" IsEnabled="False" Click="btnsearchname_Click"/> </Grid> </phone:PhoneApplicationPage> و در نهایت کد های مربوط به این صفحه گرافیکی هم به شکل زیر میباشد: using System; using System.Collections.Generic; using System.Windows; using Microsoft.Phone.Controls; using System.Windows.Documents; namespace Sqlite_Test { public partial class ReadPage : PhoneApplicationPage { public ReadPage() { InitializeComponent(); } private void rdbShowAll_Checked(object sender, RoutedEventArgs e) { txtSearchID.IsEnabled = false; btnShowAll.IsEnabled = true; btnSearchID.IsEnabled = false; btnsearchname.IsEnabled = false; } private void rdbSearchID_Checked(object sender, RoutedEventArgs e) { txtSearchID.IsEnabled = true; btnShowAll.IsEnabled = false; btnSearchID.IsEnabled = true; btnsearchname.IsEnabled = false; } private void rdbSearchName_Checked(object sender, RoutedEventArgs e) { txtSearchID.IsEnabled = true; btnShowAll.IsEnabled = false; btnSearchID.IsEnabled = false; btnsearchname.IsEnabled = true; } private void btnShowAll_Click(object sender, RoutedEventArgs e) { rtxShow.SelectAll(); rtxShow.Selection.Text = ""; List<Person> list = SQLiteHandling.readAllPersons(); Paragraph p = new Paragraph(); foreach (Person p1 in list) { p.Inlines.Add(p1.ToString()); } // end foreach rtxShow.Blocks.Add(p); } private void btnSearchID_Click(object sender, RoutedEventArgs e) { rtxShow.SelectAll(); rtxShow.Selection.Text = ""; Person person = SQLiteHandling.searchPersonWithID(Convert.ToInt32(txtSearchID.Text)); Paragraph p = new Paragraph(); if (person == null) p.Inlines.Add("No Exists!"); else p.Inlines.Add(person.ToString()); rtxShow.Blocks.Add(p); } private void btnsearchname_Click(object sender, RoutedEventArgs e) { rtxShow.SelectAll(); rtxShow.Selection.Text = ""; Person person = SQLiteHandling.searchPersonWithFirstName(txtSearchID.Text); Paragraph p = new Paragraph(); if (person == null) p.Inlines.Add("No Exists!"); else p.Inlines.Add(person.ToString()); rtxShow.Blocks.Add(p); } } } خب کار ما با برنامه دیگه تموم شدش حالا اگه بخواهیم دیتابیس برنامه رو مشاهده کنیم یعنی خازج از محیط گوشی یا شبیه ساز اول از همه لازمه برنامه ای داشته باشیم که برای دیتابیس های SQLite باشد و بتواند دیتابیس ها کار کند برنامه ای که خود بنده استفاده میکنم و خیلی هم ساده و کم حجم هستش برنامه Navicat SQLite هستش که میتوانید ازینجا دانلود کنید : دانلود برنامه Navicat for SQLite حالا کار بعدی که لازم هستش انجام دهیم این است که بتوانیم فایل های درون برنامه ساخته شده خود را مشاهده کرده و دیتابیس را انتخاب کرده برای این کار هم دو روش رایج هستش که بازم خودم روش دوم هستش و فقط اون روش رو میگم ولی برای آشنایی بیشتر روش اول را نامی ازش میبریم روش اول با استفاده از نرم افزار ISETool.exe هستش که در سیستم شما نصب هستش و در آدرس زیر میباشد : C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\IsolatedStorageExplorerTool که روش استفاده از آن را میتوانید سرچ کنید و انجام بدهید ( روش سختیه !!) روش دوم که خیلی سادست و راحت ابتدا برنامه کم حجم زیر رو دانلود کنید : دانلود برنامه WindowsPhonePowerTools.zip حالا برنامه رو اجرا کنید تا صفحه ای برای شما به نمایش در بیاید دراین صفحه مشخص میکنید به چه دستگاهی وصل بشود من خودم از شبیه ساز اول که انتخاب شده است استفاده کردم پس همونو را انتخاب میکنم شما بسته به شبیه ساز نوع انتخابی خودتون یا دستگاه فیزیکی گزینه مورد نظر را انتخاب کنید و connect زا زده و سپس به قسمت Isolated Storage رفته و برنامه مورد نظر را انتخاب کرده (همانطور که میبینید اسم برنامه ها نیستش و فقط کد برنامه هستش اگه چند برنامه برروی شبیه ساز یا دستگاه نصب کردید و نمیدونید برنامه شما کودوم هستش فایل WMAppManifest.xml را باز کرده و در آنجا تب چهارم یا Packaging را انتخاب کرده و Product ID برنامه خودتون رو مشاهده کنید با Publisher ID اشتباه نگیرد) و گزینه Get را زده و ازتون یک آدرس میخواد که فایل ها رو کپی کنه براتون که من دسکتاپ رو انتخاب کردم بعد از انتخاب یک پوشه با در محل انتخاب شده به وجود می آید که اسم پوشه همان Product ID هستش داخل اون فایل یک فایل به اسم People.sqlite موجود هستش یعنی همان اسمی که برای دیتایس در برنامه و کد انتخاب کرده ایم ( اسم دیتابیس و نه اسم جدول اشتباه نشه ). حالا برنامه Navicat SQlite را باز کرده و از سمت چپ بالا گزینه Connection را زده و در این صفحه یک اسم برای Connection Name انتخاب کرده که هرچی میتوانید بزارید مهم نیستش و سپس گزینه Existing Database File را انتخاب و آدرس دیتابیس رو بهش میدیم ( محل فایل People.sqlite ) و سپس برای اطمینان از وصل شده میتوانید گزینه Test Connection رازده و بعد گزینه OK را انتخاب کرده . در صفحه حالا Connection Name برای شما و با همان نامی که انتخاب کرده اید به وجود می آید روی آن کلیک کنید و داخل آن شوید سپس مطابق عکس رفته تا به جدول مورد نظر رسیده و اسم جدول هم همان اسمی هستش که انتخاب شده است و همنام کلاس ما یعنی Peson سپس با دابل کلیک میتوانید محتوای موجود در جدول را مشاهده کنید ( یه جدول دیگه هم هستش به اسم sqlite_sequence که ما ایجاد نکرده ایم و خود دیتایس ایجاد کرده و زیاد برای ما مهم نیستش ) خب تمام شدش :-) قسمت اول اموزش که مربوط به ساحت دیتابیس sqlite در ویندوز فون هستش را بررسی کرده ایم در آموزش بعدی مراحل وصل شدن به یک دیتابیس از قبل ساخته شده را بررسی میکنیم . مرسی که تا پایان همراه ما بوده اید.
  11. سلام؛ همونطور که میبینید می خوام فایل db.sqlite رو استریم کنم. فایل وجود داره و اینکه storageFile هم مقدار دریافت می کنه. اما در خط آخر خطا می گیرم. Windows.Storage.StorageFile storageFile = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("db.sqlite"); var accessStream = await storageFile.OpenReadAsync(); Stream stream = accessStream.AsStreamForRead(); خطا:
  12. در آموزش قبلی نحوه ساختن دیتابیس SQLite به همراه اعمال CRUD رو بررسی کردیم که میتوانید برای کسب اطلاع بیشتر به لینک زیر مراجعه کنید : آموزش ساخت دیتابیس SQLite در وین فون در این آموزش قرار هستش نحوه بررسی وصل شدن به دیتابیس ساخت شده را بررسی کنیم ( نه ساختن دیتابیس در وین فون ). این آموزش ادامه آموزش قسمت قبل هستش که برای درک بهتر از این آموزش بهتر هستش ابتدا آموزش قبلی را مشاهده کرده. (در این قسمت کتابخانه های لازم برای استفاده و نحوه دانلود گفته نمیشود پیش نیاز استفاده ازین آموزش مشاهده آموزش قبل هستش ) خب در قسمت قبلی ما تونستیم دیتابیس رو بسازیم و سپس با استفاده از نرم افزار معرفی شده به فایل ها برنامه از جمله دیتابیس ساخته شده دسترسی پیدا کرده و در برنامه Navicat For SQLite مشاهده کرده دیتای آنرا. حالا میخواهیم همان دیتابیس رو به برنامه اضافه کرده و اعمال CRUD رو انجام بدیم . * من به چند دلیل از همان دیتابس ساخته شده استفاده میکنم : 1 - سازگاری کامل تری داره با ویندوز فون 2 - برای هر جدول یک نمونه کلاس دارم 3 - و دلیل آخر که از همه مهمتره این هستش که راحتتر هستم در نتیجه به شما هم پیشنهاد میکنم اگر قراره دیتای شما خارج از برنامه کامل شود ابتدا دیتابیس را در برنامه ساخته با استفاده از آموزش قبلی سپس با استفاده از این آموزش کامل شده دیتابیس خود را به پروژه اضافه کنید. حالا فایل دیتابیس ما با نام People.sqlite که در دسترس داریم به پروژه خود اضافه و یا کپی کرده سپس بر روی آن کلیک راست و سپس گزینه Properties را زده مانند شکل زیر : حالا مقدار none را به Content تغییر داده در قسمت Build Action مانند شکل زیر : خب حالا برای کپی کردن دیتابیس به درون سیستم گوشی وارد فایل App.xaml.cs شده و کد زیر را نوشته و در تابع Application_Lunching فراخوانی کرده مانند کد زیر میشود : private async Task CopyDatabase() { bool isDatabaseExisting = false; try { StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync("People.sqlite"); isDatabaseExisting = true; } catch { isDatabaseExisting = false; } if (!isDatabaseExisting) { StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("People.sqlite"); await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); } } private async void Application_Launching(object sender, LaunchingEventArgs e) { await CopyDatabase(); } دیگه تموم هستش . حالا میتوانید اعمال CRUD را انجام بدهید که برای کسب اطلاع بیشتر از نحوه استفاده میتوانید به آموزش قبلی بروید. خب اینم از قسمت دوم مرسی که تا پایان همراه ما بوده اید .