۱۳۸۸ تیر ۲۷, شنبه

پیدا کردن nمین سطر از یک جدول

با استفاده از این کد میتونین nاومین سطر یک جدول رو بازیابی کنید.

select * from (


select ROW_NUMBER() OVER (ORDER BY TableID) ROWNUMBER ,* from [Your Table]) t2


where t2.ROWNUMBER =شماره سطر


۱۳۸۸ تیر ۱۶, سه‌شنبه

آموزش SQL Server 2005 قسمت پنجم

سلام
این هم قسمت پنجم آموزش :
ایجاد و تغییر جداول

۱۳۸۸ تیر ۱۵, دوشنبه

آموزش SQL Server 2005 قسمت چهارم (انواع JOIN )

سلام دوستان
این هم قسمت چهارم آموزش SQL Server : انواع JOIN
Joins

۱۳۸۸ تیر ۱۴, یکشنبه

تفاوت بین scope_identity()و @@Identity و ident_current

سلام
شاید بعد از اینکه رکوردی رو در یک جدولی که فیلدی از نوع Identity داره اضافه کردین بخواهین که مقدار جدید اون فیلد رو بگیرین.سه راه برای این کار وجود داره و در اینجا تفاوت این راهها رو بررسی میکنیم:
در ابتدا باید دو مفهوم رو توضیح بدم: 1-جلسه یا Session و 2- حوزه دید یا Scope
Session: معرف کانکشنی است که دستور در آن اجرا میشود
Scope: معرف محلی است که دستور در آن وجود دارد

به عنوان مثال:دو دستوری که در یک روال ذخیره شده ذخیره میشوند در یک Scope قرار دارند و دو روال ذخیره شده ای که در یک کانکشن اجرا میشوند در یک Session قرار میگیرند.
با توجه به این مفاهیم :
@@IDENTITY : آخرین مقدار identity رو در session فعلی و در هر حوزه ای برمیگرداند.
scope_identity(): آخرین مقدار identity رو در session فعلی و در حوزه فعلی را برمیگرداند.
ident_current(): آخرین مقدار identity رو در هر session و در هر حوزه ای برمیگرداند.

۱۳۸۸ تیر ۷, یکشنبه

۱۳۸۸ خرداد ۱۷, یکشنبه

تست کردن در IE6 وقتی که IE7 رو نصب کردی

سلام دوستان
گاهی اوقات شمایی که دارین طراحی وب سایت میکنین روی سیستمتون IE7 نصب کردین.حتما میدونین که IE6 با 7 در بعضی از موارد همخونی ندارن و سایتی که تو 7 درست نمایش داده میشه تو 6 لزوما درست نمایش داده نمیشه.
برای اینکه بتونین همزمان این دو تا داشته باشین میتونین برنامه Multiple IE رو دانلود و سپس نصب کنین و IE6 رو هم همزمان رو سیستمتون داشته باشید
موفق باشید

۱۳۸۸ خرداد ۹, شنبه

System.Nullable : متغیرها هم میتوانند نال بپذیرند

سلام
گاهی اوقات ما متغیرهایی از نوع Numeric ، Bool ، DateTime داریم که علاوه بر مقادیر مناسبی که ممکنه بگیرن میتونن Null هم بگیرن. خوب همه شما میدونین که اگر کد زیر رو بنویسیم به ارور برمیخوریم:


Int32 myVar = null; //error: myVar cannot be set to null

این خطا به این دلیله که در حالت عادی این گونه متغیرها نمیتونن مقادریر Null بپذیرن. برای حل این مشکل میتونیم از System.Nullable استفاده کنیم که علاوه بر مقدیر مناسب Datatype میشه Null رو هم بهش نسبت داد.
شکل کلی تعریف یک متغیر به صورت Nullable به دوصورت زیر است:

Nullable<T> myVar = null;

یا


T? myVar = null;

که در اینجا T یک Datytype هست.مثال:

Nullable<Int32> myVar = null;

یا

Int32? myVar = null;

اگر بخواهیم یک متغیر Nullable رو به یک متغیر عادی تسبت بدیم باید از عملگر ?? استفاده کنیم تا بتونیم به متغیر نال پذیر مقدار پیش فرض بدیم.به مثال زیر دقت کنید:


// ?? operator example.

int? x = null;

// y = x, unless x is null, in which case y = -1.

int y = x ?? -1;


در اینجا میگیم اگر x نال نبود که هیچی اما اگر نال بود بجاش -1 رو بریز تو y.
چند مثال:

System.Nullable<int> i1 = 0;

System.Nullable<int> i2 = null;

int i3 = 0;

if (i1 == i2)

{
System.Console.WriteLine("i1 and i2 are the same");
}
else
{
System.Console.WriteLine("i1 and i2 are different");


}

if (i1 == i3)
{
System.Console.WriteLine("i1 and i3 are the same");
}
else
{
System.Console.WriteLine("i1 and i3 are different");
}

خروجی قطعه کد بالا بصورت زیر هست:

i1 and i2 are different

i1 and i3 are the same


مثال 2:


System.Nullable<int> i1 = null;

try

{

System.Console.WriteLine("The value is {0}", i1.Value);

}

catch

{

System.Console.WriteLine("null causes an exception");

}

i1 = 1;

try

{

System.Console.WriteLine("The value is {0}", i1.Value);

}

catch

{

System.Console.WriteLine("1 causes an exception");

}


خروجی بصورت زیر است:




null causes an exception

The value is 1


مثال 3: نسبت دادن یک مقدار متغیر نال پذیر در صورتی که نال باشد:



int DefaultIfNull(System.Nullable<int> i)

{

int retVal;

if (i.HasValue)

{

retVal = i;

}

else

{

retVal = 1;

}

return retVal;

}

int DefaultIfNull(System.Nullable<int> i)

{

return i ?? 10;

}


تابع HasValue چک میکنه که آیا یک متغیر نال پذیر مقدار نال دارد یا خیر.
مثال 4: پارامتر نال پذیر:


private void button1_Click(object sender, EventArgs e)

{

bool b=true;

b = nima(null);

MessageBox.Show(b.ToString());

b = nima(2);

MessageBox.Show(b.ToString());

}

private bool nima(int? i)

{

if (i == null)

return false;

else

return true;

}


نکته 1: از نوع string نمیشه در متغیرهای نال پذیر استفاده کرد چون استرینگ یک رفرنس هست به رشته ای از کاراکترها
نکته 2: یکی از بهترین استفاده های این متغیرها وقتی است که شما میخواین از ستونی در جدولتون اطلاعات بخونین که میتونه مثادیر نال داشته باشه.

۱۳۸۸ اردیبهشت ۲۷, یکشنبه

یه مثال از MultiThreading

سلام یه مثال کوچیک از مالتی تردینگ که به دو صورت UI رو آپدیت میکنه

MultiThreading

۱۳۸۸ اردیبهشت ۹, چهارشنبه

نوعی دیگر در نصب دیتابیس همراه با Setup برنامه

سلام
گاهی پیش میاد که لازمه دیتابیس هم همراه با برنامه نصب بشه.یکی از راههای ممکن استفاده از مقاله خانم بیتا هست.اون روش به اندازه کافی کارآمد هست اما من اینجا یه روشی رو میگم که شما خوده دیتابیس رو Attach میکنین.شاید لازم بوده مقادیر اولیه ای رو داخل دیتابیس قرار بدین در این روش دیگه لازم نیست اسکریپت اضافه کردن این مقادیر اولیه رو بنویسین بلکه سر و کار ما با خوده فایل دیتا بیس هست.
نکته کلیدی در این پروژه استفاده از SQL Server Management Objects (SMO) هست . SMO راهی است برای مدیریت اشیای SQL Server .برای این مدیریت اصلا لازم نیست از دستورات SQL استفاده بشه بلکه دات نت همه کارها رو برای ما میکنه. ما میتونیم دیتابیس ایجاد کنیم. درونش جدول و یا Store Procedure ایجاد کنیم و ...
خوب برای رسیدن به هدف پروژمون یه پروژه ساده بسازین که یه گرید داشته باشه و اونم یه یکی از جداول دیتابیس مورد نظر شما وصل باشه. برنامتون رو یه دور تست کنین و مطوئن بشین که همه چیز به درستی کار میکنه .
خوب برای یک Custom Install یک کلاس Installer به پروژتون اضافه کنین. خوب ما فرض میکنیم که اون دیتابیس در پوشه ای به نام DB کنار برنامه اصلی هست (اگر فیلم آموزشی خانم بیتا رو ببینین میبینین که میشه یه پارامتر تعریف کرد برای مسیر دیتابیس و دیتابیس رو تو اون مسیر ریخت من این مورد رو به عهده خودتون میذارم) . کاری که انجام میدیم اینه که با استفاده از Reflection مسیر فایل اجرایی رو بدست میاریم و فایلهای دیتابیس رو که درون فلدر DB کنار پروژه هست رو با استفاده از SMO به نمونه نصب شده SQL Server اتچ میکنه. نکته ای که هست من کار اتچ کردن دیتابیس رو درون رویداد Install نوشتم چون میخواستم مطمئن بشم فایلهای دیتابیس که درون پروژه ست آپ هست ( در ادامه توضیح میدم) حتما در جای مناسب کپی شدن. برای اطلاع از جزئیات Install به MSDN مراجعه کنین. برای UnInstall کردن برنامه هم دیتابیس رو Detach میکنیم.. کدها به اندازه کافی معلوم هستن .

[RunInstaller(true)]


public partial class Installer1 : Installer


{


string path;



public Installer1()


{


InitializeComponent();


}



private void AttachDB()


{


try


{


SqlConnection cn = new SqlConnection("Data Source=.;Initial Catalog=InstallDB;Integrated Security=True");


Assembly asm = Assembly.GetExecutingAssembly();


path = System.IO.Path.GetDirectoryName(asm.GetName().CodeBase);


path = path.Substring(6) + "\\DB\\";


Server SqlServer = new Server();


//System.Windows.Forms.MessageBox.Show(path);


string DatabaseName = "InstallDB";



ServerConnection SqlServerConnection = SqlServer.ConnectionContext;



if (SqlServer.Databases[DatabaseName] == null)


{




Database NewDatabase = new Database(SqlServer, DatabaseName);



FileGroup DatabaseFileGroup = new FileGroup(NewDatabase, "PRIMARY");


NewDatabase.FileGroups.Add(DatabaseFileGroup);



DataFile DatabaseDataFile = new DataFile(DatabaseFileGroup, DatabaseName);


DatabaseFileGroup.Files.Add(DatabaseDataFile);



DatabaseDataFile.FileName = path + "InstallDB.mdf";



LogFile DatabaseLogFile = new LogFile(NewDatabase, DatabaseName + "_log");


NewDatabase.LogFiles.Add(DatabaseLogFile);



DatabaseLogFile.FileName = path + "InstallDB_log.ldf";




NewDatabase.Create(true);


}


else


System.Windows.Forms.MessageBox.Show("این دیتابیس وجود دارد");


}


catch (Exception ex)


{


System.Windows.Forms.MessageBox.Show(ex.InnerException.InnerException.ToString());


}


}



public override void Install(System.Collections.IDictionary stateSaver)


{



base.Install(stateSaver);



//System.IO.File.Create(@"c:\t.txt");


AttachDB();


}



public override void Uninstall(System.Collections.IDictionary savedState)


{


base.Uninstall(savedState);


Server SqlServer = new Server();


string DatabaseName = "InstallDB";


if (SqlServer.Databases[DatabaseName] != null)


{


SqlServer.DetachDatabase(DatabaseName, true);


}



//Assembly asm = Assembly.GetExecutingAssembly();


//path = System.IO.Path.GetDirectoryName(asm.GetName().CodeBase);


//path = path.Substring(6) + "\\DB\\";


//System.IO.File.Delete(path + DatabaseName + ".mdf");


//System.IO.File.Delete(path + DatabaseName + "_log.ldf");


}


}



یه پروژه جدید از نوع Setup Project به سولوشن اضافه کنین .من داخل ویوی File System یک پوشه به اسم DB قرار ایجاد کردم فایلهای دیتابیس (mdf و ldf ) رو به داخل اون منتقل کرد خاصیت AlwaysCreate رو به true و DeafultLocation رو به [TARGETDIR]\DB تغییر دادم. بعد از تنظیمات مربوطه که پروژه قبلی رو ست آپ کنه به ویوی Custom Action برین و برای رویدادهای Commit و UnInstall رو (همونطوری که نمونش در فیلم آموزش خانم بیتا هست) به پروژه ای که کلاس Installer داره نسبت بدین تا در موقع اتفاق افتادن ایونتهای مورد نظر کده مورد نظر اجرا بشه . من یه تیکه کد کامنت شده نوشتم که دیتابیس رو بعد از UnInstall پاک میکنه شما هر کاری دوست دارین میتونین بکنین اعم از اینکه به پوشه ای دیگه ای منتقلشون کنین امیوارم که مفید باشه.

InstallDBWithSetup.rar

۱۳۸۸ اردیبهشت ۶, یکشنبه

DotRas

سلام
داشتم روی RAS سرچ میکردم به یه فریم ورک اپن سورس برخوردم خیلی چیزه جالبی بود اسمش DotRas هست .این پروژه داخل CodePlex هست و میتونین اطلاعات مربوطه رو از اونجا پیدا کنین. اما کارهایی که این این فریم ورک میکنه :
· تشخیص بده که آیا ارتباط برقرار هست یا نه
· تعدا بایتهای فرستاده شده و گرفته شده
· لیست کردن تمام کانکشنها اعم از دایال آپ ، VPN و ...
· برگردوندن شماره تلفن ، یورنیم ، پسورد ، شماره کشور و کلا هر چیزی که داخل پنجره Properties کانکشن وجود داره
· اتصال به دو صورت همزمان (synchronous) و عیر همزمان (asynchronous)
· نشان دادن وضعیت حین شماره گیری
· نشان دادن نوع و نام Device ای که از طریق اون وصل شدین
· و ...
فقط تنها نکته ای که هست برای باز کردن با ویژوال استودیو باید یه برنامه به اسم Microsoft.StyleCop رو قبلش نصب کنبن. بعد میتونین سورس برنامه رو که البته خیلی پیچیده هست ببینین
دانلود:
این هم لینک یه فیلم آموزشی : http://www.youtube.com/watch?v=ii7L3uXIAXM
موفق باشید

۱۳۸۸ اردیبهشت ۴, جمعه

بازم اومدی...

نمیدونم ولی فکر میکنم باید بنویسم. تازه نمیدونم از چی باید بنویسم... . من از پشت شبهای بی خاطره... من از پشت زندان غم... من از آرزوهای دور و دراز... من از خواب چشمان نم...
تو تعبیر رویای نا دیده ای... تو نوری که بر سایه تابیده ای... تو یک آسمان بخشش بی طلب... تو برخاک تردید باریده ای...
اینکه الان اینم تقصیر تو نیست این سرنوشته منه...من اگه تاریکم غمی نیست تو به فرداها به روشنی بیندیش... کاش میدونستی زمانی که اومدی کویر تشنه وجودم که به اندازه عمر آدمی باران عشق ندیده بود نم مهربانی دید.در این کویر دلتنگی که جز سفره طلایی خورشید و غربت ماه در شب رو به چشم ندیده بود باران تو هوای دیگری بود...تقصیر تو نیست این کویر بوی دریا شدن شنیده بود... چنان خرامان بر این کویر وزیدی که مسخ شد... من دریا شدم...موجها بپا خیزید...میخواهیم به جنگ همه کویرها برویم...بر ساحلها چنگ بندازید...تمام این لذت دریا بودن با سکوتی ناجوانمردانه دوباره کویر شد...کجایی؟...کجایی؟... به خودم آمدم همان کویری هستم که بودم ... اما نه قبلا دوری از باران عشق را نمیدانستم الان همراه به تمام کم و کاستی ها حسرت نیز اضافه شده... کاش لایق تو بودم....

۱۳۸۸ فروردین ۱۹, چهارشنبه

RegisterHotKey و Hook (قسمت دوم)

سلامبا استفاده از رفرنس Processing Global Mouse and Keyboard Hooks in C# و یکمی تغییر برای امکان تشخیص کلید وسطی ماوس میتونید تمام کلیدهای فشرده شده و همچنین کلیدهای ماوس رو مانیتور کنین. با دیدن کد میتونین مقادیر مربوط به هر یک از دکمه های ماوس رو ببینین .این روش Hook نام داره .موفق باشید

۱۳۸۸ فروردین ۱۷, دوشنبه

RegisterHotKey و Hook (قسمت اول)

سلام
تا به حال یه این فکر کردین که یه برنامه بنویسین که دم دستی باشه؟ یعنی کاربر هر موقع که میخواد بتونه اون رو فراخونی کنه؟ فقط با یه دکمه؟ مثل Babylon و برنامه هایی از این قبیل. در این مقاله و در قسمتهای مختلف طریقه گرفتن کلید از کیبورد و همچنین بدست آوردن کلیدی از ماوس که فشرده شده رو بصورت گام به گام یاد میگیریم.
دو راه برای گرفتن کد کلید در هر جای ویندوز وجود داره: RegisterHotKey و Hook
در مقاله زیر این موارد بررسی شده.
قسمت اول:

RegisterHotKey.pdf

UsingRegisterHotKey.rar

۱۳۸۸ فروردین ۱۲, چهارشنبه

ViewStateCompressor

از اینجا میتونین یه آموزش سریع برای فشرده کرد ViewState رو بگیرین.

YUI Compressor

از این آدرس میتونین یه آموزش سریع از YUI Compressor پیدا کنین.

YUI Compressor

۱۳۸۸ فروردین ۷, جمعه

آپدیت با استفاده از TimeStamp

یکی از راههای جلوگیری از concurrency استفاده از مقایسه تمامی فیلدها در قسمت Where است . یعنی اینکه تمام فیلدهای جدول رو در قسمت Where قرار دهیم تا اینجوری اگر کسی از جای دیگه آپدیت کرده بود به مشکل برنخوریم.
یکی دیگه از راههای این کار استفاده از یک فیلد TimeStamp در جدول است. وقتی که یه سطر از جدول به روز رسانی میشود و یا اضافه میشود SQL Server بطور اتوماتیک این فیلد را تغییر میدهد. خوب ما میتوانیم از این کار برای جلوگیری از همزمانی استفاده کنیم:
برای این کار یک پارامتر از نوع Parameter تعریف کنید که از نوع باینری باشد(داده Timestamp مقادیر باینری را در خود نگه میدارد) باشه:


daUpdateCommand.Parameters.Add(new SqlParameter("@pTimeStamp", SqlDbType.Binary));


daUpdateCommand.Parameters["@pTimeStamp"].SourceVersion = DataRowVersion.Original;


daUpdateCommand.Parameters["@pTimeStamp"].SourceColumn = "TimeStampCol";



SourceVersion: در SqlDataAdapter.UpdateCommand استفاده میشود و مشخص میکند طی بروز رسانی از مقدار فعلی پارامتر استفاده شود یا از مقدار اصلی و اولیه.
DataRowVersion: نسخه DataRow را مشخص میکند. DataRowVersion یک مجموعه است که 4 مقدار Original ، Current ، Proposed و Default را در خود دارد. در کد بالا به دلیل اینکه میخواهیم از مقدار اصلی موجود در جدول استفاده کنیم از Original استفاده میکنیم
SourceColumn : هم ستونی را که باید این پارامتر از آن مقدار بگیرد را مشخص میکند.

۱۳۸۸ فروردین ۴, سه‌شنبه

Inherited Control

سلام
گاهی پیش میاد که میخوایم یه سری از کنترلهای ما (مثلا 10 تا تکست باکس داریم) ظاهرشون یه طور خاصی باشه یا اینکه همشون یه خصوصیت خاصی داشته باشن. یکی از کارهای ساده ای که میشه انجام داد اینه که از Inherited Control استفاده کنیم. برای این من منظور یه کلاس ایجاد کنید و اون رو از کنترل مورد نظر ارث بری کنین.
بیاین یه مثال رو بررسی کنیم:
فرض کنین میخوایم وقتی که اگر بیشتر از 70 درصد MaxLength هر تکست باکسی تو پروژه پر شد رنگش صورتی بشه و اگر بیشتر از 85 درصد پر شد رنگ نوشته ها قرمز بشه. ابتدا برای این کار یه کلاس به پروژه اضافه کنین. بعد کلاس رو باز کنین و اونو از کنترل TextBox ارث بری کنین:


class HDITextBox : System.Windows.Forms.TextBox


بسیار خوب حالا برای اینکه ممکنه این عدد 70 و 85 تغییر کنه دو تا خصوصیت برای کلاسمون در نظر میگیریم:



private double _WarnLevelMaxing =.85;


public double WarnLevelMaxing


{


get { return _WarnLevelMaxing; }


set


{


_WarnLevelMaxing = value;


}


}


private double _WarnLevelRisky=.70;


public double WarnLevelRisky


{


get { return _WarnLevelRisky; }


set


{


_WarnLevelRisky = value;


}


}


تنها کاری که مونده اینه که متد OnTextChanged رو override کنیم تا کاری که ما میخوایم رو انجام بده:



protected override void OnTextChanged(System.EventArgs e)


{


if (this.MaxLength > 0)


{


double currentLevel = Convert.ToDouble( this.Text.Trim().Length) / Convert.ToDouble(this.MaxLength);


if (currentLevel > _WarnLevelMaxing)


{


this.ForeColor = System.Drawing.Color.Red;


return;


}



if (currentLevel > _WarnLevelRisky)


{


this.ForeColor = System.Drawing.Color.Plum;


return;


}


if (currentLevel <= _WarnLevelRisky)


{


this.ForeColor = System.Drawing.Color.Black;


return;


}



}


base.OnTextChanged(e);


}



حالا پروژه رو Rebuild کنین و باید توی ToolBox یه کنترل جدید اضافه شده باشه. این کنترل دقیقا مثل یه تکست باکس معمولی هست فقط اون قابلیتی که شما میخواین رو هم داره.

۱۳۸۷ اسفند ۳۰, جمعه

یه روز قبل از عید تو کوه

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

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


از راست به چپ:خودم
حامد:میخواد دکترا بخونه در رشته مکانیک که امیدوارم موفق بشه
بهمن و امیر

آموزش SQL Server 2005

سلام
این هم فصل دوم کتاب آموزش SQL Server .عیده همتون مبارک .عیده منم مبارک .
فصل 2

۱۳۸۷ اسفند ۲۹, پنجشنبه

Delegate

سلام
در طی چند مقاله میخوام به Delegate ، ایونت و ارتباط بین این دو صحبت کنم.

Delegate قسمت اول:
Delegate ها را میتوان به عنوان یک جانگهدار هوشمند که رفرنسهایی را به چند متد نگه میدارد در نظر گرفت.اگر متدی بخواهد از طریق نمونه ای از یک Delegate فراخوانی شود باید در آن نمونه رجیستر شود. وقتی که رجیستر شد یک رفرنس به آن متد در مجموعه داخلی رفنسهای Delegate اضافه میشود که به آن Invocation List گفته میشود. Delegate ها میتوانند این مجموعه را بصورت همزمان یا غیر همزمان فراخوانی کنند. وقتی که یک Delegate فراخوانی شد همه متدهایی که در آن رفرنس دارند نیز اجرا میشوند.
Delegate ها نمیتوانند به هر متدی رفرنس داشته باشند بلکه باید signature متد با signature آن Delegate دقیقا یکی باشد.(signature به زبان ساده یعنی آرگومانها از نظر نوع و تعدا و همچنین مقدار برگشتی متد دقیقا یکسان باشد)
نحوه تعریف یک Delegate :





public delegate void MyDelegate(string myString);


از این Delegate متوجه میشویم که Delegate فقط میتواند به متدهایی که یک آرگومان از نوع string میگیرند و همچنین هیچ مقدار بازگشتی ندارند رفرنس داشته باشد.مثال: Delegate میتواند از متد زیر رفرنس داشته باشد:
مثال: Delegate میتواند از متد زیر رفرنس داشته باشد

1 private void MyMethod(string someString)


2 {


3 // method body here.


4 }


اما نمیتواند از متدهای زیر رفرنس داشته باشد:




private string MyOtherMethod(string someString)


{


// method body here.


}



private void YetAnotherMethod(string someString, int someInt)


{


// method body here.


}



با استفاده از کده زیر میتوانیم از یک Delegate نمونه بگیریم و یک متد را به Invocation List آن اضافه کنیم:


MyDelegate del = new MyDelegate(MyMethod);


del += new MyDelegate(MyOtherMethod);


برای فراخوانی آن متد (و کل Invocation List ) کافیست بنویسیم:

del("my string value");


اما شاید این سوال در ذهن شما نقش ببندد که چرا Delegate استفاده میکنیم؟ میتوان جوای این سوال را اینگونه داد:
1) Delegate به عنوان یک جانگهدار: در اغلب موارد ما میدانیم چه متدی باید اجرا شود و چه کدی باید در یک زمان اجرا شود. یکی از مواردی که میتوان به آن اشاره کرد این است که آنها راه دیگری را برای اجرای کد شما توسط کامپوننتهای دات نت فراهم میکنند بدون اینکه چیزی جز signature متد را بدانند. به عنوان مثال کامپوننت تایمر برای ایونت Tick خود نیاز به یک متد دارد. کامپوننت تایمر در حقیقت نمیداند شما چه کدی را برای این ایونت بنویسید فقط signature آنرا میداند. بنابراین وقتی که این ایونت را نوشتید این ایونت به invocation list مربوط به Delegate ایونت Tick اضافه میشود و هنگام رخداد ایونت Tick آن Delegate فراخوانی میشود. بنابراین Delegate ما را قدر میسازد که کدهایی را بنویسیم که بعدا به آنها متد یا متدهایی اضافه شود.

2) فراخوانی همزمان و غیر همزمان: همه Delegate ها را میتوان همزمان و غیر همزمان فراخوانی کرد. فراخوانی غیر همزمان را میشود با استفاده از BeginInvoke و EndInvoke و فراخوانی همزمان را میتوان با Invoke انجام داد.

3) کاربرد Delegate در ایونتها: اگر خدا بخواد در ادامه در مورد ایونتها بحث خواهیم کرد در آنجا خواهید دید که Delegate ها پایه ایونتها هستند. در حقیقت Delegate ها به عنوان یک لایه بین منتشر کننده ایونت(Publisher) و گیرنده ایونت(Subscriber) خواهد بود. به این معنی که گیرندگان ایونت میتوانند به Invocation List آن Delegate اضافه شوند بدون اینکه منتشر کننده چیزی راجع به آنها بداند. به این ترتیب Publisher لازم نیست چیزی راجع به Subscriber ها بداند.

4) دیگر استفاده های Delegate که فعلا آنها را بررسی نمیکنیم

۱۳۸۷ اسفند ۲۷, سه‌شنبه

کتاب آموزش SQL Server 2005

سلام دوستان
در چند روزه آینده کتاب آموزش برنامه نویسی با SQL Server 2005 رو براتون میذارم.یادتون نره من رو دعا کنیدا...ببینین مرامنامه اینه که اگه خوندین و چیزی یاد گرفتیم نیما رو تو دعاهاتون فراموش نکنین

فصل 1: اصول RDBMS

اصول RDBMS


۱۳۸۷ اسفند ۲۳, جمعه

آکورد آهنگ Sway از Dean Martin

سلام
امروز داشتم یه آهنگ بسیار زیبا از Dean Martin گوش میدادم. خیلی این آهنگ رو دوست دارم. دلم میخواست با گیتار بزنم. البته اینم بگم که گیتار رو مدت خیلی کمیه شروع کردم ولی خوب آرزو بر جوانان عیب نیست.کلا دو سه تا ریتم بلدم میخوام همه آهنگای دنیا رو با این سه تا بزنم . رفتم آکوردشو پیدا کردم ولی خوب چشمتون روزه بد نبینه فکر کنم عمرا نمیشه این آهنگ رو با این آکوردهایی که نوشته با گیتار زد.تو یه کلمه باید سه بار آکورد عوض کرد .
اینم لینکه آکورد آهنگ Sway از Dean Martin اگه کسی اینو میتونه با گیتار بزنه که خیلی خیلی کار درسته.

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

۱۳۸۷ اسفند ۲۲, پنجشنبه

216 Web Safe Color Chart

در اینجا کد رنگهای مناسب برای وب رو گذاشتن

216 Web Safe Color Chart

Readable Regular Expressions

یکی از ابزارهای مفید برای کار با عبارات با قاعده استفاده از اسمبلی زیر است. این اسمبلی Pattern را بصوزت کاملا قابل خواندن میسازد طوری که میتوان به سادگی آنرا درک کرد. برای شرح کار آن به مثالهای زیر توجه کنید. فرض کنید میخواهید شماره ملی هر فرد(در امریکا) را جهت اعتبار سنجی چک کنید.کد معمول آن بصورت زیر است:





static readonly Regex socialSecurityNumberCheck = new Regex(@"^\d{3}-?\d{2}-?\d{4}$");


این کد معادل آن است که بنویسیم :


static readonly Regex socialSecurityNumberCheck = new Regex(Pattern.With.AtBeginning


.Digit.Repeat.Exactly(3)


.Literal("-").Repeat.Optional


.Digit.Repeat.Exactly(2)


.Literal("-").Repeat.Optional


.Digit.Repeat.Exactly(4)


.AtEnd);



نکته: این کتابخانه عملکرد واقعی عبارات منظم را انجام نمی دهد. این راه ساده دیگری برای تعریف کردن الگوی عبارات منظم است. شما هنوز برای شئ که ساخته اید نیاز به کلاس System.Text.RegularExpression.Regex دارید . از آنجایی که این طرح کاملا قابل تبدیل به System.String است ، شما به راحتی می توانید آن را در متد یا سازنده Regex ،پاس کنید. فایل پیوست را دریافت کنید.
اسبلمی
سورس
منبع

۱۳۸۷ اسفند ۲۱, چهارشنبه

Regular Expressions

عبارات منظم (Regular Expressions) وسیله ای را برای برنامه نویسان فراهم می کنند که بتوان به کمک آنها عبارات ، کلمه ها و الگوها ی مورد نظر را در یک رشته متنی (String) پیدا کرد. در اغلب موتور های جستجوی پیشرفته مانند Google یا Live Search از این روش استفاده می کنند و می توانند سرتاسر پایگاه داده را به طور کامل و در کمترین زمان جستجو کنند.




Regular Expressions دارای یک سری سینتکس های مربوط به خود است که به کمک آن می توان تنها با نوشتن یک خط کد، یک رشته ی بزرگ متنی را تحلیل و جستجو کرد در حالی که اگر از روشهای دیگری استفاده می کردیم به احتمال خیلی زیاد از یک خط تجاوز می کرد . و این سادگی و در عین حال کارایی بالای این روش را می رسان.د




Regular Expressions محدود به یک زبان خاص نیست و اکثر زبانهای برنامه نویسی این امکان را درون خود قرار داده اند . عبارات منظم توسط یک پردازنده که درون زبان برنامه نویسی وجود دارد تفسیر(interpret) می شوند .عبارات منظم استفاده های زیادی در برنامه های کاربردی مختلف دارد . توسط بسیاری از ادیتورها (Text Editor) برای انجام اعمال مختلف بر روی رشته ها مورد استفاده قرار می گیرد . همچنین در بعضی از زبانهای برنامه نویسی نیز از موتور Regular Expressions استفاده می شود نظیر Perl, Ruby, TCL.




اصل Regular Expressions بر روی نظریه ماشینها و نظریه زبانهای صوری تکیه دارد که به طور خلاصه به چند مورد اشاره می کنیم:




: این علامت نشان دهنده or است . به عنوان مثال grayوgrey هر دو معنای خاکستری را می دهند. می توان نوشت : graygrey و یا به صورت gr(ae)y








? : این علامت نشان دهنده آن است که کاراکتری که قبل از آن قرار گرفته است می تواند وجود داشته باشد یا نداشته باشد. به عنوان مثال : colou?r متواند به دو صورت "color" و "colour". بیاید.








* : بعد از هر کاراکتری که قرار بگیر آن کاراکتر می تواند از صفر تا بینهایت بار تکرار شود . به عنوان مثال : ab*c را می توان نوشت : "ac", "abc", "abbc", "abbbc"و به همین صورت ادامه خواهد داشت.




+ : بعد از هر کاراکتری قرار گیرید آن کاراکتر حتما باید حداقل یک بار تکرار شود. به عنوان مثال : ab+c به صورت "abc", "abbc", "abbbc" ایجاد می شود . ایجاد "ac". اشتباه خواهد بود .




[] : نشان دهنده یک محدوده است . به عنوان مثال برای نشان دادن تمام حروف انگلیسی می نویسیم : [a-z] یا برای نشان دادن تمام حروف بزرگ و کوچک و اعداد می نویسم : [0-9A-Za-z]




() : برای گروه بندی استفاده می شودو به همین ترتیب .جدول زیر نمونه ای از سینتکس های Regular Expressions می باشد .





يك مثال ساده از Regular expression كه چك مي كند آيا رشته ورودي تماما عدد است يا تماما حرف:




10 using System.Text.RegularExpressions;


11 ...


12 const string ALL_NUMERIC_PATTERN = "[a-zA-Z]";


13 static readonly Regex All_Numeric_Regex =


14 new Regex (ALL_NUMERIC_PATTERN);


15 static bool AllNumeric ( string inputString )


16 {


17 if (All_Numeric_Regex.IsMatch ( inputString ))


18 {


19 return false;


20 }


21 return true;



}

Agent Johnson

سلام
امروز لینک دانلود یکی از Plug-in های مفید دات نت رو به نام Agent Johnson رو میذارم که داخل کد اشیای از نوع Disposable رو مشخص میکنه .با این کار میتونیم از using به نحو مفید استفاده کنیم. مطالب بیشتر رو میتونین از وبلاگ آقای نصیری در این آدرس بخونین.
موفق باشید

۱۳۸۷ اسفند ۲۰, سه‌شنبه

استفاده از یک HTTP Handler برای ترکیب فایلهای جاوا اسکریپتی و CSS

به نام خدا


استفاده از یک HTTP Handler برای ترکیب فایلهای جاوا اسکریپتی و CSS :

(دوستان عزیز نوشتن تو این ادیتور واقعا به درد نخوره خیلی اذیت میکنه مقاله ها رو با فرمت doc یا pdf میذارم که راحت باشین)

لینکه مقاله در دات نت سورس:
موفق باشید.

معرفی

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