بایگانی دسته‌ها: NET.

اولین پروژه open source من

تقریبا هیچ توسعه دهنده ی نرم افزاری نمی تونه مدعی بشه که از تجربیات توسعه دهنده های دیگه استفاده نکرده. این بهره مندی از تجربیات می تونه ناشی از خوندن مطالب دیگران باشه، یا استفاده از کد های open source باشه.

پروژه ای که من به صورت open sourcr برای استفاده ی توسعه دهنده ها قرار دادم، با استفاده از asp.net mvc نوشته شده. برای بخش دیتابیس، از NHibernate ORM استفاده کردم، و از کتابخونه های jquery هم استفاده های زیادی تو بخش UI کردم. این پروژه نقص های زیادی داره ولی برای کاربردهای آموزشی و این که توسعه دهنده ها بتونن ایده ازش بگیرن، به نظرم مفید باشه.

اما در مورد این که اصلا پروژه برای چی هست. این پروژه یه سرویس وبلاگ نویسی ساده هست که کاربرا توش عضو میشن و می تونن توش مطالب خودشون رو پست کنن. هر کاربری می تونه category های خودش رو ایجاد کنه. دو تا قالب هم هست که کاربرا از بینش می تونن انتخاب کنن.

واسط کاربری این پروژه رو یاسر حسینی طراحی کرده که بازهم ازش به خاطر همکاری تشکر می کنم.

برای دریافت این پروژه :

https://bitbucket.org/persiandeveloper/blogservice

رسم نمودار در ASP.NET MVC

بابک فخریلو


رسم نمودار تو پروژه های وب هنگامی که می خواید گزارش رو درست کنید از داده ها، لازم میشه. یکی از این مواردی که من تو یکی از پروژه هام به نمودار نیازمند شدم، رسم داده های دریافتی از Google Analytic و نمایش آمار روزانه بازدید از سایت بود. وقتی شروع به جست و جو کردم، به یه کتابخونه وابسته به  Jquery رسیدم که  رایگان و open source، و قابلیت های خیلی زیادی داره. این کتابخونه جاوا اسکریپت  jqplot هست، و هماهنگی خوبی هم با محصولات مایکروسافت داره و حتی کنترل هایی هم برای ASP.NET web form. اما برای استفاده از اون در ASP.NET MVC، از اونجایی که خوشبختانه!! (بله خوشبتانه!) خبری از کنترل های سفارشی نیست، باید به طور مستقیم خودتون دست به کار بشید و نمودار هاتون رو رسم کنید.

jqplot-sample

 

تو مثالی که برای کار کردن با jqplot برای شما آماده کردم، ما داده هایی متشکل از تاریخ و یک عدد برای هر تاریخ (که مثلا میتونه نشون دهنده ی آمار بازدید از سایت برای اون تاریخ باشه) رو برای ساختار داده انتخاب می کنیم:

    public class DailyHit
    {
        public String DayDate { get; set; }
        public int Hits { get; set; }
    }

فرض ما بر این که namespace برنامه ی شما Yourname و کلاسی که تعریف کردیم تو پوشه ی Models قرار گرفته. حالا نوبت به تعریف Action می رسه:

   public ActionResult GetDailyReport()
   {
            //GetReport method return list of daily reports in form of IEnumerable
            var result = _VisitiReportService.GetReport();

            return View(result);
    }

ما در اینجا فرض می کنیم که شما سرویسی برای دریافت گزارش های بازدید روزانه دارید (می تونید خودتون مکانیسیمی برای ثبت بازدید ها داشته باشید و از دیتابیس خودتون داده ها رو بخونید، یا متصل بشید به یه سرویس دیگه مثل Google Analytic و داده ها رو از اونجا استخراج کنید) که داده ها رو در قالب فهرستی از DailyHit ها بر می گردونه. این داده ها رو در قالب مدل، به View مربوط به خودش ارسال می کنیم. این هم از View :

   @model IEnumerable<YourNameSpace.Models.DailyHit>

    <script src="@Url.Content("~/Scripts/jquery-1.8.3.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.jqplot.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.highlighter.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.cursor.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.dateAxisRenderer.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.json2.min.js")" type="text/javascript"></script>

    <link href="@Url.Content("~/Content/jquery.jqplot.min.css")" rel="stylesheet" type="text/css" >

	<script type="text/javascript">
     $(document).ready(function () {

    var plot1 = $.jqplot('reportChart', [chartline1], {
      title:'Report',
      legend: 
      { show: true, placement: 'outside',location:'ne',marginTop: '30px',showLabels: true },
      axes:{
        xaxis:{
          renderer:$.jqplot.DateAxisRenderer,
          tickOptions:{
            formatString:'%b %#d'
          } 
        },
        yaxis:{
          tickOptions:{
            formatString:'%d'
            },
            min:0
        }
      },
      highlighter: {
        show: true,
        sizeAdjust: 7.5
      },
      cursor: {
        show: false
      }
  });

 });
  </script>

  <div id="reportChart" style="width: 600px; height: 400px; position: relative;">
  </div>

اول از همه باید کتابخونه Jquery رو به صفحه اضافه کرده باشید. ما فرض بر این گذاشتیم که شما از  layout (یا همون Site.master تو aspx) استفاده نکردید و View رو دارید به طور مستقل و بدون داشتن قالب کلی نمایش می دید، پس به طور صریح اشاره کردیم به Jquery. بعد برای این که بتونیم از Jqplot استفاده کنیم، باید اول از همه به اسکریپت jqplot.min.js ارجاع بدیم. از اونجایی که می خوایم کاربر با رفتن روی خطوط نمودار، مقادیر ببینه نیاز داریم که highlighter هم اضافه کنیم. ارجاع به cursor برای این که با ورود موس به منطقه ی نمودار، شکلش تغییر کنه ما تو اینجا ازش استفاده ای نداریم. dateAxisRenderer به طور خاص برای  نمایش نمودارهایی هست که توش بخشی از داده، از نوع تاریخ (Date) هست. و در نهایت از اونجایی که داده ها در قالب json تحویل لود کننده ی نمودار داده میشن، باید از json2.min هم استفاده کنیم.

و اخر سر هم یک ارجاع به فایل قالب jqplot نیاز داریم.

اما script که برای لود کردن نمودار تعریف کردیم. تو اولین خط، یعنی

	var chartline1=@Html.GetStrippedJson(Json.Encode(Model));

ما از دو Helper استفاده می کنیم، یکی Json.Encode که جزو Helper های خود MVC هست و یک شی رو تبدیل می کنه به رشته ی JSON. اما از اونجایی که تو Jqplot، نباید نام property ها تو رشته ی json وجود داشته باشه، ما ناچاریم که اونا رو اصطلاحا Strip کنیم. برای این کار قطعا کتابخونه ای  مثل Newtoon.Json خیلی مفید تره که قابلیت های زیادی داره ولی من خودم یک Helper نوشتم که این کار رو برای ما انجام بده:

	public static MvcHtmlString GetStrippedJson(this HtmlHelper helper, string json)
        {
            json = json.Replace("\"DayDate\":", string.Empty);

            json = json.Replace("\"Hits\":", string.Empty);

            json = json.Replace('}', ']');

            json = json.Replace('{', '[');

            return MvcHtmlString.Create(json);
        }

تو کد بالا، هر جا که DayDate و Hits رو ببینه، جاش رشته ی خالی میذاره و به جای } و { هم، [ و ]  رو قرار میده تا تبدیل بشه به رشته ی استاندارد Json.

خوب حالا ما داده هامون رو تو متغیر chartline1 داریم.

نوبت می رسه به رسم نمودار. برای این کار اولین پارامتری که به تابع مربوط به رسم، یعنی  jqplot می فرستیم، محل رسم نمودار تو صفحه است. این محل باید تگ div باشه و id اون رو می فرستیم به عنوان پارامتر اول تابع رسم نمودار.  بعد نوبت می رسه به داده هامون، که ما از قبل تو chartline1 ذخیره کردیم شون. پارامترهای بعدی شامل عنوان نمودار، نمایش برچسب خطوط نمودار در کنار اون، تنظیم محور افقی و عمودی میشه. مثلا تو تنظیم محور افقی (xaxis) ما داریم به نمودار میگیم که باید از نوع تاریخ باشه و فرمت نمایش اون رو هم  براش تعیین می کنیم، تا فاصله ی بین هر نقطه از داد ها روی نمودار افقی رو تعیین کنیم. برای نمودار عمودی، که قراره تعداد بازدید های روز رو نشون بده، قالب نمایش رو مقدار عددی (D – به معنای digit) می گذاریم، و مشخص می کنیم که کمترین مقدار نمودار در محور عمودی باید صفر باشه.

پارامتر بعدی، مربوط به highlighter هست که به نمودار میگه با رفتن کاربر به هر کدوم از محل های تقاطع روز/تعداد بازدید، تعداد بازدید رو به همراه تاریخ اون روز، نمایش بده و اون نقطه رو هم highlight کن.

خوب، منتظر چی هستید! برید امتحان کنید دیگه

پیروز باشید

اجرای کد در بازه های زمانی مشخص در C#

مطلب که امروز در نظر گرفتم، در حقیقت راه حل مشکل خود من تو دوتا مساله بود. اول اجرا شدن یه کد، در بازه های زمانی مشخص، یعنی مثلا خوندن چندتا رکورد تازه بروز شده از دیتابیس و نشون دادنش به کاربر، دومی راه حل ping کردن یه سرور یا یه مقصد تو شبکه. Ping کردن که با ارسال بسته های ICMP انجام میگیره، در حقیقت به شما میگه که سرور یا مقصد مورد نظرتون تو  شبکه ی مشخص، که قطعا IP Address داره، اماده پاسخ گویی به شما هست یا نه. به نظرم شما حتما این کار رو قبلا از طریق Command line سیستم عامل انجام داده باشید. یه همچین شکلی داره معمولا:

بابک فخریلو

فرض کنید برنامه ای را نیاز دارید که بخواهد به طور مداوم شبکه را مورد بررسی قرار دهد، یا برنامه ای که بخواهد مثلا هر هشت ساعت  به طور خودکار یک گزارش برای تحلیل گران تجاری تولید کند. با استفاده از زبان C#، پیاده سازی چنین نیاز نرم افزاری وجود دارد. در این مطلب به استفاده از کلاس  System.Timers.Timer می پردازیم که راه حل مشکل ماست.

یک سناریوی ساده

فرض کنید سروری داریم که به درخواست های  ICMP که از کامپیوترهای درون شبکه فرستاده می شود پاسخ می دهد (بیرون یا درونش اینجا فرقی نمی کنه، وارد مباحث تخصصی شبکه نکنید منو!). حالا می خواهیم برنامه ای بنویسیم که توانایی سرور را در پاسخ به درخواست های ICMP، بسنجیم.

یک برنامه با C# خواهیم نوشت که بسته های ICMP را هر پنج دقیقه یک بار به سرور ارسال می کند. سپس پاسخ های دریافتی را هم در یک فایل txt ساده ذخیره یا به عبارتی log خواهید کرد.

Read the rest of this entry

RavenDB

و نوشتن را مرضی است. اصلا این صفحه ی RavenDB چند روزه تو مرورگرم بازه، هی میخوام بشینم در موردش بنویسم، الان یه دفعه دیدمش دیگه دلم نیومد ننویسم. اصلا هم حوصله ندارما، یعنی دپسرده هم هستم.

در هر صورت، تو مطلب قبلی به دیتابیس های NoSQL اشاره کردم و گفتم که این نوع دیتابیس ها، چه تفاوت هایی با دیتابیس های از نوع SQL Server یا Oracle دارن. در انتها هم یکی از دیتابیس های از نوع NoSQL معرفی کردم به اسم RavenDB که برای محیط دات نت طراحی شده. تو این مطلب، به طور مفصل تری به این دیتابیس می پردازم.

بابک فخریلو

RavenDB یک دیتابیس از نوع Doc-Oriented، تراکنشی (transactional) و متن باز است که برای محیط دات نت طراحی شده، و مدل داده ای را ارائه می کند که برای نیاز های سیستم های که در دنیای واقعیت می بینیم، طراحی شده است. RavenDB به شما این امکان را می  دهد تا برنامه های کاربردی با عملکرد بالا و latency پایین را سریع و کارا طراحی کنید.

همان طور که جز خواص دیتابیس های نوع Doc-Oriented است، داده ها در RavenDB بدون schema و در قالب JSON ذخیره می شوند، و می توان خیلی ساده با استفاده از Linq، یا توابع RESTful (روشی برای دسترسی و دستکاری داده ها که در معماری های SOA استفاده می شود. بیشتر کاربرد آن در وب سرویس ها می باشد.) روی آنها Query دلخواه را به راحتی اجرا کرد. RavenDB در عملکرد درونی خود از Index ها استفاده می کند، که این ایندکس ها یا بر اساس استفاده شما به طور خوکار ایجاد می شوند، یا این که طور صریح و بر اساس نیاز شما ایجاد می گردند.

RavenDB پروژه هایی با گستره ی پروژه های تحت وب را مد نظر دارد، و ویژگی های چون replication و sharding (من به شخصه این ویژگی خیلی برام جالبه) را در خود دارد.

چطور باید از RavenDB استفاده کرد؟

RavenDB یک Server و یک Client دارد. Server مسئول مدیریت فضای ذخیره سازی داده و query ها، و client یک مصرف کننده است که با سرور در تعامل است. راه های به کار بستن RavenDB در پروژه تان محدود به یک روش نیست:

  • به صورت یک سرویس در سیستمی مجهز به سیستم عامل Windows
  • یکپارچه شده با IIS
  • Embedded در برنامه ی شما

وقتی که RavenDB Server را توانستید اجرا کنید و به کارش بندازید، اتصال به آن با استفاده از یک client برای دریافت و ذخیره سازی داده ها خیلی ساده است. جالب اینجاست که RavenDB با کلاس هایی که قبلا در سیستم خود تعریف کرده اید سازگار است، یعنی به راحتی با استفاده از همان کلاس هایی که برای Persistence استفاده می کردید، در اینجا هم می توانید استفاده کنید:

همان طور که متوجه شده اید، RavenDB از الگوی  Unit Of Work استفاده می کند، از این رو تمامی تغییرات که قبلا از فراخوانی session.SaveChnages() در نظر گرفته شده اند، در یک تراکنش رخ می دهند.

Read the rest of this entry

ویژگی های جدید در .NET 4.5

این مقاله برای کسانی است که علاوه بر C# در مورد ویژگی های .NET  پیش زمینه ی فکری دارند. یه بخش هایی اش قابل ترجمه نبود، و من هم بخش های مهم رو ترجمه کردم، توصیه میکنم حتما خود مقاله رو هم بخونید.

بابک فخریلو

این مقاله خلاصه ای از ویژگی های کلیدی و بهبود هایی که در .NET 4.5 مطرح شده را معرفی می کند، از این رو بررسی صرفا کلی روی framework خواهیم داشت.

.NET for Windows Store apps

بخشی از .NET 4.5 برای ایجاد برنامه های ویژه ی Windows Stores است. این بخش، .NET for Windows Store نامیده می شود و می توانید بررسی آن را در Windows Dev Center بخوانید.

Portable Class Libraries

For more information, see Cross-Platform Development with the .NET Framework.

در Visual Studio 2012، قالب پروژه ای  را می بینید به نام Portable Class Library که به شما این امکان را می دهد تا managed assembly هایی را ایجاد کنید که روی بستر های مختلف .NET قابل اجرا باشد. در حقیقت، شما بسترهای مد نظر خود (Windows Phone و .NET For Windows Store) را انتخاب می کنید.Type های قابل استفاده در پروژه شما، به طور خودکار به Type های موجود در بستر ها محدود می شوند. برای اطلاعات بیشتر می توانید Cross-Platform Development with the .NET Framework  را بخوانید.

ویژگی های اصلی و بهبودها

ویژگی ها و بهبود های زیر به CLR افزوده شده اند:

  • امکان کاهش restart شدن سیستم، با شناسایی و بستن برنامه های تحت .NET 4 . اطلاعات بیشتر در این زمینه.
  • پشتیبانی از آرایه هایی با حجمی بیش از 2 گیگابایت رو سیستم های 64 بیتی. این ویژگی را باید در فایل configuration فعال کنید. می توانید <gcAllowVeryLargeObjects> element را برای اطلاعات بیشتر بخوانید.
  • عملکرد بهتر برای سرورها، از طریق background garbage collection. وقتی از  GC در سیستم سروری که .NET 4.5 روی آن نصب است، استفاده می کنید، این ویژگی به طور خودکار فعال می شود. می توانید  Fundamentals of Garbage Collection را برای اطلاعات بیشتر بخوانید.
  • کامپایل JIT در background، که به طور اختیاری برای پردازنده های چند هسته ای فراهم است و می تواند عملکرد برنامه را بهبود بخشد. ProfileOptimization را ببینید.
  • امکان محدود سازی زمان اجرای یک Regular Expression.  Regex.MatchTimeout را ببینید.
  • امکان تعریف فرهنگ (Culture) پیش فرض برای یک application domain. کلاس CultureInfo را ببینید. (این قبلا نبود؟!)
  • پشتیبانی Console از Unicode. کلاس  Console  را ببینید.
  • عملکرد بهتر به هنگام خوانش resources (منظور منابعی چون RAM یا پردازنده نیست، تصاویر، رشته ها و … را شامل می شود) مورد استفاده ی برنامه. Packaging and Deploying Resources in Desktop Apps را بخوانید.
  • بهبود فشرده سازی از نو Zip برای کاهش فایل فشرده شده. System.IO.Compression را ببینید.
  • سپردن فشرده سازی رشته ها به  سیستم عامل، که به هنگام استفاده در Windows 8، Unicode 6.0 را پیاده سازی می کند. در صورت استفاده در بسترهای دیگر، از ویژگی خود .NET برای فشرده سازی رشته استفاده می شود.

Read the rest of this entry

سایتهای مبتنی ASP.Net هدف بعدی مهاجمان

بیش از 200 هزار وب سایت توسط برنامه ASP.Net پایه گذاری شده اند مورد حمله قرار گرفته اند گ؛ به این شیوه که با ارتباط با یک سروری نا مشخص کدهای مخرب را به رایانه ی شخص بازدید کننده فرستاده و با نصب آن رایانه شخص را آلوده می کند؛که این می تواند بزرگترین حمله در نوع خود باشد(ASP.Net -injection).

تا پیش از آن بیشتر حملاتی که به وب سایت های عمومی می شد از نوع حملات نفوذی SQL بود.که در آن مجرمان با استفاده از کد نویسی Java Script که آنرا شیوه ی مناسب  برای توسعه انواع کدهای مخرب می دانند  توانستند با شیوه های مختف به آلوده کردن وب سایتها دست بزنند.طبق تحقیق محققان Armorize که بتازگی منتشر شده است ؛مهاجمان توانسته اند باقرار دادن کد های جاوا – اسکریپت آلوده و مخرب سایتهای ساخته شده با ASP.Net را نیز آلوده کنند.دو نمونه از سایتهای که با این شیوه مورد حمله قرار گرفته اند؛ www2.safetosecurity.rr.nu و www3.strongdefenseiz.in که مهاجمان با کنترل کردن آنها از راه دور یا به اصطلاح «Remote» کردن توانسته اند بد افزارهای خود را به بازدیدکنندگان فراوان دو وب سایت گفته شده ارسال وضربه سنگینی به آنها بزنند.

اگر  یکی از بهره برداری ها درست باشد؛ترتیب و دنباله این حملات برای نصب این بد افزارها از طریق کنترل از راه دور آنقدر ادامه می یابد که پایگاه اصلی کنترل از راه دور جهانی که در آمریکا واقع هست را نیز تحت آسیب جدی  قرار می دهد.براساس تحقیقات Armorize  تا کنون بیش از 180000 وبسایت با این شیوه مورد حمله قرار گرقته اند.

در ابتدای سال جاری  حمله به نام های lizamoon حملاتی رو به وب سایت های مبتنی بر IIS مایکروسافت انجام داده بوداین حملات بیشتر ناشی از ضعف در پیکربندی سایت و لحاظ نکردن نکات امنیتی است.حملات رایج از این دست که اصطلاحا به آنها client-side attacks نیز گفته می شود .بوسیله نصب درایورهای مخرب و پلاگین های مرورگرها همچون فلش،QuickTime و….صورت می گیرد.

منبع خبر

انتشار SDK برای Kinect

بابک فخریلو

مایکروسافت بالاخره SDK* رسمی ابزار Kinect را که برنامه نویسان مدت ها انتظارش را می کشیدند، عرضه کرد.

با وجود این که خود ابزار Kinect سال گذشته برای Xbox 360 عرضه شد، اما از همان زمان هکرهای کنجکاو سعی کرده اند تا به هرشکلی از این ابزار استفاده کنند. مایکروسافت ابتدا نسبت به کارهای هکرها در این مورد تردید داشت، اما بالاخره پذیرفت که واقعا ابتکارهای جالبی از سوی آنها سر زده است.

این SDK به هر کسی که از Visual Studio 2010 استفاده می کند و برنامه هایش را به زبان Visual Basic ، C# یا C++ می نویسد، امکان استفاده از ویژگی های اش را فراهم می سازد.

متاسفانه این انتشار صرفا روی Windows کار می کند، و برای استفاده از آن نیاز به Visual Studio  و XNA framework دارید. البته این خلاف بسیاری از کتابخانه های open source است که اول از همه روی اجرا شدن بر بستر Linux اصرار دارند، و تنها برخی از آنها بعدا نسخه های Windows را هم اضافه می کنند.

مایکروسافت تاکید زیادی دارد که این نسخه صرفا یک نسخه ی آزمایشی (beta) و برای استفاده غیرتجاری است.

برای دریافت این SDK می توانید به سایت Microsoft Research مراجعه کنید. نمونه ها و  شروع کار سریع هم در دسترس قرار گرفته اند.

SDK* : که سرنام Software Development Kit است، بسته ی برنامه نویسی است که یک برنامه نویس را قادر می سازد برای یک platform خاص، برنامه های مورد نظرش را توسعه دهد. نوعا یک SDK شامل یک یا چند API، ابزار های برنامه نویسی و مستندات مربوط به آن SDK است.

برگرفته از:

Official Kinect SDK finally available

NHibernate 2.x Beginner’s Guide

کار کردن با پایگاه داده با استفاده از فناوری هایی که مایکروسافت در Visual Studio و زبان های مرتبط با آن (به ویژه #C) معرفی کرده است، نسبت به گذشته بسیار آسان تر شده. فناوری مانند Linq و entity framework از جمله راه های سریع و آسان برای دسترسی به داده های ذخیره شده در Database هستند. این بار قصد معرفی ابزاری را داریم که متن باز بوده و با اتصال به Visual Studio کار اتصال و بازیابی داده ها از Database را برای شما آسان می کند. این ابزار در شاخه ابزار های ORM قرار دارد، که شما را از طراحی کردن لایه های داده (Data Access Layers) فارغ می سازند. در زیر بیشتر خواهید خواند.

فراخوانی سریع از پایگاه داده برای استفادهی اشیای .NET ، دسترسی موثر به داده های در پروژه ها، استقلال از پایگاه داده، وابسته نبودن به فناوری خاص، عدم نیاز به سپری کردن زمان برای توسعه ی لایه های دسترسی به داده و بسیاری کارهای دیگر، امکاناتی است که NHibernate برای شما فراهم می سازد.

NHibernate یک ORM (object-relational mapper ) متن باز، یا به طور ساده، راهی برای دسترسی به داده های ذخیره شده در پایگاه داده و مرتبط کردن آنها با اشیای .NET است. غالبا زمان زیادی برای طراحی مجدد پایگاه داده جهت بهبود دسترسی به داده و مکانیسم طی می شود. این کتاب با در اختیار قرار دادن همه ی اطلاعات لازم درباره ی بهره وری و بهنیه سازی NHibernate ، سبب می شود تا زمان کمتری را در پروژه ها صرف کنید.

اگر از نوشتن رویه های ذخیره شده(stored procedures ) یا بهره گیری از دستورات SQL خسته شده اید، حتما این کتاب را مطالعه کنید.

دسترسی به پایگاه داده و داده های آن تقریبا بخش بزرگی از هر پروژه است، چه وب سایت باشد چه برنامه ی رومیزی. با استفاده از تکنیک های معرفی شده در این کتاب خیلی راحت با پایگاه داده ی خود کار کنید.

ته نوشت:
رسما بیچاره شدم تا لینک دانلود رو پیدا کنم، به سلامتی همه سایت های آپلود هم رفتن قاطی باقالی های و مورد لطف قرار گرفتن(دسترسی امکان پذیر نمی باشد).

SqLite ADO.NET و #C

بابک فخریلو

چند وقتی بود که با SQLite آشنا شده بودم. مدتی پیش هم کار کردنش رو با .NET تجربه کردم، و دوست داشتم این تجربه روبا دیگران به اشتراک بذارم، خوشبختانه مطلب آموزشی زیر رو تو سایتی دیدم و تصمیم گرفتم که  برای شما ترجمه کنم.

SQLite که به زبان C نوشته شده، موتور پایگاه داده ای درون سازی شده، بی نیاز از سرور، مستقل از سکو(در هر سیستم عاملی قابل اجرا است)، بی نیاز از نصب و تراکنشی است. SQLite نسبتا کوچک است، و حجمی حدود 257 کیلوبایت و یک فایل پایگاه داده ی منفرد دارد.

استفاده از SQLite به جای MS.Access برای برنامه های متوسط و کوچک بهتر است، چرا که مستقل از سکوست و نیازی به نصب برنامه ی Microsoft Office در کامپیوتر کاربر ندارد. و از آنجایی که به هیچ تنظیمی نیاز ندارد، می توانید برنامه را به راحتی در هر جایی استفاده کنید. چقدر راحت. SQLite از تابع سفارشی و trigger هم پشتیبانی می کند. در Ms.Access برای نوشتن تابع سفارشی، باید از محیط VBA استفاده کنید، اما در SQLite، این تابع را به زبان خودتان می نویسید، تا بعدا به طور خودکار به پردازش SQLite مقید شود.

مزیت های SQLite:

1. بی نیاز از نصب

2. بی نیاز از سرور

3. فایل پایگاه داده ای منفرد(یعنی ففقط یک فایل برای پایگاه داده مورد استفاده قرار می گیرد)

4. مستقل از سکو

5. رکورد های با طول متغیر

6.سایز فشرده

7.رایگان

اشکلات SQLite:

  1. در بیشتر موارد اندازه ی پایگاه داده به 2 گیگابایت محدود است
  2. عدم پذیرش کامل SQL92
  3. بسته شدن کل فایل به هنگام نوشتن
  4. نبود مکانیسم caching
  5. مقیاس پذیری کم

در ادامه نحوه ی استفاده از SQLite را با زبان C# به شما نشان خواهم داد. برای دسترسی به SQLite در C#، نیاز به SQLite ADO.NET دارید که می توانید از اینجا یا اینجا دانلود کنید.(هموطنان داخل ایران از لینک دوم استفاده کنید) :

Visual Studio را باز کنید

یک پروژه  Windows Application به زبان C# ایجاد کنید.

فایل های DLL را از sqlite ADO.NET (System.Data.SQLite.dll) وارد پروژه کنید.(Add refrence)

خاصیت “Copy Local” مربوط به System.Data.SQLite.dll را به true تغییر دهید، تا به هنگام کامپایل، کپی شود

سپس پوشه ی جدیدی ایجاد کرده، نام آن را Data بگذارید. این پوشه محل نگهداری فایل پایگاه داده خواهد بود

فایل پایگاه داده را اضافه کرده،و خاصیت  ”Copy To Output Directory” به «Always» تغییر دهید

حالت Design فرم اول (form1) را انتخاب کرده، و یک DataGridView به آن اضافه کنید، ویژگی های آن را طوری تغییر دهید که شبیه شکل زیر شود

روی Form1 کلیک مضاعف کنید تا وارد محیط ویرایشگر کد و رویداد Form1_Load شوید

کد زیر را وارد کنید

private void Form1_Load(object sender, EventArgs e)
{
SQLiteConnection ObjConnection = new SQLiteConnection("Data Source=Data/data.db3;");
SQLiteCommand ObjCommand = new SQLiteCommand("SELECT * FROM PERSON", ObjConnection);
ObjCommand.CommandType = CommandType.Text;
SQLiteDataAdapter ObjDataAdapter = new SQLiteDataAdapter(ObjCommand);
DataSet dataSet = new DataSet();
ObjDataAdapter.Fill(dataSet, "Person");
dataGridView1.DataSource = dataSet.Tables["Person"];
}

فراموش نکنید که کد زیر را حتما به فرم اضافه کنید

using System.Data.SQLite;

با کامپایل کردن و اجرای فایل، شما به پایگاه داده SQLite متصل می شوید. می توانید عملیات درج، بروز رسانی و حذف یا هر نوع پرس و جوی(query) پیچیده را روی پایگاه داده انجام دهید.

برای دانلود کردن این پروژه و فایل پایگاه داده، اینجا کلیک کنید.

منبع:

http://www.ivankristianto.com/software-development/visual-studio-net/howto-use-sqlite-ado-net-with-c/943/