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

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



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

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

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

نوع محتوا


تالار ها

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

گروه


آدرس تارنما


یاهو


اسکایپ


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


شماره تماس


تلگرام


مکان


علایق


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

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

  1. سلام خسته نباشید . دوستان من چند وقته کار با Asp.Net MVC رو شروع کردم ولی به شدت با دیتابیس مشکل دارم به طوری که همه چی روی پی سی اوکی و بدون مشکل هست زمانی که رو هاست میره پروژه به هیچ عنوان به اسکیوال سرور کانکت نمیشه و تو این چند روز دست کم 150 تا ارور کاملا متفاوت رو شاهد بودم اگه میشه یه آموزش از ساخت یه دیتابیس خیلی مبتدی در همین حد که مثلا یه نام از کاربر بگیره ثبت کنه بزارید تو انجمن از ابتدا تا جایی که پروژه رو روی هاست یا VPS میزارید و کانکشن دیتابیس رو درست کنید . هر چی سرچ کردم و هر چی تست کردم حاصل فقط ارور جدید بود مرسی اه
  2. با سلام و عرض ادب و احترام خدمت شما. امروز با آموزش اولیه ی انتیتی فریمورک کور در خدمت شما هستیم. در این آموزشی شما : با مفاهیم پایه ای 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) آشنا خواهیم شد.
  3. با سلام و آرزوی قبولی طاعات و عبادات، امروز قصد معرفی و آموزش couchbase NoSQL را داریم. در ابتدا سوال که مطرح می شود این است که اصلا دیتابیس NoSQL چیست، کجا استفاده می شود و چرا باید استفاده شود. نو اس کیو ال، یک نوع پایگاه داده ی غیر رابطه ای می باشد که داده ها اغلب به صورت Document هایی حاوی Key:Value ذخیره می شوند. NoSQL ها معمولا بسیار سریع اند، قابلیت ذخیره ی ترابایت ها داده را دارند، به دلیل رابطه ای نبودن بسیار انعطاف پذیر اند و به دلیل اسکیما فورس نبودن بسیار توسعه پذیر (scalable) هستند. نو اس کیو ال نوع جدید و متفاوتی از پایگاه داده می باشد و برای یادگیری صحیح آن نیاز است که کمی از تفکرات بسیار منطقی و اسکیما فورس SQL و رابطه ای دور شویم و به ذخیره ی Json Document ها فکر کنیم. (به شخصه زیاد شده برای کار های خاص آبجکت جیسون سریالایز شده رو ذخیره کنم) نکته ی مهم این است که NoSQLجایگزین برای دیتابیس های رابطه ای نیست! بلکه راه حلی است برای مشکلات، چالش ها و موارد خاص در حوضه ی ذخیره ی دیتا. couchbase چیست؟ کوچ بیس یک دیتابیس NoSQL اوپن سورس با امکانات عالی می باشد. من جمله ی این امکانات می توان به: پشتیبانی از اکثر سیستم عامل ها، زبان های برنامه نویسی و فریمورک های مطرح و پر استفاده، وجود یک زبان شبه SQL برای امر کوئری، سرعت بالا، امکانات مدیریتی ساده و اما غنی، راه حل های بسیار خوب برای multi node cluster و بسیاری دیگر. اما نکته ی بسیار جالب درمورد couchbase (که دلیل این که من رو به خودش جذب کرد، همین بود) پشتیبانی از دستگاه های موبایل(!!!) و وجود سینک گیت وی بود. couchbase server دیتابیس کوچ بیس برای سرور است که برای سیستم عامل های ویندوز، لینوکس و مک ارائه شده. مدیریت این دیتابیس از سه روش 1-کنسول مدیریتی 2-REST API و 3-SDK هایی که برای زبان های برنامه نویسی مختلف ارائه شده (من جمله سی شارپ دات نت) قابل انجام است. couchbase lite یک کتابخانه ی کوچ بیس برای دستگاه های موبایل است! که با آن میتوان داده ها را داخل دیتابیس NoSQL داخل موبایل ذخیره کرد (جایگزین برای SQLite). این کتابخانه از اندروید، آی او اس، ویندوز(وین 32) و زامارین پشتیبانی میکند. (خبر خوب) از نسخه ی 2.0 (که درحال توسعه است) پشتیبانی از ویندوز یونیورسال هم اضافه شده است. نسخه ی 2.0 نسبت به نسخه ی عرضه شده ی فعلی بهبود ها و تغییرات بسیار زیاد و بنیادینی را به خود دیده است. همچنین میتوان داده های آن را با کوچ بیس سرور و سینک گیت وی به وسیله ی ابزار داخل کتابخانه و یا REST API سینک کرد. couchbase sync-gateway یک ابزار تحت وب است که با آن میتوان داده های داخل دیتابیس را با دستگاه های دیگر سینک کرد.الگوریتم سینک بسیار پیاده سازی سختی دارد، اما سینک گیت وی تمام این کار های سخت را برایتان انجام خواهد داد. سینک گیت امکان وی مدیریت یوزر، مدیریت کانفلیکت، مدیریت سینک، آفلاین فرست\آنلاین فرست (ریل تایم) سینک، سینک از طریق REST API ، سینک تحت شبکه (P2P sync) و بسیاری دیگر را به شما خواهد داد. کوچ بیس لایت در عمل: در این_لینک میتوانید داکیومنت های بیشتری را در مورد پیاده سازی کوچ بیس پیدا کنید. گرچه در روز های آتی، درصورت درخواست، آموزشی های اختصاصی تهیه خواهد شد. موید باشید
  4. با سلام، من یک هاست ویندوز دارم و یک پایگاه داده MS SQL در آن. چطور میتونم از طریق اپلیکیشن UWP به این پایگاه داده دسترسی داشته باشم؟ هر چقدر دنبال پایگاه داده mySQL گشتم نتونستم انجام بدم)
  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. سلام به وین نویسی ها، عصر پاییزیتون بخیر، امیدواریم سر حال باشید. پس از انتشار اولین نسخه از سورنا بعضی از دوستان از طریق تلگرام و ایمیل درخواست آموزش ساخت دیتابیس آنلاین رو دادند و اینکه چطوری میشه به دیتابیس سایتی که دارم متصل بشیم. در این آموزش شما به یک دامنه و یک هاست ویندوزی نیاز دارید. برای شروع شما می توانید از سایت زیر هاست ویندوزی را تهیه نمایید. نکته: هاست باید از MySQL پشتیبانی کند. نکته: شما باید گزینه Microsoft Web Developer Tools را نصب کرده باشید. دانلود کتاب الکترونیک آموزش دانلود پروژه UWP (برنامه) دانلود پروژه سایت (ASP) درون فایل فشرده پروژه سایت، دو تا فولدر وجود داره، برای باز کردن پروژه به پوشه Projects بروید و Win Nevis را انتخاب کنید و راه حل را با ویژوال استودیو باز کنید. چون ما پروژه را به صورت سایت ایجاد کردیم، فقط فایل راه حل درون Visual Studio 2015/Projects قرار میگیرد و تمامی کدها و کلاس هایمان درون پوشه Visual Studio 2015/WebSites قرار میگیرند. منبع: وین نویس
  8. در این آموزش قصد داریم که نحوه ساخت دیتابیس 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 در ویندوز فون هستش را بررسی کرده ایم در آموزش بعدی مراحل وصل شدن به یک دیتابیس از قبل ساخته شده را بررسی میکنیم . مرسی که تا پایان همراه ما بوده اید.
  9. در آموزش قبلی نحوه ساختن دیتابیس 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 را انجام بدهید که برای کسب اطلاع بیشتر از نحوه استفاده میتوانید به آموزش قبلی بروید. خب اینم از قسمت دوم مرسی که تا پایان همراه ما بوده اید .