۲۴ مطلب با کلمهی کلیدی «آموزش برنامه نویس» ثبت شده است
احراز هویت بدون پسورد در ASP Identity
بسم الله الرحمن الرحیم
نحوه لاگین کردن یک کاربر بدون داشتن کلمه عبور در ASP Identity
ASP.NET Identity دارای توابع و قابلیت های بسیار زیادی می باشد، یکی از این قابلیت ها اجازه Login کردن بدون داشتن پسورد می باشد.
در تمامی پروژه ها معمولا نیاز است تا مدیر اصلی سیستم بتواند با یک کاربر Login کند، یکی از بهترین روش های ممکن برای انجام اینکار اضافه کردن یک Button در بخش مورد نیاز و اضافه کردن کد زیر برای انجام عملیات احراز هویت و Login کردن بدون دسترسی به پسورد فرد می باشد.
ابتدا یک پراپرتی از ApplicationSignInManager به صورت زیر ایجاد می کنیم تا بتوانم به متدهای ASP.Identity دسترسی داشته باشیم.
private ApplicationSignInManager _signInManager;
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set { _signInManager = value; }
}
ادامه مطلب...
آموزش ASP.NET Identity
بسم الله الرحمن الرحیم
معرفی ASP.NET Identity
در سال 2005 مایکروسافت ASP.NET Membership را معرفی کرد تا نیازهایی که تمامی برنامه نویسان برای احراز هویت و تعیین سطوح دسترسی کاربران داشتند را برطرف نماید.
در ابتدا سیستم ASP.NET Membership بسیاری از نیازهای برنامه نویسان را برطرف می نمود از جمله: ثبت نام، فراموشی کلمه عبور و تعیین گروه کاربر (هر کاربر می توانست در گروهایی همچون، Admin و سایر گروه هایی که شما تعریف می کردید قرار بگیرد) و... در نهایت این سیستم بسیار کمک بزرگی به برنامه نویسان کرد.
اما با گذشت زمان و تغییر و افزایش نیاز برنامه نویسان، سیستم ASP.NET Membership مشخص شد که دیگر پاسخگوی نیاز برنامه نویسان نیست بنابراین مایکروسافت سیستم جدیدی را با نام ASP.NET Identity را معرفی کرد که بسیار قدرتمندتر از سیستم ASP.NET Membership بود و همچنین امکانات جدیدی به آن اضافه شده بود ازجمله احراز هویت بر اساس سرویس های سایر سایتها و شبکه های اجتماعی مانند facebook, Google,.. و احراز هویت بر اساس سیستم های ارسال پیامک و امکانات دیگر که هر یک به نوبه خود جدید و بسیار مفید خواهند بود.
ادامه مطلب...
آموزش Asp.net Identity
بسم الله الرحمن الرحیم
با توجه به درخواست بسیاری از دوستان پس از نوشتن مقاله معرفی ASP.NET Identity، در خصوص نوشتن یک پروژه برای استفاده از Identity ASP.NET به صورت عملی بنده این مقاله را برای شما آماده کردم. انشالله مفید واقع شود.
آموزش Authentication در MVC
آموزش 3 ASP.NET Identity
در آموزش قبلی شما با فرایند کار ASP.NET Identity آشنا شدید در این مقاله شما نحوه خواندن و بررسی اطلاعات کاربر را با استفاده از SQL Server آموزش خواهید دید.
Storing user information in a database
برای ذخیره اطلاعات در دیتابیس به وسیله ASP.NET Identity ما باید Package زیر را نصب کنیم:
Install-Package Microsoft.AspNet.Identity.EntityFramework
این Package برای ارتباط ما با SQL Server است که به وسیله آن می توانیم اطلاعات خود را دردیتابیس ذخیره کنیم و سپس اطلاعات خود را نیز از دیتابیس بخوانیم.
ایجاد کلاس برای نمایش اطلاعات کاربر
ASP.NET Identity به سادگی به شما اجازه می دهد که اطلاعات اضافی را برای کاربر خود ذخیره کنید. شما برای این کار باید از کلاس IdentityUser استفاده کنید و سپس Property های مورد نیاز خود را برای ثبت اطلاعات بیشتر برای هر کاربر تعریف کنید.
در این مثال ما علاوه بر اطلاعات کاربری فیلد country را نیاز داریم به همین دلیل این فیلد را به صورت زیر اضافه می کنیم:
public class AppUser : IdentityUserادامه مطلب...
{
public string Country { get; set; }
}
آموزش Asp.net Identity MVC
بسم الله الرحمن الرحیم
پس از اراائه ASP.NET Identity امکانات جدیدی در اختیار برنامه نویسان قرار گرفت ولی متاسفانه کمی این تکنولوژی کمی گیج کننده است. به همین دلیل سعی کردم یک مثال را برای شما عزیزان در اینجا قرار دهم.
در این مقاله authentication بر اساس cookie را در ASP.NET Identity بررسی خواهیم کرد.
Project Setup
یک Empty ASP.NET MVC web application ایجاد کنید.
• از منوی File گزینه New Project و سپس "ASP.NET Web Application" را انتخاب کنید.
• از پنجره باز شدهASP.NET گزینه "Empty" و در قسمت تنظیمات گزینه MVC را انتخاب کنید.
حال یک پروژه ASP.NET MVC application ایجاد کردید.
ادامه مطلب...
آموزش Windows Forms Events Lifecycle
بسم الله الرحمن الرحیم
در ارتباط با Windows Form کتابها و مقالات زیادی وجود که به وسیله آن می توانید به سادگی راه و روش ایجاد یک برنامه را آموزش ببینید. در اینجا یک آموزش در خصوص ترتیب اجرای Event ها وجود دارد، اگر شما lifecycle فرم را بدانید بهتر می توانید اطلاع پیدا کنید که Event های خود را در کدام بخش بنویسید.
در مورد ASP.NET اطلاعات زیادی در خصوص ترتیب اجرا شدن Event ها وجود دارد اما در مورد Windows Form اطلاعات به سختی بدست خواهد آمد.
در ایجا لیست و ترتیب اجرای Event ها را برای شما قرار داده ام
• Move: این رویداد زمانی اتفاق می افتد که فرم تغییر مکان دهد، اما دهنگام اجرای برنامه هرچند کاربر فرم را تغییر مکاتن نمی دهد ولی این رویداد اجرا می شود.
• Load: این رویداد در اولین بار قبل از نمایش فرم اتفاق می افتد.
• VisibleChanged: این رویداد با تغییر Visible اتفاق می افتد.
• Activated: این رویداد پس از Activated شدن توسط کد یا کاربر اتفاق می افتد.
• Shown:این رویداد زمانی اتفاق می افتد که برای اولین بار فرم نمایش داده شده است.
• Paint: این رویداد در زمانی که فرم ترسیم می شود اتفاق می افتد.
• Deactivate: این رویداد در زمانی که فرم فوکس خود را از سدت یم دهد و یا فعال نیست اجرا می شود
• Closing: این رویداد در زمانی که فرم در حال بسته شدن است اتفاق می افتد.
• Closed: این رویداد در زمانی که فرم در شروع به بسته شدن می کند اتفاق می افتد.
آموزش Code First Data Annotations بخش سوم
بسم الله الرحمن الرحیم
برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.
بخش سوم
Table and Column
اگر شما با Code First دیتابیس خود را ایجاد می کنید، ممکن است بخواهید نام جدول و ستونهای خود را تغییر دهید. شما همچنین می توانید از Code First برای یک دیتابیس که قبلا وجود داشته است استفاده کنید. همیشه این طور نیست که نام جدول ها و ستون ها با نام کلاس ها و پراپرتی ها یکسان باشد.
نام کلاس من Blog بود و بر اساس قرارداد Code First، به صورت پیش فرض این کلاس به یک جدول با نام Blog نگاشت (map) می شود. اگر شما این را نمی خواهید می توانید نام جدول خود را با استفاده از خاصیت Table تغییر دهید.
در اینجا ما برای مثال نام کلاس Blog را برای ایجاد جدول به نام InternalBlogs تغییر داده ایم:
[Table("InternalBlogs")]
public class Blog
Column annotation
Column annotation نیز برای تغییر نام یک پراپرتی به فیلد در دیتابیس مورد استفاده قرار می گیرد. با استفاده از این خاصیت شما می توانید نام، data type و حتی ترتیب نمایش این فیلدها را در یک جدول دیتابیس مشخص کنید.
در این جا یک مثال برای خاصیت Column وجود دارد:
آموزش Code First Data Annotations - بخش دوم
بسم الله الرحمن الرحیم
برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.
بخش دوم
ComplexType
نوع های پیچیده
ممکن است شما یک نوع غیر معمول برای فیلد های خود بخواهید تعریف کنید، این نوع شما ممکن است یک کلاس باشد، مثلا کلاس زیر را در نظر بگیرید:
public class BlogDetailsادامه مطلب...
{
public DateTime? DateCreated { get; set; }
[MaxLength(250)]
public string Description { get; set; }
}
متوقف کردن اجرای دستورات برای مدت زمان 5 ثانیه
بسم الله الرحمن الرحیم
در خصوص متوقف کردن و Sleep کردن برنامه چندین راه متفاوت وجود دارد.
با یک مثال صورت سوال را مشخص و سپس به سراغ پاسخ آن می رویم.
برنامه ای داریم که می خواهیم برای مدت زمان 5 ثانیه متوقف شود و مجددا به کار خود ادامه دهد؟
یکی از ابتدایی ترین راه ها ایجاد یک حلقه for طولانی است که به وسیله آن مدت زمانی را صرف اجرای این دستور کنید!
DateTime start = DateTime.Now;
for (int i = 1; i < 100000; i++)
{
if ((DateTime.Now - start).TotalSeconds >= 5)
break;
Console.WriteLine("This is test no. "+ i+ "\n");
}
راه دوم، بررسی زمان جاری سیستم و ذخیره آن و در نهایت ایجاد یک حلقه تا زمانی است که مدت 5 ثانیه از زمان شروع کار گذشته باشد
DateTime Tthen = DateTime.Now;ادامه مطلب...
do
{
Application.DoEvents();
} while (Tthen.AddSeconds(5) > DateTime.Now);
SendKeys
بسم الله الرحمن الرحیم
در بعضی مواقع شما نیاز دارید که یکی از کامندهای کیبورد را خودتان اجرا کنید، مثلا شما می خواهید پس از بازشدن برنامه یک MessageBox باز شود و پس از آن اگر کاربر بر روی فرم شما کلیک کرد کامند Enter کیبورد شما اجرا شود.
// Clicking Button1 causes a message box to appear.ادامه مطلب...
private void Button1_Click(System.Object sender, System.EventArgs e)
{
MessageBox.Show("Click here!");
}
// Use the SendKeys.Send method to raise the Button1 click event
// and display the message box.
private void Form1_DoubleClick(object sender, System.EventArgs e)
{
// Send the enter key; since the tab stop of Button1 is 0, this
// will trigger the click event.
SendKeys.Send("{ENTER}");
}
T4MVC
بسم الله الرحمن الرحیم
معرفی T4MVC
T4MVC می تواند بر روی نسخه های Visual Studio 2010, 2012 و 2013نصب شود وASP.NET MVC 4.0 و 5.0این Package را پشتیبانی می کنند، شاید بتوانید بر روی سایر نسخه ها از این Package استفاده کنید اما این Package فقط بر روی گزینه های گفته شده تست شده است.
نصب T4MVC
برای نصب این Package کافی است که دستور زیر را از طریق Package Manager Console اجرا کنید
Install-Package T4MVC
پس از اجرای این دستور دو فایل به پروژه شما اضافه می شود.
هدف T4MVC
این Package برای جلوگیری از نوشتن اسامی کنترلر ها و اکشن ها و در نهایت view ها به صورت Hard Code مورد استفاده قرار می گیرد.
برای مثال کدزیر را در نظر بگیرید:
<% Html.RenderPartial("DinnerForm"); %>
ما از عبارت های رشته ای برای فراخوانی این Partial استفاده کرده ایم، اگر فردا شما بخواهید این نام را تغییر دهید باید در بهترین و سریعترین روش ممکن با استفاده از Finde ویژوال استادیو تمامی نام های مربوطه را تغییر دهید.
اما چرا از ابتدا از روش دیگری استفاده نکنیم!
T4MVC در واقع نام تمامی View,Conreoller,Action ها را به صورت خودکار در خود ذخیره می کند و عملا یک Enumeration برای شما به وجود می آورد تا در آینده در صورتی که نامی را برای یک View,Conreoller,Action عوض کردید، این نام در تمامی پروژه عوض شود.
مثال:
<% Html.RenderPartial("DinnerForm"); %>
از این به بعد ما نام ها را به صورت زیر خواهیم نوشت:
<% Html.RenderPartial(MVC.Dinners.Views.DinnerForm); %>ادامه مطلب...
fluent API در Code First
بسم الله الرحمن الرحیم
fluent API
در MVC برای ایجاد روابط بین جداول می توانید از fluent API استفاده کنید، این روش برای کد نویسی و طراحی دیتابیس به روش Code First می باشد:
One-to–Zero-or-One (روابط یک به یک)
modelBuilder.Entity<OfficeAssignment>()
.HasKey(t => t.InstructorID);
به رابطه بالا One-to–Zero گفته می شود زیرا شما فقط کلید اصلی جدول را مشخص کرده اید آن را به هیچ جدول دیگری ارتباط نداده اید.
modelBuilder.Entity<OfficeAssignment>()
.HasRequired(t => t.Instructor)
.WithOptional(t => t.OfficeAssignment);
در این رابطه ما یک رابطه One-to-One ایجاد کرده ایم. در این رابطه سمت OfficeAssignment اختیاری است.
برای اجباری کردن هر دو سمت در یک رابطه یک به یک می توانید به صورت زیر عمل کنید:
modelBuilder.Entity<OfficeAssignment>()ادامه مطلب...
.HasKey(t => t.InstructorID);
modelBuilder.Entity<Instructor>()
.HasRequired(t => t.OfficeAssignment)
.WithRequiredPrincipal(t => t.Instructor);
خطای cycles or multiple cascade paths
بسم الله الرحمن الرحیم
خطای زیرا شاید خیلی از شما دوستان عزیز نیز مشاده کردید:
Introducing FOREIGN KEY constraint 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' on table 'aspnet_UsersInRoles' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors
برای حل این مشکل می توانید از Fluid API استفاده کنید،
در این مثل اگر من کد زیر را به Context خود اضافه کنم مشکل بالا برطرف خواهد شد:
protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
modelBuilder.Entity<aspnet_UsersInRoles>().HasMany(i => i.Users).WithRequired().WillCascadeOnDelete(false);
}
همچنین با استفاده از این کد می توانید تمامی CASCADE DELETES ها را از بین ببرید:
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
اینم مشکل زمانی رخ می دهد که شما در طراحی دیتابیس خود یک چرخه یا Loop ایجاد کرده اید مانند تصویر زیر:
اگر به متن خطای بالا دقت کنید مشاهده خواهید کرد که عبارت may cause cycles or multiple cascade paths قید شده است، همان طور که خدمتتان عرض کردم، اگر در طراحی دیتابیس شما چندین جدول را به صورت بالا طراحی کنید که با یکدگیر در ارتباط باشند و این ارتباط به صورت یک چرخه شود، و سعی کنید بر روی این چرخه CASCADE ایجاد کنید، SQL Server نمی تواند متوجه بشود که چطور فرایند بروز رسانی Update CASCADE یا حذف Delete CASCADE شما را مدیریت کند زیرا هر یک از این جداول بر روی یکدیگر تاثیر می گذارند و در صورتی که فرایند CASCADE آغاز شود نقطه پایانی وجود نخواهد داشت.
Delete CASCADE و Update CASCADE
برای حل این مشکل می توانید به صورت زیر عمل کنید:
1- فرایند CASCADE را غیر فعال کنید (در صورت غیر فعال کردن باید این فرایند را به صورت Manually مدیریت کنید)
2- Relation را حذف کنید (در صورت حذف کردن باید این فرایند را به صورت Manually مدیریت کنید)
طراحی دیتابیس
در چنینی شرایطی معمولا طراح دیتبیس اشتباهی را مرتکب شده است، پس بهتر است از او بخواهید تا دیتابیس خود را مجددا بررسی کنید، زیرا مدیریت کردن راه حل های بالا که قید شد کمی دقت لازم دارد
انشالله در اولین فرصت روش های ایجاد Relation را در MVC معرفی خواهم کرد
استفاده از یک تابع کنترلر در View
بسم الله الرحمن الرحیم
طبیعتا شما تمامی توابع خود را کلاس های Common نمی نویسید و مکن است بخواهید یک تابع ساده را که در Controller نوشته شده است در یک view استفاده کنید. برای استفاده از توابع در View می توانید به صورت زیر عمل کنید:
تابع زیر در کنترلر نوشته شده است:
public int getClientID(string login)
{
var context = new MyEntity(new Uri("host/MyWCF.svc/"));
var userID = from persons in context.PERSON
where persons.LOGIN == login
select persons.USER_ID;
int uID = userID.First();
var cli = from client in context.CLIENT
where client.USER_ID == uID
select client.CLIENT_ID;
int cliID = cli.First();
return cliID;
}
می توان این تابع را به صورت زیر فراخوانی کرد اما با Error مواجه خواهید شد
Client : @{ ((HomeController)(this.ViewContext.Controller)).getClientID(User.Identity.Name); }
خطایی که پس از اجرای این دستور دریافت می کنید به صورت زیر است:
Can only specify query options (orderby, where, take, skip) after last navigation
At line int uID = userID.First();
راه ساده ای که قبلا نیز شما از آن حتما استفاده کرده اید به صورت زیر است:
@Html.Action("Home","getClientID", new {login=User.Identity.Name})
بروز رسانی دیتابیس و خطا One or more validation errors were detected during model generation
بسم الله الرحمن الرحیم
بروز خطای
An exception of type 'System.Data.Entity.ModelConfiguration.ModelValidationException' occurred in EntityFramework.dll but was not handled in user code
Additional information: One or more validation errors were detected during model generation:
یا خطای
One or more validation errors were detected during model generation:
پس از اجرای کد زیر
db.Database.Initialize(true);
برای رفع این خطا کافی است که پایگاه داده خود را با استفاده از دستور
Update-database –force
بروز نمایید.
این خطا به این دلیل است که اگر Migration بخواهد جداول شما را تغییر دهد اطلاعات شما به دلیل حذف شدن فیلد یا فیلدهایی از بین خواهد می رود؛ به همین دلیل این کار را بر عهده خودتان قرار می دهد (سلب مسئولیت )
آموزش Asp.net Identity
بسم الله الرحمن الرحیم
برای شروع کار Visual Studio را باز کنید سپس New-> project را انتخاب کنید و در پنجره باز شده مانند زیر NET framework 4.5 را انتخاب کنید و سپس بر روی گزینه ASP.NET Web Application کلیک کنید.
حال گزینه Emprty را انتخاب کنید و سپس نوع پروژه را از بخش پایین MVC انتخاب نمایید تا پروژه شما ایجاد شود.
حال پروژه شما ایجاد شده است و کافی است در پنجره Package Manager Console دستور زیرا برای ساخت یک پروژه ASP.NET Identity ایجاد کنید.
Install-Package Microsoft.AspNet.Identity.Samples -Pre
مدت زمان زیادی را باید منتظر بمانید زیرا تمامی package های زیر توسط این دستور نصب خواهد شد
bootstrap (≥ 3.0.0)
Microsoft.Aspnet.Identity.Core(≥ 2.1.0-alpha1)
Microsoft.Aspnet.Identity.EntityFramework(≥ 2.1.0-alpha1)
Microsoft.Aspnet.Identity.Owin(≥ 2.1.0-alpha1)
Newtonsoft.Json(≥ 5.0.6)
Microsoft.Aspnet.Mvc(≥ 5.1.1.0)
Microsoft.Aspnet.Web.Optimization(≥ 1.1.3)
jQuery(≥ 1.10.2)
jQuery.Validation(≥ 1.11.1)
Modernizr(≥ 2.6.2)
Microsoft.Owin.Host.SystemWeb(≥ 2.1.0)
Microsoft.Owin.Security(≥ 2.1.0)
Microsoft.Owin.Security.Facebook(≥ 2.1.0)
Microsoft.Owin.Security.Cookies(≥ 2.1.0)
Microsoft.Owin.Security.Google(≥ 2.1.0)
Microsoft.Owin.Security.Twitter(≥ 2.1.0)
Microsoft.Owin.Security.MicrosoftAccount(≥ 2.1.0)
Microsoft.jQuery.Unobtrusive.Validation(≥ 3.1.1)
Respond(≥ 1.2)
اگر خطایی در ارتباط با Timeout در خصوص پایین بودن سرعت اینترنت خود دریافت کردید مجددا دستور بالا را اجرا کنید تا فایلهای دانلود نشده، دانلود شوند، نگران نباشید فایل ها بر روی یکدیگر جایگزین خواهد شد.
حال به سادگی می توانید کد های مایکروسافت را برای استفاده از ASP.NET Identity بررسی کنید و بیشتر با این معماری آشنا شوید.
در بخش دیگر این معماری را به صورت کامل بررسی خواهیم کرد.
Entity Farmework و Code First
بسم الله الرحمن الرحیم
برای طراحی پایگاه داده به وسیله Entity Farmework و Code First بهتر است این چند نکته را رعایت فرمایید:
بهتر است از نام Id به عنوان نام تمامی کلید های اصلی جداول استفاده کنید هر چند در بحث
convention over configuration این نکته مورد قبول است اما چیزی را که همه آن را به عنوان یک قرارداد نانوشته قبول دارند را عوض نکنید تا برای انجام کار توضیحاتی لازم نباشد.
بهتر است از نوع GUID برای کلید های اصلی جداول استفاده کنید. نوع int از لحاظ واکشی اطلاعات سریعتر است زیرا مقایسه عددی سریعتر از مقایسه رشته ای است.
باید در نظر داشته باشید در جداولی مثل شهر، استان، کشور می توانید از نوع int برای کلید اصلی استفاده کنید و هیچ مشکلی نخواهد بود اما بهتر است برای جداول اطلاعاتی که شماره ها بسیار ارزشمند هستند و بهتر است در کل دیتابیس عدد منحصر به فرد باشد از نوع GUID استفاده شود.
بهتر است نام کلیدهای خارجی یک نام از جدول + کلمه ای دی باشد:
مثلا: ProductId
برای تعیین نامی مشخص برای ذخیره property ها در دیتابیس می توانید به صورت زیر عمل کنید:
[Column(“ProductId", TypeName="Guid")]
با توجه به اینکه در MVC به صورت پیش فرض اگر Maxlength برای یک Property String تعیین نشود nvarchar(MAX) در دیتابیس در نظر گرفته می شود، لذا برای تمامی Property مقدار Maxlength را تعریف کنید مگر در شرایطی که نیاز به رشته های طولانی دارید.
با توجه به نحوه ذخیره سازی رشته ها در SQL Server ، اگر یک رشته می تواند در نوع nvarchar(300) ذخیره شود از این نوع استفاده کنید.
با توجه به اینکه در Entity Framework 6 از روی نوع enum فیلد مناسب در دیتابیس ساخته می شود اما بهتر است فیلدهای از نوع enum به صورت int تعریف شوند و شما خودتان نوع بازیابی شده از دیتابیس را به enum تبدیل کنید.
مثلا
Public int CustomerType {get; set;};
در نام گذاری property ها این نکته را در نظر داشته باشید که نباید از کلمات کلیدی (SQL Server,Oracle,…) استفاده کنید
مثلا: [Order]
CodeSnippets
بسم الله الرحمن الرحیم
برای نوشتن سریعتر دستورات سی شارپ می توانید از Snippets Code استفاده کنید برای استفاده از این ویژگی کافی است کلید CTRL را به همراه K فشار دهید و سپس کلید S را نیز بزنید حال لیست دستوراتی را مشاهده می کنید که می توانید آن ها را انتخاب کنید در زیر این لیست قرار داده شده است.
برای نوشتن تمامی دستورات زیر کافی است متن نوشته شده را بنویسید و سپس دو بار کلید TAB را از روی کیبورد فشار دهید
نام دستور |
توضیحات |
if# |
|
region# |
Creates a #region directive and a #endregion directive. |
~ |
Creates a destructor for the containing class. |
attribute |
Creates a declaration for a class that derives from Attribute. |
checked |
Creates a checked block. |
class |
Creates a class declaration. |
ctor |
Creates a constructor for the containing class. |
cw |
Creates a call to WriteLine. |
do |
Creates a do while loop. |
else |
Creates an else block. |
enum |
Creates an enum declaration. |
equals |
Creates a method declaration that overrides the Equals method defined in the Object class. |
exception |
Creates a declaration for a class that derives from an exception (Exception by default). |
for |
Creates a for loop. |
foreach |
Creates a foreach loop. |
forr |
Creates a for loop that decrements the loop variable after each iteration. |
if |
Creates an if block. |
indexer |
Creates an indexer declaration. |
interface |
Creates an interface declaration. |
invoke |
Creates a block that safely invokes an event. |
iterator |
Creates an iterator. |
iterindex |
Creates a "named" iterator and indexer pair by using a nested class. |
lock |
Creates a lock block. |
mbox |
Creates a call to MessageBox.Show. You may have to add a reference to System.Windows.Forms.dll. |
namespace |
Creates a namespace declaration. |
prop |
Creates an auto-implemented property declaration. |
propfull |
Creates a property declaration with get and set accessors. |
propg |
Creates a read-only auto-implemented property with a private "set" accessor. |
sim |
|
struct |
Creates a struct declaration. |
svm |
|
switch |
Creates a switch block. |
try |
Creates a try-catch block. |
tryf |
Creates a try-finally block. |
unchecked |
Creates an unchecked block. |
unsafe |
Creates an unsafe block. |
using |
Creates a using directive. |
while |
Creates a while loop. |
جلوگیری از باز شدن چندین نسخه از نرم افزار
بسم الله الرحمن الرحیم
در بعضی نرم افزار ها شما می بایست اجازه اجرا کردن چندین نسخه از نرم افزار را از کاربر سلب نمایید.
برای اجرا کردن تنها یک نسخه از نرم افزار توسط کاربر می توان به صورت زیر عمل کنید:
فایل program.cs را باز کنید و در آن کد زیر را اضافه کنید
public static Process PriorProcess()
// Returns a System.Diagnostics.Process pointing to
// a pre-existing process with the same name as the
// current one, if any; or null if the current process
// is unique.
{
Process curr = Process.GetCurrentProcess();
Process[] procs = Process.GetProcessesByName(curr.ProcessName);
foreach (Process p in procs)
{
if ((p.Id != curr.Id) &&
(p.MainModule.FileName == curr.MainModule.FileName))
return p;
}
return null;
}
حال متد Main را به صورت زیر عوض کنید:
[STAThread]
static void Main()
{
if (PriorProcess() != null)
{
MessageBox.Show("Another instance of the app is already running.");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());
}
مشخض کردن فایل و فولدرهای تغییر داده شده
بسم الله الرحمن الرحیم
ممکن است در پروژه ی شما، برای چک کردن یک دایرکتوری (Folder) مجبور باشید برنامه ای بنویسید که دائم مسیر مشخصی را برای شما چک کند و در صورتی که فایلی ایجاد/ حذف / ویرایش شد به شما اطلاع داده شود.
اولین راه حل این است که شما شروع کنید در بازهای زمانی مشخص مسیری را که مد نظر دارید چک کنید!
اما کلاس FileSystemWatcher در NET 4.5. این امکان را به شما می دهد که بدون نیاز به چک کردن مداوم یک مسیر، در هر زمانی که فایلی تغییر داده شد شما اطلاع پیدا کنید. مثال
using System;
using System.IO;
using System.Security.Permissions;
public class Watcher
{
public static void Main()
{
Run();
}
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public static void Run()
{
string[] args = System.Environment.GetCommandLineArgs();
// If a directory is not specified, exit program.
if(args.Length != 2)
{
// Display the proper way to call the program.
Console.WriteLine("Usage: Watcher.exe (directory)");
return;
}
// Create a new FileSystemWatcher and set its properties.
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = args[1];
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
// Begin watching.
watcher.EnableRaisingEvents = true;
// Wait for the user to quit the program.
Console.WriteLine("Press \'q\' to quit the sample.");
while(Console.Read()!='q');
}
// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
// Specify what is done when a file is renamed.
Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
}
C# ADO.NET SqlCommand - ExecuteNonQuery
بسم الله الرحمن الرحیم
پاسخ:
برای اجرا کردن و برنامه نویسی دستور Insert و update و Delete در سی شارپ می توانید به صورت زیر عمل کنید
using System;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection cnn ;
SqlCommand cmd ;
string sql = null;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
sql = "insert into table1 ...............";
cnn = new SqlConnection(connetionString);
try
{
cnn.Open();
cmd = new SqlCommand(sql, cnn);
cmd.ExecuteNonQuery();
cmd.Dispose();
cnn.Close();
MessageBox.Show (" ExecuteNonQuery in SqlCommand executed !!");
}
catch (Exception ex)
{
MessageBox.Show("Can not open connection ! ");
}
}
}
}
در صورتی که دستور ExecuteNonQuery بر روی پایگاه داده شما تاثیری بگذارید (رکوردی حذف شود، رکوردی درج شود، رکورد یا رکوردهایی بروز رسانی شوند) این دستور مقداری را به غیر از 0 برمی گرداند که تعداد رکورد هایی است که تحت تاثیر این دستور قرار گرفته اند در غیر این اگر این دستور هیچ تغییری در پایگاه داده ایجاد نکند مقدار 0 بر می گرداند:
int rowsAffected = command.ExecuteNonQuery();