Basic of C#

176
Written By SevenLamp 1 Chapter 1 …… 1 Basic of C# (part 1) Basic of C# (part 2) History of C# Basic of C#(part 3) .Net Framework Chapter 2 ……..4 Basic of C#(part 4) Hello world from C# Basic of C#(part 5) Data Type of C# Basic of C# (part 6) Data Type Conversation Chapter 3 …….13 Basic of C#(part 7) Basic of C# (part 8) Compile Error Logic Error Run Time Error Exception Handling Basic of C#(part 9) Chapter 4 ………25 Basic of C# (part 10) Function Basic of C#(part 11) Value Parameter Reference Parameter Output Parameter Params Array Basic of C # (part 12) Selection control statement If ….else Switch Conditional operator(?:)

description

Basic

Transcript of Basic of C#

Page 1: Basic of C#

Written By SevenLamp

1

Chapter 1 …… 1 Basic of C# (part 1) Basic of C# (part 2)

History of C# Basic of C#(part 3)

.Net Framework

Chapter 2 ……..4 Basic of C#(part 4)

Hello world from C# Basic of C#(part 5)

Data Type of C# Basic of C# (part 6)

Data Type Conversation

Chapter 3 …….13 Basic of C#(part 7) Basic of C# (part 8)

Compile Error Logic Error Run Time Error Exception Handling

Basic of C#(part 9)

Chapter 4 ………25 Basic of C# (part 10)

Function Basic of C#(part 11)

Value Parameter Reference Parameter Output Parameter Params Array

Basic of C # (part 12) Selection control statement

If ….else Switch Conditional operator(?:)

Page 2: Basic of C#

Written By SevenLamp

2 Chapter 5 ……….35 Basic of C# (part 13)

While Do-while For Foreach

Basic of C# (part 14) Basic of C# (part 15)

Array

Chapter 6 ……….44 Basic of C# (part 16)

Array list Class Hashtable Class

Basic of C# (part 17) Basic of C# (part 18)

Enumeration

Chapter 7 ………51 Basic of C# (part 19) Basic of C# (part 20) Basic of C#(part 21)

Instant constructor Private constructor Static constructor

Chapter 8 ………..60 Basic of C# (part 22)

Static member Instant member

Basic of C# (part 23) Property

Basic of C# (part 24) Inheritance Polymorphism Data hiding Encapsulation

Chapter 9 ………..71 Basic of C# (part 25)

Function Overloading Vs Function Overriding Graphics And Random

Page 3: Basic of C#

Written By SevenLamp

3 Graphic Class Random Class

Basic Window Application(part 1) Event

Basic Window Application(part 2) Event2(Mouse Event)

Basic Window Application(part 3) Automatic Moving The Ball

Chapter 10 …………85 ADO.Net in C# (part 1) ADO.Net in C# (part 2) ADO.Net in C# (part 3) Question & Answer 1

Chapter 11 ………..112 Create Your Database Database Replication(Synchronization)

Chapter 12 ………..148 Basic of SQL Statement (part 1)

Insert Update Delete Select

Insert Statement Basic of SQL Statement(part 2)

Update Statement Delete Statement

Basic of SQL Statement (part 3) Select Statement

Basic of SQL Statement (part 4)

Chapter 13 ………..160 Basic of SQL Statement (part 5)

Aggregate Function List Basic of SQl Statement (part 6)

Cross join Inner join Outer join

Basic of SQL Statement (part 7) Basic of SQL Statement (part 8)

Page 4: Basic of C#

Written By SevenLamp

4 Create Function Alter Function Drop Function

http://sevenlamp.wordpress.com http://www.sevenlamp.com

Page 5: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 1

Written By SevenLamp

Chapter 1

basic of C# (part 1)

ဒအခနမာ C# လ႔ ေျပာလကရင programming လပေနတ႔သေတြ၊ programming ကစတ၀ငစားတ႔ သေတြ

အားလးနးနး ၾကားဖး၊ သးဖး၊ ဖတဖး၊ ေလလာဖး ၾကမယလ႔ ထငပါတယ။ ကြၽနေတာအခ ဒပစက အခမ C#

စတငေလလာမယ ညငယ၊ညမငယ ေကာငးသား/သ ေတြ အတြကရညရြယျပးေရးပါမယ။ ညငယ၊

ညမငယတ႔အတြက C# programming ေလလာတ႔ ခရးမာ အနညးငယမေလာကပျဖစျဖစ

အေထာကအကရသြားေစခငတ႔ ရညရြယခကန႔ပါ။ လး၀ အေျခခကေနျပး ကြၽနေတာ သသေလာက ေရးမာ

ျဖစတ႔ အတြက မားေတြေတြ႔ရငလညး ေထာကျပကညပါ၊ မရငးတာရရငလညး ေမးပါ၊ လအပတာရရငလညး

ကညလ႔ ျဖညေပးၾကပါလ႔ အရငးဆး ေတာငးပနပါတယ။

ကြၽနေတာဟာ professional developer တစေယာက မဟတေသးပါဘး။ C# အေၾကာငးက နညးနညးပါးပါး

နားလည၊ လပဖးတ႔ သတစေယာကသာျဖစတ႔ အတြက၊ မားခ႔တာရရင ေကးဇးျပျပး

ေျပာေပးျပငေပးၾကပါလ႔လညး ေတာငးပနပါတယ။ကြၽနေတာ အခနရရင ရသေလာက

ပမနေလးေရးေပးပါမယ။ ဒါေၾကာငမ႔ ပစေတြတငတာၾကာခ႔ရင၊ ေမးခြနးမားက replyၾကာခ႔ရင၊ နားလညျပး

ခြငလႊတေပးပါ(ေမးခ႔တာက ရရငရတယ မရရငမရဘး ေသခာေပါက ျပနေျဖပါမယ) အားလးပ

ကညေပးၾကမယလ႔ ေမာလငပါတယ။ ေကးဇးတငပါတယ။

basic of C# (part 2)

အရငဆး C# ဆတာ ဘာလ စေျပာရေအာင။ ကြၽနေတာသတာက ေျပာမာေနာ။ အားလးမနခငမလညး မနလမမယ။

က… စျပ….။

History of C#

C# ဆတာ Microsoft က ထတလကတ႔ programming language တစခေပါ။ C# ျဖစေပၚလာရတ႔ history က အရင ေျပာၾကညမယဗာ။ programming language ေတြ အမားၾကး ရတ႔ အထမာ ေတာေတာမားမား စလပဖးတာက C , C++ ထငပါတယ။ C န႔ ေရးရင ကြၽနေတာတ႔ Graphic User Interface ေတြ ေရးရတာ အဆငမေျပဘးဗ။ နညးနညးပငပနးတယ။ ဒါန႔ ပလြယတ႔ language ေတြ ရာလာတ႔ အခါ Microsoft ကထတတ႔ Visual Basic(VB) ကသးျဖစလာၾကတယ။ VBက Microsoft က ထတတ႔ Visual Studio လ႔ေခၚတ႔ programming language အစအေ၀းၾကးထက Language

Page 6: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 2

Written By SevenLamp

တစခေပါဗာ။ အဒ Visual Studio ထမာ VB, VC++, Visual Foxpro, စသညျဖငဗာ ေရြးခယလ႔ ရတ႔ language ေတြပါပါတယ။ VB ရ အားသာခကက Design အပငးမာ ေတာေတာေလးက လြယတာပါပ။ ဒါေပမယ အားနညးခကကေတာ Object-Oriented Technology က သးလ႔ မရဘး။ OOP မဟတဘးေပါဗာ။ ဒေတာ တကယ Enterprise Application ၾကးေတြ ေရးလ႔ အဆငမေျပဘးလ႔ ေျပာၾကတယ။ VC++ န႔ ေရးဖ႔ကလညး ေတာေတာေလးက ခကတယလ႔ ေျပာၾကတယဗ။ (ကြၽနေတာေတာ မေရးဖးပါ)။ ဒါေၾကာင ေနာကပငးမာ programmer ေတြက Java လငးက ေျပာငးၾကတယ။ ဒေတာ Microsoft က java က fightဖ႔ အၾကထတရျပေပါ။ တျခားprogramming language ေတြရ အားသာခကေတြက ၅ႏစေလာကေလလာျပးမ ၂၀၀၁၊၂၀၀၂ မာ Visual Studio .NET ဆတာၾကးက ထတလကတယဗ။ အဒ Visual Studio .NET ထမာ နဂ VS ေတြထက ပါေနၾကျဖစတ႔ VB, VC++ စတာေတြ အျပင Visual J# ဆတာန႔ Visual C# ဆတ႔ language အသစ ၂ ခက မတဆကေပးလကတယဗ။ java သမားေတြအတြက J# န႔ C သမားေတြ အတြက C# ဆပါေတာဗာ။ အဒ language ၂ ခမာ C# ကေတာ ေတာေတာေလးက ေအာငျမငသြားတယ။(ေပါကသြားတယေပါဗာ)။ Microsoft ကလညး C#က ေတာေတာညႊနးတယဗ။ တျခားlanguage ေတြ အားလးရ အားသာခကေတြက ယထားတ႔ language ဆပဗ။ VB လမ း design က အလြယတကေရးနငတယ။ Java လမး OO ရ feature ေတြက သးနငတယ။(java ထကေတာငမ OO ပစစေသးတယဆပဗ)(ဥပမာဗာ java မာဆရင data type ေတြက keyword အဆငမာပ ရတယ၊ C# မာေတာ datatype ေတြကယတငက classေတြ အျဖစရတယဗာ၊ class မဟတတာဆလ႔ operator ေတြပ ကနေတာတယတ႔)။

က ဒါကေတာ C# language ေမြးဖြားလာပေပါဗာ။

basic of C# (part 3)

.NET Framework

C# language စျပးပါလာတ႔ Visual Studio .NET 2002 မာပ Microsoft က .NET Framework ဆတာၾကးကပါ မတဆကေပးခ႔တယဗ။ အဒ .NET Frameworkၾကးထမာ အဓကကေတာ အပငး ၂ပငးပါတယဗ။ Common Language Runtime (CLR) န႔ Framework Class Library(FCL) ဆျပးေတာ။

CLR က ကြၽနေတာတ႔ .NET Platform မာ ေရးတ႔ ဘယlanguage codeကမဆ Microsoft Intermediate Language အျဖစေျပာငးေပးျပး Run လ႔ ရေအာငလပေပးတယေပါဗာ။ FCL ကေတာ predefined class library အစအေ၀းၾကးလ႔ပ နားလညထားတယဗ။ .NET Framework အလပလပပ ေလးၾကညၾကညရေအာငဗာ။

Page 7: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 3

Written By SevenLamp

အရငဆးကြၽနေတာတ႔ Programတစခေရးလကတယဗာ။ အဒါက source code လ႔ ေခၚတယ။ source code က ကြၽနေတာတ႔ ကြနပတာၾကးက နားမလညပါဘး။ ဒေတာ ကြနပတာနားလညမယ machine code အျဖစက ေျပာငးဖ႔လပါတယ။ ဒအလပက .NET Framework အတြငးမာ ရတ႔ သကဆငရာ Language အလက compiler ေတြက ဘာသာျပနအလပလပပါတယ။ ဒေနရာမာ သထားရမာက .NET Framework ကသးျပးေရးထားတ႔ code ေတြက compile လပရင machine code တနးမထြကပါဘး။ .NET Framework ကပနားလညနငတ႔ MSIL လ႔ေခၚတ႔ Microsoft Intermediate Language Code အျဖစပထြကပါတယ။ အဒ code ကမတဖန CLR ထမာ ရတ႔ Jet In-time Compilier (JIT) ေလးက ထပျပး Compile လပပါတယ။ ဒလလပလကမ Operating System ကနားလညတ႔ code အျဖစကေရာကရပါတယ။ ဆလတာကေတာဗာ .NET Framework မရရင .NET program ေတြ run လေတာငမရဘးေပါ။ ေနာကပငး Microsoft က ထတတ႔ OS ေတြမာ .NET Framework က build-in ထညေပးပါတယ။ ဒါမမဟတလညး internet ကေန framework က အလကားေပးပါတယ။ Visual Studio .NET ၾကးတစခလး ၀ယမယဆရငေတာ ေစးေတာေတာၾကးတယၾကားတယဗ။ (ကြၽနေတာတ႔ ျမနမာနငငမာေတာ ေပါပါတယ J) FCL အေၾကာငးေတာင ေမ႔ေတာမလ႔။ ဒလဗ Framework Class Library ဆတာ ကြၽနေတာတ႔ program ထမာ user monitor ေပၚ ‘hello’ ဆျပး ရကထတျပခငတယဆပါေတာ။ အဒါက C န႔ ေရးရင

printf(“hello”);

ဆျပး ရကတယဗာ။ အဒကဒထမာ ေရးလကတ႔ printf ဆတ႔ဟာေလးက function လ႔ေခၚတယဗ။ အဒ function က ကြၽနေတာတ႔ကယတငေရးတာမဟတဘးဗာ၊ library ထကေနေခၚသးတာေပါ။ အဒလ predefined function ေတြေရးျပး သမးထားတ႔ class အစအေ၀းၾကးက Framework Class Library လ႔ ေခၚေၾကာငးပါဗား။

က ဒဇယားေလးကေတာ .NET Framework version history ပါဗာ။

Version Release Visual Studio Default in Window

1.0 2002 Visual Studio .NET -

1.1 2003 Visual Studio .NET 2003 Window Server 2003

2.0 2005 Visual Studio 2005 -

3.0 2006 - Window Vista, Window Server 2008

3.5 2007 Visual Studio 2008 Window 7, Window Server 2008 RC2

4.0 Beta1 2009 Visual Studio 2010

Page 8: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 4

Written By SevenLamp

Chapter 2

basic of C# (part 4)

Hello World from C#

က အခကြၽနေတာတ႔ C# programming language န႔ program တစခေလာက စေရးၾကရေအာငဗာ။ programming language တငးရ first time program ေလး helloworld န႔ပ စလကရေအာင။ C# program စေရးဖ႔အတြက ခငဗားတ႔ စကမာ .NET Framework install လပထားျပးသားျဖစဖ႔ေတာ လတယဗ။ Visual Studio install လပထားျပးသားဆရင framework ထပသြငးစရာမလေတာဘးေနာ။ မသြငးရေသးဘးဆရငေတာ ဒမာ (http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en) သြားျပး download လပျပးသြငးလကဗာ။ framework သြငးျပးရငေတာ ကြၽနေတာတ႔ program စေရးလ႔ ရျပ။

C# program ေတြ ေရးခငတယဆရင Microsoft Visual Studio(IDE) က သးျပးေရးမာလား။ မသးပေရးမာလား နညးလမး ၂ ခရတယ။ အခပထမဆး program က java လ Visual Studio IDE မသးပေရးၾကရေအာင။ program ေရးဖ႔အတြက Text Editor တစခေတာလတယဗ။ ခငဗားတ႔စကမာ Notepad ေတာ ရျပးသား ျဖစမာပါ။ က Notepad ဖြငဗာ။

window key + R ႏပျပး Run Box ကေခၚလကဗာ ျပးရင အဒ Box ထမာ notepad လ႔သာရကထညလက၊ ဒါဆ Notepad ပြငလာလမမယ။ ဟတျပ… program စေရးရေအာင။ ဒအတငးေရးလကဗာ ျပးမ ျပနရငးမယ။

class Hello { static void Main() { System.Console.Write("Hello World"); } }

ေရးျပးျပေနာ… အေက ျပနရငးရေအာင။ C တ႔ java တ႔လပ C# program ေတြကလညး Main function ကေနစျပး အလပလပတယဗ။ ဒါေပမယ C# မာေတာ Main က M အၾကးန႔ ေရးရတယေနာ။ ျပးေတာ static ဆတ႔ keyword လညးထညရတယ။ အေက ကြၽနေတာတ႔

Page 9: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 5

Written By SevenLamp

ဒအတငးေရးလကျပ static void Main() ေပါ။ အဒ Main function ရ scope ကသကမတဖ႔ { န႔ } က သးတယ။ ဒါလညး C တ႔ java တ႔န႔ တတပ။ အဒ scope ထမာမ ကြၽနေတာတ႔ computer က ခငးေစခငတ႔ statement ေတြက ေရးရမယ။ statement တစေၾကာငး ျပးျပဆတငးမာ semicomar(;) ပတဖ႔လညး မေမ႔န႔ဥးေနာ။

monitor မာ စာရကခငးဖ႔ အတြက C# မာ Write or WriteLine function က သးရတယဗ။ အဒ Write function ကလညး ဒတငးေခၚခြငမရဘးဗ၊ function ရေနတ႔ class name န႔ တဆငေခၚရတယ။ Write function က Console class ထမာ ရတယေလ၊ ဒါေၾကာင ေရးတ႔အခါ Console.Write လ႔ေရးမမနမယ။ ဟတျပ ဒါဆ ေရမာ ဘာလ႔ System ဆတာၾကးပါရတာလ။ ဒါက ဒလရတယဗ အဒ System ဆတာက Namespace လ႔ ေခၚတယ။ Namespace ဆတာ class ေတြ စထားတ႔ class အစအေ၀းၾကး class library ေပါဗာ။ Console class က System namespace ထမာ ရတယ။ ဒါေၾကာင ကြၽနေတာတ႔က System.Console.Write လ႔ ေရးရတာဗ။ ဒလမး class name ရ ေရ႕မာ ထညမေရးခငဘး ဆလညး ေနာကတစနညးရေသးတယ။ class မေဆာကခငမာ library file အေနန႔ ၾကျပး ေၾကျငာေပးထားလ႔ ရတယ။ C မာ #include၊ java မာ import ဆျပး ေၾကျငာသလ C# မာလညး using ဆျပး ေၾကျငာရတယ။ ဒလမးဗာ…

using System; class Hello { static void Main() { Console.Write("Hello World"); } }

ခလ႔ class အေပၚမာ System namespace က using လပလကရင။ ဒ class အတြငးမာ အဒ System namespace ထက class ေတြက စတၾကကေခၚသးလ႔ ရျပ။ ေနာကထပထပေရးေနစရာ မလေတာဘး။ မဟတရင Console.Write တစခါရကခငတငး ေရ႕မာ System ဆတာၾကးက ျပနျပနထညေပးေနရလမမယ။ က Main function ေရးျပေတာ ျပးေရာလားဆေတာ မျပးေသးဘးဗ။ C# က OOP language ေလ။ ဒေတာ ဒfunction ကလညး class တစခခအထမာပ ထညေရးခြငရတယဗ။ function ၾကးပ ဒတငးေရးလ႔ မရဘး။ ဒါေၾကာင ကြၽနေတာက Hello ဆတ႔ class ထမာ ထညေရးလကတာ။ class name က ကယၾကကတာေပးခြငရပါတယ။ java မာလမး file name န႔ class name န႔ တစရာ မလဘး။ ဒေလာကဆရင အေပၚက program ထမာ ေရးထားတ႔ coding ေတြက နားလညျပထငတယေနာ။ အဓကနားလညေစခငတာကေတာ ဘာလပခငလ႔ ဘယကဒကေရးရတယ ဆတာက

Page 10: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 6

Written By SevenLamp

နားလညေစခငတာ။ က ကြၽနေတာတ႔ ေရးလ႔ ျပးျပဆေတာ ဒ source code ေတြက သမးရမယ။ Ctrl + S ႏပျပး C: Drive ေအာကမာ ခငဗားတ႔ ၾကကတ႔ နာမညန႔ သမးဗာ၊ အ file extension ကေတာ (.cs) ျဖစရမယေနာ။ ဥပမာ ကြၽနေတာက filename က Test1 လ႔ ေပးခငတယဆရင Test1.cs ဆျပးေပးရမယ။ ရတယေနာ… အေက အခကြၽနေတာတ႔ ဒ C# source file ေလးက compile လပျပး run ၾကညရေအာင။ compile လပဖ႔ အတြက command prompt ထသြားဖ႔လတယ။ က႔ Run Box ကေခၚျပး cmd လ႔ ရကလကဗာ ဒါဆ command prompt ေပၚလာမယ။ command prompt ထမာ လကရ cursor location က C: ေအာကက document and setting ေအာကက login ၀ငထားတ႔ username ေအာကက ေရာကေနလမမယထငတယ။ ဒါဆအဆငမေျပဘး ကြၽနေတာတ႔ Root Directory ေအာကက ျပနသြားရေအာင။ CD\ ရကျပး Enter ေခါကလက။ ဒါဆ C: ေအာကက ျပနေရာကသြားျပ။ အဒမာမ ကြၽနေတာက .NET Framework သြငးထားတ႔ location က ရာရေအာင။ ဒေနရာမာ ကြၽနေတာ တစခေျပာဖ႔ကနသြားတယ။ အေပၚပစမာ ေျပာခ႔တ႔ အတငး ကြၽနေတာတ႔ ေရးထားတ႔ source file ေတြက သကဆငရာ language ရ compilier န႔ compile လပရတယ။ C# အတြကေတာ C Sharp Compiler (csc.exe) ေပါဗာ။ ဒါေၾကာင csc.exe file ေလးက ရာမယဗာ။ က command prompt ထမာ ဒလေလးရကလကပါဥး။

dir csc.exe /s

ခဏေတာ ေစာငရမယထငတယ။ ရာလေတြ႔ျပဆရင အဒ compiler ေလးရတ႔ ေနရာက path ေပးရမယဗ။ ခကတာက ကြၽနေတာက path ေပးတာက ေမ႔ေနျပ။ ဒါေၾကာင အဒ compiler ရတ႔ location ကပ CD command သးျပး သြားလကမယဗာ။ ေၾသာဒါန႔ ခငဗားစကမာ framework version အမားၾကးရေနတာလ ျဖစနငတယေနာ။ ၾကကတ႔ version ေအာကက ၀ငလကဗာ။ ျပးရင compile လပရေအာင။

csc.exe C:\Test1.cs

ခလ compile လပလကေတာ compiler က exe file ထတေပးတယဗ။ ရာရင ရာၾကညလကဥး။

dir Test1.exe

ေတြ႔တယမလားဗ ကြၽနေတာတ႔ program ရ executable file ေလး။ အဒ file ေလးက run ရင ရျပေပါ။ တခေတာ မတထားဥးေနာ၊ ဒ exe file က .NET Framework ရမ run လ႔ ရမာေနာ။ အခ တခါတညး run ၾကညရေအာငဗာ။ exe file ဆေတာ ဒတငး filename ရကလကရပါပ။

Test1.exe or Test1

Page 11: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 7

Written By SevenLamp

က႔ ဒါဆရင ခငဗားတ႔ရ ပထမဆး C# program ရ output က ေတြ႔ရျပေပါ။

ကြၽနေတာ video training ေလးပါ တငေပးလကတယ။ ဒမာ ယဗာ။

http://ifile.it/38lwqa5

Compile လပရင program မာမားနငတာေလးေတြလညး ရတယဗ။

၁ – using, class, static, void အဒါေတြက စာလး အေသးန႔ေရးရမယ။

၂ – System, Console, Write, Main အဒါေတြကေတာ အစစာလးက အၾကးန႔ ေရးရမယ။

၃ – write function အဆးမာ ( ; ) ထညရမယ။

၄ – Hello World ဆတ႔ စာသားက (“ န႔ “) ထထညေရးရမယ။

ဒေလာကဆ အားလး run လ႔ ရၾကမာပါ။ စမးၾကညျပး တစခချပနေျပာၾကဗာ။

basic of C# (part 5)

data type of C#

အခ C# data type ေတြ အေၾကာငး ဆကေျပာရေအာငဗာ။ Data type ဆတာဘာလ။ ကြၽနေတာတ႔ user ေတြဆကေန data အခကအလကေတြက program ထမာ သမးထားဖ႔အတြက ကြၽနေတာတ႔ computer ရ memory ေပၚမာ ေနရာသြားယေပးရတယဗ။ အဒလ ေနရာယတာက Variable Declaration လပတယလ႔ ေျပာတာေပါ။ Variable declaration လပတ႔ အခါ memory ေပၚမာ ကယသမးခငတ႔ data ရ အမးအစား(data type)က ေၾကျငာေပးရတယ။ Number သမးမာလား၊ ဒါမမဟတ စာသားေတြသမးမာလား စသညျဖငေပါ။

C# မာ အဓက data type ၂ မးရတယဗ။ Value Type န႔ Reference Type ဆျပးေခၚတယဗာ။ Value Type ဆတာကေတာ memory ေပၚက ကြၽနေတာတ႔ ေၾကျငာထားတ႔ ေနရာမာ value ကတကရက သမးထားတာဗာ။ Reference Type ဆရငေတာ value က မသမးထားပ အဒ value ရေနတ႔ memory address ကပ ကြၽနေတာတ႔ရ variable ထမာ သမးထားတာက ဆလတာေပါ။

နမနာက ဒလဗာ…

Page 12: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 8

Written By SevenLamp

int num = 3;

number value data တခသမးဖ႔အတြက num ဆတ႔ variable တစခက memory ေပၚမာ ေနရာယလကပါတယ။ ျပး တခါတညး အဒ ေနရာမာ 3 ဆတ႔ value တစခက သမးလကပါတယ။ ေၾကျငာထားတ႔ ေနရာထမာ value သမးသြားတ႔ အတြက int ဟာ value type ျဖစပါတယ။

string st = “abc”;

ဒလပါပ abc ဆတ႔ စာသားက သမးဖ႔အတြက st ဆတ႔ variable က ေၾကျငာလကပါတယ။ ဒါေပမယ st ထကထညလကတ႔ value ျဖစတ႔ abc ဟာ st ထမာ မရပါဘး။ memory ရ တျခားတေနရာမာ ရသြားပါတယ။ အဒ abc ေရာကသြားတ႔ ေနရာရ address ကသာလင st ထကေရာကသြားပါတယ။ ဒါေၾကာင string ဟာဆရငျဖင reference type ထမာ ပါ၀ငပါတယ။

ရငးသြားေအာင ပေလးကၾကညပါ…

ဒါဆရင value type န႔ reference type က ခြျပး နားလညမယထငပါတယ။ ဟတျပ ဒါဆရင value type မာ ဘာေတြပါလ ဆကၾကညရေအာင။

value type ထမာ integral type ေတြ၊

Type Range Size

sbyte -128 to 127 Signed 8-bit integer

byte 0 to 255 Unsigned 8-bit integer

char U+0000 to U+ffff Unicode 16-bit character

short -32,768 to 32,767 Signed 16-bit integer

ushort 0 to 65,535 Unsigned 16-bit integer

Page 13: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 9

Written By SevenLamp

int -2,147,483,648 to 2,147,483,647 Signed 32-bit integer

uint 0 to 4,294,967,295 Unsigned 32-bit integer

long -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

Signed 64-bit integer

ulong 0 to 18,446,744,073,709,551,615 Unsigned 64-bit integer

floating point typeေတြ၊

Type Approximate range Precision

float ±1.5e−45 to ±3.4e38 7 digits

double ±5.0e−324 to ±1.7e308 15-16 digits

decimal type၊

Type Approximate Range Precision

decimal ±1.0 × 10−28 to ±7.9 × 1028 28-29 significant digits

boolean data type၊ enumeration data type န႔ structure data type ေတြပါ၀ငပါတယ။

reference type ထမာေတာ

string type၊ object type၊ array data type၊ class data type၊ interface န႔ delegate type

ေတြပါ၀ငပါတယ။

variable declaration အပငးမာ ကြၽနေတာတ႔ သဖ႔လတာတခရတယဗ။ ကြၽနေတာတ႔ variable name ေတြေၾကျငာတ႔ေနရာမာ C# keywords ေတြန႔ သြားျပးတလ႔မရဘးဗ။ Keywords

Page 14: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 10

Written By SevenLamp

ဆတာကေတာဗာ compiler က နားလညျပးသား စကားလးေတြေပါ။ သတ႔က reserved words လ႔လေခၚေသးတယဗ။

keywords table

abstract event new struct as explicit null switch base extern object this bool false operator throw break finally out true byte fixed override try case float params typeof catch for private uint char foreach protected ulong checked goto public unchecked class if readonly unsafe const implicit ref ushort continue in return using decimal int sbyte virtual default interface sealed volatile delegate internal short void do is sizeof while double lock stackalloc else long static enum namespace string

ဒဇယားထက keyword ေတာေတာမားမားက ကြၽနေတာတ႔ သျပးသားျဖစမာပါ။

basic of C# (part 6)

Page 15: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 11

Written By SevenLamp

Data Type Conversation

Data Type ေတြန႔ ပတသကျပး ေနာကထပ သထားစရာေလးေတြ ေျပာခငေသးတယဗ။ ကြၽနေတာတ႔ C# ထမာ 3 လ႔ ရကလကရင အဒ 3 ရ datatype က default အေနန႔ integer type ဗ။ ကြၽနေတာက long အျဖစေရးခငတယဆရင 3L လ႔ ေရးရမယ။ ကနတာေတြက ေအာကမာၾကညလကပါဥး။

3 => int

3L => long

3.0 or 3.0D => double

3.0F => float

3.0M => decimal

’3′ => char

“3″ => string

အေပၚမာ ျပထားတာကၾကညမယဆရင တကယ value က 3 ျဖစေပမယ သ႔က data type အမးမးမာ ေရးတ႔ပစေလးပါ။ အဒထမာ string type ကလြျပး ကနတ႔ type ေတြက numeric type ေတြပါ။ ဆလတာက သတ႔က ေပါငးႏႈတေျမာကစား လပလ႔ရတယ။ string type ကေတာ မရဘး။

ဥပမာ

string v1 = “3″;

string v2 = “4″;

Console.Write(v1+v2);

ဆရင output က 34 ဆျပး ျပေနလမမယဗာ။ ဆလတာကေတာဗာ 3 န႔ 4 က number အေနန႔ မေပါငးပ string အေနန႔ ေပါငးသြားတာေပါဗာ။ ဒေတာ ကြၽနေတာတ႔က string type အေနန႔ ရေနတ႔ value ေတြက ေပါငးခငတ႔ အခါမာ numeric type အျဖစက ေျပာငးဖ႔လလာျပေပါ။ ဒလမး datatype တစခကေန တစခက ေျပာငးဖ႔အတြကဆရင Data Type Conversation အေၾကာငးက

Page 16: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 12

Written By SevenLamp

သဖ႔လလာပါျပ။ အဒလ ေျပာငးတ႔ ေနရာမာ numeric type အခငးခငး ေျပာငးတာန႔ numeric type န႔ string type ေျပာငးတာ ဆျပး ခြေျပာပါမယ။

numeric type အခငးခငး ေျပာငးမယဆရင type conversation မာ ၂ မးရပါတယ။ အလြယမတမယဆရငေတာ ငယတ႔ type ကေန ၾကးတ႔ type က ေျပာငးတာ (Widening) န႔ ၾကးတ႔ type ကေန ငယတ႔ type က ေျပာငးတာ (Narrowing) ဆျပး ရတယဗ။ ဥပမာ int data type ကေန long က ေျပာငးခငရင widening , long ကေန int က ေျပာငးခငရငေတာ narrowing ေပါ။

int int_var1 = 123;

long long_var1 = int_var1; // implicit conversation (widening)

long long_var2 = (long) int_var1; // explicit conversation (widening)

int int_var2 = (int) long_var1; // explicit conversation (narrowing)

*** narrowing မာ implicit မရပါဘး *** object data type ကေန numeric type ကေျပာငးမယဆရင….

int i = 123;

object o = i; // implicit boxing

object o = (object) i; // explicit boxing

int i = (int) o; // unboxing

string type ကေနေျပာငးခငတယဆရငေတာ အဒလ type casts လပလ႔ မရေတာပါဘး။ ဒါဆရင ဘယလေျပာငးမလ? Convert Function ေတြကသးျပးေတာ ေျပာငးရပါမယ။ FCL ထက Convert class ထမာ data type တစခကေန တစခက ေျပာငးဖ႔ function ေတြရပါတယ။ သကဆငရာ Data type class ေတြထမာလ ရပါတယ။ အဒ function ေတြန႔ ေျပာငးရပါမယ။ ေအာကမာ နမနာၾကညပါ။

string st = “123″;

int i = Convert.ToInt32(st);

int i = Int32.Parse(st);

string st = Convert.ToString(i);

string st = i.ToString();

Page 17: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 13

Written By SevenLamp

အေက.. ဒါဆရင C# မာ data type ေတြ တခကေန တခက ေျပာငးတာ ေျပာငးတကမယေနာ။

Chapter 3

basic of C# (part 7)

အခ ကြၽနေတာတ႔ program ေလးတခေလာက ေရးၾကညရေအာင။ ကြၽနေတာက ဘာလပခငလဆရင user ဆကေန number value တစခေတာငးမယဗာ။ ျပးေတာ အဒnumber ရ square တနဖးက ျပနျပး ရကထတခငတယ။ ဟတျပေနာ ဒါဆ ေရးၾကညရေအာင…

အရငဆး C# မာ Main function ကေန စေရးရမယဆေတာ…

static void Main() { }

ဆျပး ေရးလကမယဗာ။ ျပးရင user ဆကေန ေတာငးမယ number က memory ေပၚမာ ခဏသမးထားဖ႔ အတြက ေနရာယ(variable declare) ရမယ။ ဒါေၾကာင….

int num;

ဟတျပး ဒါဆရင integer တနဖးေတြ သမးဖ႔အတြက ေနရာေလးရျပး။ အခ user က တနဖးတစခထညေပးပါလ႔ ေျပာခငတယ။ user က ေျပာတယဆတာက monitor မာ output ထတျပတာပေလ။ ဒါေၾကာင ဒလေလးေျပာလကမယ….

Console.Write(“Enter a number : “);

ဒါဆရင user က number တစခရကထညေတမယ။ အဒ number က လကခဖ႔ အတြက C# console application မာ ReadLine() function ကသးရမယ။ အဒ function ကလညး Console class ထမာရတယ။ ဒါေပမယ အဒ ReadLine function က user ဘာရကထညထည string data type ပ return ျပနတယ။ ဒေတာ user က 3 ရကထညရင “3” ဆျပး string type ျဖစသြားမယ။

Page 18: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 14

Written By SevenLamp

ဒါဆရင ကြၽနေတာတ႔ memory ေပၚမာေၾကျငာထားတ႔ integer variable ထက ဒတငးတနးျပး ထညလ႔မရေတာဘး။ string type ကေန integer type က convert လပေပးရေတာမယ….

string temp = Console.ReadLine(); num = Convert.ToInt32(temp);

ဒလေရးလညး ရပါတယ။

num = Convert.ToInt32(Console.ReadLine());

က… ကြၽနေတာတ႔ရ num variable ထမာ user ထညလကတ႔ တနဖးေလး ေရာကသြားပါျပ။ အခ user က square result ထတျပဖ႔ပကနပါေတာတယ…

Console.WriteLine(“Square of {0} is {1}”, num, num*num);

Result ထတျပလကတ႔ code ေလးက နညးနညးေလး ရငးျပပါမယ။ Write or WriteLine function အတြငးမာ parameter ၃ ခ ကြၽနေတာေပးလကပါတယ။ ပထမဆးတစခ “Square of {0} is {1}” ဆတာမာ {} အတြငးထမာ ေရးတ႔ ဟာ၂ခကလြျပး ကနတာေတြအားလးက ဒအတငးေပၚပါမယ။ အဒါက format string လ႔ ေခၚပါတယ။ ေနာကက Parameter ၂ ခကေတာ format string ထမာ ထညေပးလကခငတ႔ value ေတြပါ။ num က index 0 ၊ num*num က index 1 ေနရာမာ ရပါတယ။ အဒ value ေတြက format string ထမာ ျပနေခၚဖ႔ အတြက {} ကသးပါတယ။ index 0 ေနရာက value က ေခၚခငရင {0} လ႔ေခၚရပါမယ။ ဒအတငးပ index 1 ေနရာက ဟာကေခၚဖ႔အတြကေတာ {1} ေပါ။ ဒါဆရင နားလညမယထငတယေနာ။ အဒလ မေရးပ ေနာကတစမးလညး ေရးလ႔ရပါေသးတယ…

Console.WriteLine(“Square of “+num+” is “+num*num);

အခ ေနာကဆးအေနန႔ user က program ပတဖ႔အတြက ဒလေလး ေရးေပးလကပါမယ…

Console.Write(“\npress enter to close…”); Console.Read();

\n က ေနာကတစလငးဆငးဖ႔ အတြကသးျပး။ Console.Read() ကေတာ user enter ေခါကတာက ေစာငေနေပးပါတယ။ ဒ ပစာၦေလးထမာ ကြၽနေတာ Convert class န႔ Console class ၂ ခက သးထားပါတယ။ ဒါေၾကာင အေပၚဆးမာ ဒလေလးေရးေပးလကတယ….

Page 19: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 15

Written By SevenLamp

using System;

အားလးစျပး ေရးလကေတာ ဒလမး…

using System; class Program { static void Main() { string temp; int num; Console.Write("Enter a number : "); temp = Console.ReadLine(); num = Convert.ToInt32(temp); Console.WriteLine("Square of {0} is {1}", num, num * num); Console.Write("\npress enter to close..."); Console.Read(); } }

Output =>

Enter a number : 4 Square of 4 is 16

Press enter to close…

4 က user input ပါ။ ဒ program ေလးက ေရးဖ႔အတြက Visual Studio ထမာ File->New->Project->C# language->Console Application ကေရြးပါမယ။ ဒါဆရင class ေတြ Main function ေနရာေတြ IDE က auto လပေပးသြားလမမယ။ အဒ ထမာ ရကရပါပ။ ျပးလ႔ run မယဆရငေတာ F5 ပါ။ အဆငမေျပရင ျပနေျပာပါခငဗာ။

basic of C# (part 8)

မေန႔က Program ေလးန႔ပ ဆကေျပာရေအာငဗာ။ အဒprogram ေလးမာ user ဆကေန number value တစခေတာငးတယ။ square တနဖးက output ထတျပတယ။ အေက။ ဒါက user ကေန

Page 20: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 16

Written By SevenLamp

သတမထားမပ number မဟတတ႔ တျခား character ေတြထညလကတယဆပါေတာ… က program ဘာျဖစသြားမလ?

ဒပေလးထကလ ျဖစသြားမာေပါဗာ….

ဒါက error တကသြားတယလ႔ ေခၚမယထငတယ။ ဟတတယဟတ

က… အခ ကြၽနေတာေျပာခငတာက Error ေတြအေၾကာငးပါပဗာ။ ကြၽနေတာတ႔ program ေတြေရးတ႔အခါ error ဆတာေတြန႔က မလြမေသြေတြ႔ၾကေနရမာပါပ။ အဓကကေတာ error အမးအစား ၃ မ းရတယဗ။

1 – compile error ( grammar error, syntax error လလေခၚေသးတယဗ )

2 – logic error ( semantic error )

3 – run time error

1) Compile Error

Compile error ဘယအခနမာ ျဖစလညးဆေတာ ကြၽနေတာတ႔ ေရးလကတ႔ source code ေတြက compiler က နားမလညေတာဘး ဆရင compile error ျဖစတာေပါ။ ဥပမာအားျဖင statement အဆးမာ semicolon (;) ကနခ႔တာတ႔။ Main function က m အေသးန႔ ေရးတာတ႔ စသညျဖငေပါ။ compile error က အေတြ႔အမားဆးန႔ ေျဖရငးရအလြယဆး error အမးအစားျဖစတယဗ။

Page 21: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 17

Written By SevenLamp

2) Logic Error

Logic error ဆတာကေတာ programmer ရ စဥးစားပမားလ႔ ျဖစေစ၊ careless ျဖစျပး မား ရကမလ႔ ျဖစေစ၊ program ရ output မာ အေျဖမန မထြကေတာပ၊ wrong result ထြကလာတာမးက ဆလတာပါ။ ဥပမာ..

Console.WriteLine(“Square of {0} is {1}”, num, num*num);

လ႔ ေရးရမယေနရာမာ

Console.WriteLine(“Square of {0} is {1}”, num, num+num);

လ႔ ေရးလကမတယဆပါစ႔။ ဒါဆရင program က compile error တကမလား ? မတကဘးေနာ result ေတာျပမာပ။ ဒါေပမယ ျပတ႔ အေျဖက ကယလခငတ႔ အေျဖထြကမလား.. မထြကေတာဘးေလ။ ဟတတယမလား။ ဒါဆရင ဒ program မနတယလ႔ ေျပာလ႔ ရမလား။ မရပါဘး။ ဒလ error မ းက logic error လ႔ ေခၚပါတယ။ logic error ေတြက ေျဖရငးဖ႔ အတြကေတာ ကြၽနေတာတ႔ program က line by line Trace လကျပး error ကရာရပါမယ။

3) Runtime Error

Runtime error ကေတာ အေပၚဆးမာ ကြၽနေတာျပထားတ႔ ပထက error မ းေပါ။ user fault ေၾကာငျဖစေစ၊ ကြနပတာရ အမားေၾကာငျဖစေစ program မားသြားတာမးေပါ။ အျမတမးမားမလားဆေတာ user သာ အမနထညရင မမားဘး။ user ကမားထညတာန႔ ကြၽနေတာတ႔ program လညး မားသြားမယ။ ဒါေပမယ တကယေကာငးမြနျပညစတ႔ program တစချဖစဖ႔အတြက ဒလ error မ းေတြကလညး မျဖစေအာင programmer က စဥးစားေပးနငရမယ။

Runtime error ေတြက ေျဖရငးဖ႔အတြကေတာ ကြၽနေတာတ႔ Error Handling (Exception Handling) Statement ကသးရပါမယ။ အားလး သျပးသားျဖစတ႔ try…..catch ကေျပာတာပါ။

Exception Handling

Runtime error ေတြက handle လပဖ႔အတြက error ျဖစနငတ႔ statement ေတြက try{ န႔ } ၾကားမာ ေရးရပါမယ။ ျပးရင အကယလ႔ error ျဖစခ႔သညရေသာ အဒ error က ကငတြယေျဖရငးေပမယ statement ေတြကေတာ catch{ န႔ } ၾကားမာ ေရးရပါမယ။

ဥပမာ…

Page 22: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 18

Written By SevenLamp

try{ num = Convert.ToInt32(temp); } catch{ Console.WriteLine(“Invalid Input”); num = 0; }

String temp ထမာ ရတ႔ data က integer အျဖစေျပာငးလ႔ ရရင num ထက ၀ငသြားမယ။ catch ထက မ၀ငပ Program အလပဆကလပသြားမယ။ ေျပာငးလ႔ မရဘးဆရငေတာ catch ထက ၀ငလာျပး user က error message ျပတယ။ num ထက zero ထညျပး program အလပဆကလပပါလမမယ။ try.. catch ကသးျခငးေၾကာင ကြၽနေတာတ႔ program က လမးတ၀ကမာ ရပသြားတာမး ရေတာမာ မဟတပါဘး။ အခ error handling statement က detail ၾကညရေအာင။ အေပၚက example အတငးဆရင Convert လပတ႔ အခနမာ error တကတာန႔ catch ထက အလပေတြက သြားျပးလပမာပါ။ try statement ထမာ error ျဖစနငတ႔ statement က တစခထရတ႔ အခနမာ သပျပး ကစၥမရပ error messge ျပလ႔ရပါတယ။ ဒါေပမယ တခါတေလမာ error ျဖစနငတ႔ statement ေတြက တစခထကပျပးေတာလညး ရနငပါတယ။ error အမးအစားကလညး မတဘးဆရင catch ထမာ user က error ျပတ႔ ေနရာမာ detail information ျပလ႔ မရတ႔ အခကအခရလာပါတယ။ ဒ example ထမာ ဆရငပ error ျဖစနငတ႔ အေျခအေနက ၂ မးရေနပါတယ။ number အစားတျခားဟာထညလကရင FormatException ျဖစျပး၊ number ၾကးပ ၁၅ လးေလာကရကထညလကရင OverFlowException ျဖစပါတယ။ ဒါေပမယ ဘယexception ပျဖစျဖစ ကြၽနေတာတ႔ catch ထမာ ေရးထားတ႔ Invalid Input ဆတ႔ message ပ ျပပါလမမယ။ ဒါက ကြၽနေတာတ႔က ပျပး detail ၾကတ႔ message ျပခငတယဆရငေတာ Catch ေရးတ႔ အခါမာ Exception အမးအစားန႔ parameter ခြျပး လကခလ႔လညး ရပါတယ။ ဒလမးပါ..

try{ num = Convert.ToInt32(temp); } catch( FormatException ex ) { Console.WriteLine(“Please enter number value”); num = 0; } catch( OverflowException ex ) { Console.WriteLine(“Your number is too large”); num = 0;

Page 23: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 19

Written By SevenLamp

} catch { Console.WriteLine(“Unknown error”); num = 0; }

ဒါဆရငေတာ user ထညတာ number မဟတရင Please enter number value ဆျပး ျပပါမယ။ တနဖး အရမးၾကးေနရငေတာ Your number is too large ဆျပး detail ျပနငပါလမမယ။ ကဒါဆရင error အမးအစားေတြန႔ exception handling အေၾကာငးအၾကမးေလးေတာ သမယထငပါတယ။ program ေလးက ျပနျပငေရးလကပါဥးေနာ။

using System; class Program { static void Main() { string temp; int num; Console.Write("Enter a number : "); temp = Console.ReadLine(); try { num = Convert.ToInt32(temp); } catch (FormatException ex) { Console.WriteLine("Please enter number value"); num = 0; } catch (OverflowException ex) { Console.WriteLine("Your number is too large"); num = 0; } catch { Console.WriteLine("Unknown error"); num = 0; } Console.WriteLine("Square of {0} is {1}", num, num * num);

Page 24: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 20

Written By SevenLamp

Console.Write("\npress enter to close..."); Console.Read(); } }

ေနာကေနဆကၾကတာေပါ။

basic of C# (part 9)

အခကြၽနေတာတ႔ C# မာ သးတ႔ operator ေတြ အေၾကာငးက ဆကေျပာၾကရေအာင။ အေက operator ဆတာဘာကေျပာတာလ။ ကြၽနေတာတ႔ computer က ခငးေစတ႔ statement ေတြထမာ operator ေတြက သးေလ႔ ရၾကတယ။ ဥပမာ number ၂ ခက ေပါငးခငတယ ဆရင ( + ) operator ကသးတယ။ variable တခခထက တနဖး ထညေပးခငတယဆရင ( = ) operator ကသးတယ။ ဟတတယ မလား။ ကြၽနေတာတ႔ ဒ operator ေတြရ အလပေတြက သျပးသားပါ။ C# ရ Operator table ေလးၾကညလကဥးေနာ။

Operator category Operators

Primary x.y f(x) a[x] x++ x– new typeof checked unchecked ->

Unary + - ! ~ ++x –x

Page 25: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 21

Written By SevenLamp

(T)x true false & sizeof

Multiplicative * / %

Additive + -

Shift << >>

Relational and type testing < > <= >= is as

Equality == !=

Logical & | ^

Conditional && || ?:

Assignment = += -= *=

Page 26: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 22

Written By SevenLamp

/= %= &= |= ^= <<= >>= ??

Lambda =>

ကြၽနေတာ အဓက ေျပာခငတာကေတာ ဒ operator ေလးေတြန႔ ပတသကျပး သသငတာေလးေတြပါ။ အရငဆး statement တစခအတြငးမာ operator တစခထကပျပး ပါလာျပဆရင ဘယoperator က အရငဆး အလပလပသြားမလ။ ဥပမာဗာ ကြၽနေတာက output 20 ထြကခငတယဆရင ေအာကက ၂ ခမာ ဘယလေရးမ မနမလ။ 1) Console.Write( 2+3*4 ); 2) Console.Write( (2+3)*4 ); နပါတ ၁ အတငးဆရင output က 14 ဆျပး ထြကသြားပါလမမယ။ ဒါဆရငေတာ login error ျဖစျပေပါ။ no 2 အတငးေရးမ ကြၽနေတာလခငတ႔ output ရပါလမမယ။ ဒေနရာမာ operator ေတြရ႕ priority က သဖ႔လလာပါျပ။

Precedence Operators

Highest + – ! ~ ++x –x (T)x

* / %

+ -

<< >>

< > <= >= is as

== !=

Page 27: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 23

Written By SevenLamp

&

^

|

&&

||

Lowest = *= /= %= += -= <<= >>= &= ^= |=

operator ေတြ ၁ခထပပေတြ႔ရင Precedence အျမငဆးက အရငဆးလပပါတယ အတမတခငရငေတာ ( ) */ +- ေလာကမတထားရင လေလာကပါတယ။ ( ) ကအရငဆးလပမယ။ ျပးရင * / ။ ေနာကဆးမ + – ေပါ။ ရမယေနာ။ ေနာကတခေျပာခငတာက increment operator(++) & decrement operator(–) အေၾကာငးပါ။ ကြၽနေတာဆမာ ရတ႔ integer value တစခက 1 တးခင 1 ေလာခငရင အဒ operator ေတြ သးရပါတယ။ ဒ statement ေလးက output ဘယေလာကထြကမလ စဥးစားၾကညပါဥး။

int num1 = 3; int num2 = 4; Console.Write( num1++ + ++num2 );

output = 7 or 8 or 9 ???? increment operator က ေရ႕မာ ေရးရင pre incrememt ေနာကမာ ေရးရင post increment လ႔ခြတယ။ pre ဆရင အရငလပတယ။ post ဆရင ေနာကမလပတယေပါ။ ဒါဆရငေတာ output ဘယေလာကထြကမလဆတာ မနးနငေလာကျပထငတယေနာ။ (num1++) က ေပါငးတ႔ အခနမာ 3 ပရေသးတယ။ (++num2) ကေတာ 5 ျဖစေနျပး။ ဒါေၾကာင 8 ထြကပါတယ။

က ေနာကထပသထားစရာ တစခရေသးတယဗ။ အဒါကေတာ operator ေတြ႔ ေပါငး၊ႏႈတ၊ေျမာက၊စား လပတ႔ အခါ datatype တရင တတ႔type ထြကတယ။ မတဘးဆရငေတာ

Page 28: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 24

Written By SevenLamp

ၾကးတ႔type ထြကပါတယ။ ဒါေပမယ integer ထကေသးတ႔ type ေတြ ဆရငေတာ integer type ထြကပါတယ။ ဥပမာ…

short v1 = 3; short v2 = 4; short v3 = v1 + v2; // error တကပါလမမယ။ int v3 = v1 + v2; // ဆမ မနမယ။

ဒ program ေလး ေရးျပး run ၾကညလကပါဥး။

using System; public class Example1_6 { static void Main() { int i1 = 5; long l = i1 * 3L; decimal d = l; // implicit conversation int i2 = (int) d; // explicit conversation Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i2); int i3 = i2 / 2; Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i3); int i4 = i1 + i2 * 10; Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i4); int i5 = i2++ + ++i3; // increment operator Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i5); Console.Write("press enter to close..."); Console.Read(); } }

program ထက {0:C} ဆတာက 0 index က တနဖးက currency format န႔ ျပမယေျပာတာ။ {0:D5} ဆတာက ေနရာ ၅ ေနရာ အျပညယျပး ေနာကဆးကေန ျပမယ။ စသညျဖငေပါ။ run ၾကညလကရင သသြားမာပါ။ ဒေန႔ေတာ ဒေလာကန႔ပ နားလကရေအာငဗာ။ မရငးတာေမးခငတာေတြအားလး ေကာမန႔ ေပးခ႔ၾကပါေနာ။

Page 29: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 25

Written By SevenLamp

Chapter 4

basic of C# (part 10)

ကြၽနေတာတ႔ ဒေန႔ C# language မာ function ေတြ ဘယလတညေဆာကမလ။ ဘယလေခၚသးမလ စတာေတြက ေလလာရေအာင။ Function ဆတာ C# language မာမ မဟတပါဘး။ ဘယprogramming language မာမဆ ရပါတယ၊ သးၾကပါတယ။ function သးရတယ ရညရြယခကေတြေတာ အမးမ းရတာေပါဗာ။ ဥပမာအားျဖငေတာ ကြၽနေတာတ႔ program ရ ေနရာေတာေတာမားမားမာ သးဖ႔လအပနငတ႔ code ေတြက function ေလးအျဖစခြေရးထားမယဆရင ကယေခၚခငတ႔ေနရာကေန လြယလြယကကေခၚသးနငမယ။ မားျပားလတ႔ coding ေတြက ရႈပပြေနေအာငမထားခငတ႔အခါမ းမာလ function ေလးေတြ ခြျပးေရးေလ႔ရတာေပါ။ function ခြျပးေရးကေရးရမယဆတ႔ သကမတခကေတာ မရပါဘး။ ကြၽနေတာprogram စေရးတနးကဆရင function ခြေရးခငေပမယ ဘယနားက သြားျပး ခြရမလဆတာ မစဥးစားနငလ႔ code ေတြ အားလး main function ထမာ ပ စျပျပးေရးခ႔တာပါ။ ေနာကပငး ေရးလာရငးန႔ ဘယလမးဆရင function ေလးေတြ ခြေရးသငတယ ဆတာ သလာတာပါပ။ အဓကကေတာ program မားမားေရးလာရင အလလ နားလညလာပါလမ။

Function

Function တစခမာ return type , function name and argument list ဆျပး အပငး ၃ ပငးပါတယဗ။ ဥပမာ….

int AddTwoNumber( int p1, int p2 ) { return p1 + p2; }

ဒ function ေလးမာ int လ႔ေရးလကတာက return type လ႔ေခၚပါတယ။ ဒ function ေလးက ေခၚမယဆရင integer value တစခ ျပနထြကလာမယလ႔ ေျပာတာပါ။ return value မရဘးဆရငေတာ void လ႔ ေရးေပးရပါတယ။ မေပးလ႔ေတာ မရပါဘး။ AddTwoNumber ဆတာကေတာ function name ေပါ။ function name ေတြ ေပးတ႔ေနရာမာ space ေတြ special char ေတြ ထညေပးလ႔ မရပါဘး။ ( ) ထမာ ေရးလကတ႔ int p1, int p2 ဆတာေတြက argument ေတြပါ။ ဒ function ကေခၚသးခငရင ထညေပးရမယ parameter ေတြပါခငဗာ။ parameter လကမခခငတ႔ function ေတြေရးရငေတာ ( ) ထမာ ဘာမ မထညပေရးလ႔ ရပါတယ။

Page 30: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 26

Written By SevenLamp

Function တခမာေရးတ႔ပေပၚမတညျပး function declaration, function definition န႔ function call ဆျပး ခြျခားထားပါေသးတယ။ အခ အေပၚမာ ေရးလကတ႔ function က function definition လ႔ေခၚပါတယ။ ဘာလ႔လဆေတာ ဒ function ထမာ ဘာအလပေတြလပမယဆတ႔ statement ေတြထညေရးထားလ႔ပါ။ အဒ function ေတြက Interface ထမာ ထညေရးေတာမယဆရငေတာ အခလမး definition ေတြ ထညေရးလ႔ မရပါဘး။ function declaration ပေရးခြငရပါတယ။ ဒလမးပါ….

int AddTwoNumber( int p1, int p2 );

ကြၽနေတာတ႔ေရးထားတ႔ function ေတြက ျပနေခၚသးမယဆရငေတာ အဒါက function call လ႔ ေခၚပါတယ။ အေပၚက function ေလးက ျပနေခၚမယဆရင ဒလေလး ေခၚရမာပါ…

int res = AddTwoNumber( 3 , 4 );

note: function call ပျဖစျဖစ definition ပျဖစျဖစ declaration ပျဖစျဖစ function လ႔ ေျပာလကတာန႔ ( ) ပါရမယဆတာေတာ အေသသာမတထားလကဗာ။

function parameter Passing အေၾကာငးက ေနာကတပစမာ ေရးေပးမယဗာ။

basic of C# (part 11)

Parameter passing in C# Parameter passing ဆတာဘာလ အရငေျပာျပမယေနာ၊ ကြၽနေတာတ႔ေရးထားတ႔ function ေတြကျဖစေစ၊ library ထမာ ရျပးသား predefined function ေတြကျဖစေစ ေခၚသးေတာမယဆရင အဒ function definition မာ ေၾကျငာထားတ႔ argument(parameger) ေတြက ထညေပးဖ႔လအပပါတယ။ အလ function call မာ parameter ေတြထညေပးတာက parameter passing လ႔ ေခၚတာပါ။ C# မာ parameter passing ၄ မးရပါတယ။

1. Value Parameter 2. Reference Parameter 3. Output Parameter န႔ 4. Params Array တ႔ ျဖစပါတယ။

1) Value Passing C# မာ default parameter passing က value pass ပါ။ ဆလတာကေတာ ကြၽနေတာတ႔ function ထက parameter ေပးလကတာက actual value က copy တစခအေနန႔ ထညေပးလကတာပါ။

Page 31: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 27

Written By SevenLamp

ဒါေၾကာင function အတြငးမာ အဒ value က ဘယလပ ေျပာငးသညျဖစေစ၊ နဂ value ေတာ ေျပာငးသြားမာ မဟတပါဘး။ ဥပမာ..

using System; class valuePassTest { static void Main() { int num = 10; Console.WriteLine("before : " + num); Inc(num); Console.WriteLine("after : " + num); Console.Read(); } static void Inc(int num) { num = num + 1; } }

output

before : 10 after : 10

2) Reference Passing ကြၽနေတာက Inc function ထမာ ေျပာငးလကတ႔ တနဖးက main function ထမာပါ လကျပး ေျပာငးခငတယဆရငေတာ reference pass လပေပးရပါမယ။ reference pass လပဖ႔အတြကဆရင ref keyword ေလးက parameter ရ႕ေရ႕မာ ထညျပး ေရးေပးရမာပါ။ တခ႕ reference data type(class, array) ေတြက parameter ပ႔ရငေတာ ref keyword မထညေပးလညး ရပါတယ။

using System; class valuePassTest { static void Main() { int num = 10; Console.WriteLine("before : " + num);

Page 32: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 28

Written By SevenLamp

Inc(ref num); Console.WriteLine("after : " + num); Console.Read(); } static void Inc(ref int num) { num = num + 1; } }

output

before : 10 after : 11

3) output parameter Output parameter က reference parameter န႔ ဆငတပါတယ။ ဒါေပမယ output parameter ဆတ႔ အတငး သ႔က output return ျပနခငတ႔ variable ေတြအတြက သးေလ႔ရပါတယ။ function အတြငးမာ out variable ထကတနဖးက assign မလပေသးခင ယတြကလ႔မရပါဘး။

using System; class outputPassTest { static void Main() { int num = 10; int result; Square(out result, num); Console.WriteLine("result : " + result); Console.Read(); } static void Square(out int result, int num) { result = num * num; } }

output

result : 100

Page 33: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 29

Written By SevenLamp

4) Params Array Function call မာ ထညေပးလကတ႔ value ေတြက array တစခအေနန႔ လကခခငတယဆရင params keyword ကသးရပါတယ။ example ေလးပ ၾကညလကေတာေနာ။

using System; class paramsTest { static void Main() { Show(1, 3, 5, 7, 9); Console.Read(); } static void Show(params int[] arr) { foreach (int x in arr) { Console.Write(x + " "); } } }

output

1 3 5 7 9

ဒ example ေလးမာ ကြၽနေတာေပးလကတ႔ parameter 5 လးက array အေနန႔ လကခသြားတာက ေတြ႔ရမာပါ။

basic of C# (part 12)

Selection control statement

C# program ေတြ ေရးေနတ႔အခါ ကယေရးထားတ႔ statement ေတြက line by line compiler ကအလပလပေပးပါတယ။ တခါတေလ ကယေရးထားတာေတြအားလး မလပေစခငပ အေျခအေန တစခေပၚမတညျပး ေရြးခယလပခငးခငရင Condition စစဖ႔လလာပါျပ။ ကြၽနေတာတ႔ C# မာ condition ေတြစစဖ႔အတြက ပစ ၃မးေရးလ႔ရတယဗ။

if…..else

Page 34: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 30

Written By SevenLamp

switch

conditional operator (?:)

အရငဆး ဥပမာေလး တစခန႔ သတ႔က ဘယလသးလ ယဥျပး ေျပာၾကညမယဗာ။ ကြၽနေတာက user ဆကေန number value တစခက လကချပး even လား order လား ဆတာ စစတ႔ program ေလးတစခေရးၾကညရေအာင။

using System; class Program { static void Main() { int num; Console.Write("enter number"); try { num = Convert.ToInt32(Console.ReadLine()); if (num % 2 == 0) { Console.WriteLine("Even"); } else { Console.WriteLine("Odd"); } } catch { Console.WriteLine("Error"); } Console.Read(); } }

ကြၽနေတာ အနေရာကကာလာန႔ ေရးထားတ႔အပငးေလးက ျပနရငးျပပါမယ။ user ထညလကတ႔ တနဖးက num ထမာ သမးလကပါတယ။ အဒ တနဖးက even ျဖစလားစစဖ႔အတြက 2 န႔ စားၾကညပါတယ။ အၾကြငးက 0 န႔ ညေနရင စားလျပတတယေပါ။ ဒါဆရင စကနးျဖစျပး စားလ႔ မျပတဘးဆရငေတာ မကနးပါ။ if ေနာကမာ ကယစစခငတ႔ expression က ( န႔ )

Page 35: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 31

Written By SevenLamp

ထထညေရးရပါတယ။ ျပး { } အတြငးမာ မနရင လပခငတ႔ အလပကေရးတယ။ else ေနာကက { } ထမာေတာ မားရင လပခငတ႔ အလပက ေရးရပါတယ။ အခကြၽနေတာေရးထားသလမး လပခငတ႔ အလပက statement တစေၾကာငးထဆရင { } က မထညေပးဘး ဆရငလညး မနပါတယ။ statement တစေၾကာငးထကပရငေတာ { } က မထညေပးလ႔ မရပါဘး။ if condition မာ မနရငလပခငတာပ ရျပး မားရင လပခငတာ မရဘး ဆရငလညး else အပငးက ထညမေရးရပါဘး။ အ.. မားရငလပခငျပး မနရင လပခငတာ မရဘးဆရငေတာ if က ျဖတထားျပး else ၾကးပ ေရးလ႔ေတာ မရဘးေနာ။ အလလပခငတယဆရငေတာ if () ထမာ not (!) ခေပးရပါမယ။

က.. အခ switch ကသးျပး ေရးၾကညရေအာင။

using System; class Program { static void Main() { int num; Console.Write("enter number"); try { num = Convert.ToInt32(Console.ReadLine()); switch (num % 2) { case 0: Console.WriteLine("Even"); break; default: Console.WriteLine("Odd"); break; } } catch { Console.WriteLine("Error"); } Console.Read(); } }

switch ကသးျပး စစဖ႔အတြက switch ေနာကမာ ကယစစခငတ႔ condition တစခထညေပးရတယ။ ျပး အဒ condition ကထြကလာမယ result ေတြက case ေနာကမာ ေရးျပးစစရပါတယ။ case

Page 36: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 32

Written By SevenLamp

ေတြၾကကသေလာက ေရးလ႔ရပါတယ။ case တစခစအဆးမာ break ထညေပးရပါတယ။ default ဆတာကေတာ else သေဘာမးပါ။ အေပၚက case ေတြအားလး မားခ႔ရငလ႔ အဓပၸါယရပါတယ။

ဒါေလးကပ conditional operator န႔ ေျပာငးစစၾကညရေအာင…

using System; class Program { static void Main() { int num; Console.Write("enter number"); try { num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine( (num % 2 == 0) ? "Even" : "Odd" ); } catch { Console.WriteLine("Error"); } Console.Read(); } }

Conditional operator ကသးရငေတာ ( ? ) ရ႕ေရမာ ကြၽနေတာစစခငတ႔ expression ကေရးရတယ၊ ( ? ) ရ႕ေနာကမာ မနရငလပခငတာေရး ( : ) ရ႕ေနာကမာေတာ မားရင လပခငတာက ေရးရပါတယ။

Selection statement တစခစမာ သ႔ အားသာခကန႔ သရၾကပါတယ။ ဒထမာ အသးအမားဆးကေတာ အားလးသၾကတ႔ if … else statement ပါပ။ condition စစခငတ႔ေနရာ ေတာေတာမားမားမာ if – else ကသးၾကေလ႔ရပါတယ။ if-else မာ variable အခငးခငး တကစစလ႔လညး ရပါတယ။ တခါတေလမာေတာ ကြၽနေတာတ႔မာ စစစရာ အေျခအေနေတြ အရမးမားေနရငေတာ if-else န႔စစရတာ အလပရႈပတယထငရင switch ကသးေလ႔ ရပါတယ။ ဥပမာဗာ.. ကြၽနေတာက user ဆကေန ၀ ကေန ၁၀ အတြငး number တစလးထညေပးပါလ႔ေတာငးမယ။ ျပး.. user ထညလကတ႔ number က ျပနစစမယဆပါေတာ။ ဒလမးဆရငေတာ if-else ထက switch က ပျပးသးလ႔ေကာငးမာပါ။ conditional operator န႔ေရးရငေတာ အရမးက ရႈပေထြးသြားမာပါ။ လး၀ အဆငေျပမာမဟတပါဘး။

Page 37: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 33

Written By SevenLamp

if-else

if(num == 0) Console.WriteLine("Zero"); else if (num == 1) Console.WriteLine("One"); else if (num == 2) Console.WriteLine("Two"); else if (num == 3) Console.WriteLine("Three"); else if (num == 4) Console.WriteLine("Four"); else if (num == 5) Console.WriteLine("Five"); else if (num == 6) Console.WriteLine("Six"); else if (num == 7) Console.WriteLine("Seven"); else if (num == 8 ) Console.WriteLine("Eight"); else if (num == 9) Console.WriteLine("Nine"); else Console.WriteLine("Greater than 9");

switch

switch(num) { case 0:Console.WriteLine("Zero"); break; case 1:Console.WriteLine("One"); break; case 2:Console.WriteLine("Two"); break; case 3:Console.WriteLine("Three"); break; case 4:Console.WriteLine("Four"); break; case 5:Console.WriteLine("Five"); break;

Page 38: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 34

Written By SevenLamp

case 6:Console.WriteLine("Six"); break; case 7:Console.WriteLine("Seven"); break; case 8:Console.WriteLine("Eight"); break; case 9:Console.WriteLine("Nine"); break; default:Console.WriteLine("Greater than 9"); break; }

Conditional Operator

Console.WriteLine((num == 0) ? "Zero" : (num == 1) ? "One" : (num == 2) ? "Two" : (num == 3) ? "Three" : (num == 4) ? "Four" : (num == 5) ? "Five" : (num == 6) ? "Six" : (num == 7) ? "Seven" : (num == 8 ) ? "Eight" : (num == 9) ? "Nine" : "Greater than 9");

Switch န႔ေရးတာ အရငးဆးျဖစမယထငတယေနာ။ ဒါေပမယ switch ရ႕ အားနညးခကေတြကလညး ေတာေတာမားတယဗ။ switch မာ case ေနာကမာ constant expression ပေရးခြငရတယ။ variable ေတြန႔စစလ႔ မရဘး။ ဥပမာ

int val = 0; if(num%2==val) // this is ok switch(num%2) { case val: // this is not ok ( coz : val is a variable name, not a constant )

Conditional operator ကေတာ သပရႈပရႈပေထြးေထြး စစစရာ မလတ႔ အခါမးမာ သးတယ။ statement တစေၾကာငးထမာ condition စစတ႔ အပငးကအျပးအစး ထညေရးခငရင သးတာေပါ။ က… Selection Control Statement ေကာငးေကာငး ေရးတကေလာကျပ ထငတယ မရငးတာေတြ ရရင ျပနေမးၾကပါ ခငဗ။

Page 39: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 35

Written By SevenLamp

Chapter 5

basic of C# (part 13)

ဒေန႔ ကြၽနေတာတ႔ looping ေတြ အေၾကာငး ဆကရေအာင။ looping ဆတာဘာလ…. အလပတစခက ထပတလလ လပတာက loop လေခၚတယ။ ဥပမာဗာ ကြၽနေတာက screen မာ လငး၁လငးမာ star(*) တစလးပါတ လငး ၁၀လငးရကျပခငတယ ဆပါေတာ။ ဒါကေရးမယဆရင Console.WriteLine(“*”); ဆတာက ၁၀ခါေရးရမာေပါ။ ဟတတယမလား။ ဒလ ၁၀ခါမေရးပ ၁ခါပေရးျပး အဒ statement ကပ ၁၀ၾကမလပေပးပါလ႔ compiler ကခငးခငရင ကြၽနေတာတ႔ looping ကသးရေတာမာပါ။ C# မာ looping ၄ မ းရပါတယ။

၁။ while

၂။ do – while

၃။ for

၄။ foreach

looping ဆရင ေတာေတာမားမား သးၾကတာက for loop ပါ။ looping ေတြမာ looping variable ဆတာေလး မားေသာအားျဖငရၾကပါတယ၊ ဥပမာ looping ၁၀ၾကမလပမယဆရင လကရမာ ဘယႏစၾကမရျပလဆတာ မတေပးထားမယ variable ေလးေပါ။ looping အလပလပဖ႔အတြက အဓက အခက ၃ခက သရပါမယ။ loopng variable ေလး ဘယကစျပး အလပလပမလ ဆတ႔ start ရယ၊ ဘယအခနထအလပလပမလဆတ႔ stop ရယ၊ ဘယလ တးသြားမလဆတ႔ step ရယေပါ။ ဒ၃ခကက for looping မာ ဒလေရးပါတယ…

for( start; stop; step ) { statements; }

Example:

for( int i = 1; i<=10; i++ ) { Console.WriteLine(“*”);

Page 40: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 36

Written By SevenLamp

}

start ဆတာ looping variable ေလး စေၾကျငာျပး တနဖးတစခထညေပးလကတ႔ အပငးျဖစပါတယ။ stop ဆတာကေတာ condition တစချဖစျပး၊ အဒ condition မာ မနေနသေရႊ႕ looping က အလပလပေနမာပါ။ step အပငးမာေတာ looping variable ထက ေျပာငးသြားခငတ႔ တနဖးတခခထညေပးရပါတယ။ အေပၚက ဥပမာမာ looping variable ထထတနဖးက ၁တးသြားခငလ႔ i++ လေရးတာပါ။ တခါတေလ start အပငးက looping ရ႕ အေပၚမာလညး ေရးတာေတြ႕ဖးမာပါ။ ဒလပါပ step ကလညး looping statements ေတြထမာ ထညေရးလ႔ရပါတယ။ ဒါဆရင ဒလေလး ျဖစသြားမာေပါ။

start; for( ; stop; ) { statements; step; }

Example:

int i = 1; for( ; i<=10; ) { Console.WriteLine(“*”); i++; }

အခေရးျပလကတ႔ for looping ေလးက while looping န႔ ေျပာငးေရးမယဆရငေတာ ဒလျဖစသြားပါမယ။

start; while ( stop ) { statements; step; }

Example:

int i = 1; while( i<=10 )

Page 41: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 37

Written By SevenLamp

{ Console.Write(“*”); i++; }

က… အဒ while loop ေလးမာပါတ႔ while() ေလးက ေအာကကပ႔ျပးေရးမယ ဆရငေတာ do-while ေလးက ဒလပစပါ။

start; do{ statements; step; }while( stop );

Example:

int i = 1; do{ Console.WriteLine(“*”); i++; }while( i<=10 );

do-while looping မာ condition စစတ႔ အလပက ေနာကဆးမာ ေရးလကေတာ condition မနသညျဖစေစ၊ မားသညျဖစေစ အနညးဆးတစၾကမေတာ looping ထက statement ေတြက အလပလပသြားမာပါ။ for loop န႔ while loop ကေတာ မားရင တစၾကမမ အလပလပမာ မဟတပါဘး။

basic of C# (part 14)

တခါတေလ ကြၽနေတာတ႔ Looping ေတြထမာ looping variable မပါတာမးလညး ရပါတယ။ looping က အၾကမအေရအတြက အတအက မဟတပ looping variable မပါတ႔ looping မး သးဖ႔ လလာျပ ဆရငေတာ while န႔ do-while ကသးေလရပါတယ။ ဥပမာ.. ကြၽနေတာက user ဆက character တစလးလကခမယ၊ ျပးရင အဒ character ရ႕ ASCII value ကျပနျပးထတျပေပးမယ။ ဒအလပကပ user ၾကကသေလာက လပနငတယ။ မလပခငေတာဘးဆရင ESC key ႏပျပးထြကရမယ။ ဟတျပေနာ ဒ program ေလးေရးၾကညရေအာင။

using System; class forlooptest

Page 42: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 38

Written By SevenLamp

{ static void Main() { bool stop = false; do { Console.Write("Enter a char to see ASCII value of it (or) press ESC to close."); ConsoleKeyInfo cki = Console.ReadKey(); if (cki.Key != ConsoleKey.Escape) Console.WriteLine("\n{0} = {1}\n", cki.Key.ToString(), (int)cki.KeyChar); else stop = true; } while (stop==false); } }

ဒ program ေလးမာ looping ဆကလပမလား မလပေတာဘးလား ဆတာက stop ဆတ႔ boolean variable ေလးန႔ ထနးထားတယ။ default value အေနန႔ false ထညေပးထားတယ(program မပတဖးလ႔ ဆလတာေပါ) user ဆကေန key တစခထလကခမယဆရင Console.ReadKey() function ကသးရတယ။ သက ConsoleKeyInfo ဆတ႔ structure ေလး return ျပနတယ။ အဒ ConsoleKeyInfo structure ထမာ Key ဆတ႔ property က user ရကလကတ႔ ConsoleKey အမးအစားျဖစျပး၊ KeyChar ကေတာ character ျပနထတေပးတယ။ ဒါေၾကာင user ရကလကတ႔ key က Escape န႔ မတဘးဆရင user က output ထတျပတယ။ တတယဆရငေတာ program ပတဖ႔အတြက stop ထက true ထညေပးလကတယ။ ေနာကဆးမ while condition မာ stop ထက တနဖးဟာ false န႔ ညလား စစလကတယ။ ညရင looping က ေနာကတစေခါကျပနလပမယ။ မညဘးဆရင program ပတသြားမာပါ။

foreach looping foreach looping က collection(အစအေ၀း) တစခအတြငးမာ ရသေလာက အားလး လပခငတယဆရင သးေလ႔ရပါတယ။ array ထမာ ရသေလာကလပခငတယ၊ class ထက property ေတြအားလးလပခငတယ၊ ဒလ အေျခအေနမ းမာ foreach loop ကသးပါတယ။ ဥပမာ.. ကြၽနေတာ ဘေလာက လာၾကညတ႔ သငယခငးေတြ အားလးက တစေယာက laptop တစလး လကေဆာငေပးခငတယ ဆရင foreach ကသးျပး ဒလ ေရးရမာပါ..

foreach( People p in myBlog.visitors ) { p = “a laptop”; }

Page 43: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 39

Written By SevenLamp

foreach ကသးလကျခငးအားျဖင ကြၽနေတာ ဘေလာက လာၾကညတ႔သ ဘယေလာကရလ ဆတာက သေနစရာ မလေတာပါဘး။ visitor မကနမခငး ဒ looping က အလပလပမာပါ။ foreach looping မာေတာ start ေတြ stop ေတြ step ေတြ မလပါဘး။ in keyword ရ႕ ေရ႕မာ colletion အတြငးမာ ရတ႔ value ေတြရ႕ datatype ကေၾကျငာရျပး in ရ႕ ေနာကမာေတာ collection name ကေပးရပါတယ။ အခ foreach ကသးျပး program ေလးတစခ ေရးၾကညရေအာင။ ကြၽနေတာက user ဆက စာေၾကာငးတစေၾကာငးလကခမယ။ ျပးရင အဒ စာေၾကာငးထမာ ရတ႔ character ေတြရ ASCII value က ျပနျပး ျပမယ။

using System; class forlooptest { static void Main() { string st; Console.Write("Enter a string : "); st = Console.ReadLine(); foreach (char c in st) { Console.WriteLine("{0} = {1}", c, (int)c); } Console.Read(); } }

basic of C# (part 15)

အခ ကြၽနေတာတ႔ C# မာ သးလ႔ရတ႔ Array ေတြအေၾကာငး ေလလာရေအာင။ C# မာ array အမးအစား ေတာေတာစစလငလငက သးလ႔ရပါတယ။ အရငဆး ကြၽနေတာတ႔ သျပးသား single dimension array ေလးကေန စလကရေအာင။ ကြၽနေတာက integer value ၅ ခသမးဖ႔အတြက array ေလးတစခ ေဆာကခငရင ခလေၾကျငာရမာပါ။

int[ ] arr = new int[5];

ျပးရင အဒ array ထက တနဖး ၅ခ ထညခငတယဆရင ခလေရးရမယ။

arr[0] = 2; arr[1] = 4;

Page 44: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 40

Written By SevenLamp

arr[2] = 6; arr[3] = 8; arr[4] = 0;

ေနာကတစနညးအားျဖင array ေၾကျငာေနတနးမာ တနးဖးကပါ ထညေပးလကခငတယဆရင လညးရပါတယ။ အဒါက array initialization လ႔ေခၚပါတယ။ ဒလမးပါ….

int[ ] arr = new int[ ] { 2, 4, 6, 8, 0 };

အခလမး statement တစေၾကာငးထမာ array declaration ေရာ initialization ပါ ေပါငးလပမယဆရင ေနာကတစမ းက ဒလလညး ေရးလ႔ ရပါတယ…

int[ ] arr = { 2, 4, 6, 8, 0 };

ဒါေပမယ statement ၂ ေၾကာငးခြေရးမယဆရငေတာ new int[ ] ဆတ႔ အပငးေလးက မထညလ႔ မရပါဘး။

int[ ] arr; // declaration statement arr = new int[ ] { 2, 4, 6, 8, 0 };// initialization statement

example ေလး တစခေလာက ေရးၾကညရေအာင..

using System; class forlooptest { static void Main() { int[] arr1 = { 1, 3, 5, 7, 9 }; int[] arr2 = { 2, 4, 6, 8, 0 }; int[] arr3 = new int[5]; for (int i = 0; i < arr1.Length; i++) { arr3[i] = arr1[i] + arr2[i]; } Console.Write("Result array : "); foreach (int v in arr3) Console.Write(v + " "); Console.Read(); } }

Page 45: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 41

Written By SevenLamp

multi-dimension array ဆတာကေတာ dimension တစခထကပပါတ႔ array လ႔ ဆလတာေပါ ။ dimension တစခစက ( , ) ေလးန႔ ချပးေရးေပးရပါတယ။

int[,] arr = new int[3,2];

အခ ေၾကျငာလကတ႔ array ေလးမာ dimension ၂ ခပါျပး၊ ပထမ dimension မာ ၃ ခနး၊ ဒတယ dimension မာ ၂ ခနး၊ ယသြားပါမယ။ တနဖးထညမယဆရင…

arr[0,0] = 1; arr[0,1] = 2; arr[1,0] = 3; arr[1,1] = 4; arr[2,0] = 5; arr[2,1] = 6;

multidimensional array ေတြကလညး initialize လပလ႔ရပါတယ။ ဒလမးပါ…

int[,] arr = { {1,2} , {3,4} , {5,6} } ;

multidimensional array ေတြက looping ပတမယဆရငေတာ dimension အေရအတြကေပၚမတညျပး loopingေတြ ေရးရမာပါ။

for (int i = 0; i <= arr.GetUpperBound(0); i++) { for (int j = 0; j <= arr.GetUpperBound(1); j++) Console.Write(arr[i, j]+" "); Console.WriteLine(); }

GetUpperBound function ေလးက demension တစခရ႕ upperbound တနဖးက return ျပနပါတယ။ ဒါေၾကာင ကယသခငတ႔ dimension index ေလးက parameter ထညေပးရပါတယ။ အခကြၽနေတာတ႔ matrix 2 ခ ေျမာကတ႔ program ေလး ေရးၾကညရေအာင။ နညးနညးေတာ ရညျပး ႐ႈပမယထငတယ

using System; class Program { static int GetInteger() {

Page 46: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 42

Written By SevenLamp

try { return Convert.ToInt32(Console.ReadLine()); } catch { return 1; } } static void Main(string[] args) { int r1, r2, c1, c2; int[,] matrix1; int[,] matrix2; int[,] matrix3; Console.WriteLine("First Matrix\n************"); Console.Write("row : "); r1 = GetInteger(); Console.Write("col : "); c1 = GetInteger(); matrix1 = new int[r1, c1]; Console.WriteLine(); Console.WriteLine("Second Matrix\n************"); Console.Write("row : "); r2 = GetInteger(); Console.Write("col : "); c2 = GetInteger(); matrix2 = new int[r2, c2]; if (!((r1 == 1 && c1 == 1) || (r2 == 1 && c2 == 1) || (c1 == r2))) { Console.WriteLine("\nOut of result!"); Console.Read(); return; } Console.WriteLine(); for (int i = 0; i <= matrix1.GetUpperBound(0); i++) { for (int j = 0; j <= matrix1.GetUpperBound(1); j++)

Page 47: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 43

Written By SevenLamp

{ Console.Write("Enter value for first matrix : row {0}, column {1} : ", i, j); matrix1[i, j] = GetInteger(); } } Console.WriteLine(); for (int i = 0; i <= matrix2.GetUpperBound(0); i++) { for (int j = 0; j <= matrix2.GetUpperBound(1); j++) { Console.Write("Enter value for second matrix : row {0}, column {1} : ", i, j); matrix2[i, j] = GetInteger(); } } if (c1 != r2) { if (r1 == 1 && c1 == 1) { matrix3 = new int[r2, c2]; for (int i = 0; i <= matrix2.GetUpperBound(0); i++) for (int j = 0; j <= matrix2.GetUpperBound(1); j++) matrix3[i, j] = matrix2[i, j] * matrix1[0, 0]; } else { matrix3 = new int[r1, c1]; for (int i = 0; i <= matrix1.GetUpperBound(0); i++) for (int j = 0; j <= matrix1.GetUpperBound(1); j++) matrix3[i, j] = matrix1[i, j] * matrix2[0, 0]; } } else { matrix3 = new int[r1, c2]; for (int i = 0; i <= matrix1.GetUpperBound(1); i++) { for (int j = 0; j <= matrix1.GetUpperBound(0); j++) { for (int k = 0; k <= matrix2.GetUpperBound(1); k++) matrix3[j, k] += matrix1[j, i] * matrix2[i, k];

Page 48: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 44

Written By SevenLamp

} } } Console.WriteLine("\nResult Matrix\n*************"); for (int i = 0; i <= matrix3.GetUpperBound(0); i++) { for (int j = 0; j <= matrix3.GetUpperBound(1); j++) { Console.Write(matrix3[i, j] + " "); } Console.WriteLine(); } Console.Read(); } }

Chapter 6

basic of C# (part 16)

ကြၽနေတာတ႔ array ေတြ ေၾကျငာတ႔ အခါမာ integer array ေၾကျငာရင integer ပ သမးလ႔ ရပါမယ။ string array ဆရငလညး string ေတြပ သမးမာေပါ။ ဒလမဟတပ ကယၾကကတ႔ data type က သမးလ႔ ရခငရငေတာ object array ေဆာကေပးရပါတယ။

object[] arr = new object[3]; arr[0] = 1; arr[1] = 2.2; arr[2] = "abcdefg";

အခထ ကြၽနေတာတ႔ သးခ႔တ႔ array ေတြရ႕ size ဟာ static size ျဖစပါတယ။ ကြၽနေတာတ႔ array က ၃ ခနးေၾကျငာလကရင ၃ ခနးထကပျပး တနဖးထညလ႔ မရပါဘး။ ကြၽနေတာတ႔ သးမယ array ရ႕ size က dynamic size အျဖစသးခငတယ ဆရငေတာ သးျခားအေနန႔ collection class ေတြက သးၾကရမာပါ။ ပထမဆးအေနန႔ ArrayList Class အေၾကာငး စေျပာပါမယ။ ArrayList Class က array တစခလမး အလပလပေပးပါတယ။ သက variant size ပါ။

Page 49: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 45

Written By SevenLamp

စေၾကျငာခငးခငးမာ ArrayList ရ႕ capacity က ၄ ခနးယထားေပးပါတယ။ ကြၽနေတာတ႔ တနဖးထညရငးန႔ ၄ခနးျပညျပးလ႔ ေနာကထပထပထညတာန႔ capacity က ၈ခနးျဖစသြားမာပါ။ ကယတကယ တနဖးထညထားတ႔ အေရအတြကကေတာ count ဆတ႔ property ကေန ျပနသနငပါတယ။ ArrayList က zero base index ျဖစျပးေတာ သ႔ရ႕ index က integer type ပါ။ ArrayList ကလညး object type လကခတာျဖစတ႔ အတြက ကြၽနေတာတ႔ ၾကကတ႔ type ထညေပးခြငရပါတယ။ example ေလးၾကညရေအာင။

using System; using System.Collections; class arraylistTest { static void Main() { object[] arr = new object[3]; arr[0] = 1; arr[1] = 2.2; arr[2] = "abcdefg"; ArrayList ar = new ArrayList(); ar.Add(1); ar.Add(9.456); ar.Add("ABC"); ar.Add('Z'); ar.Add(new arraylistTest()); for (int i = 0; i < ar.Count; i++) { Console.WriteLine("{0}\t( {1} )", ar[i], ar[i].GetType()); } Console.WriteLine("\nActual Size of your Array : " + ar.Count); Console.WriteLine("Total Capacity of your Array : " + ar.Capacity); Console.Read(); } }

Hashtable Class Hashtable class ထမာ key/value တြ႕ data ေတြ လကခပါတယ။ key/value အတြလကက DictionaryEntry လ႔ေခၚပါေသးတယ။ ArrayList မာ ကြၽနေတာတ႔ index က integer type

Page 50: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 46

Written By SevenLamp

သးပါတယ။ Hashtable မာေတာ index ေထာကဖ႔အတြက key ကသးပါတယ။ သကလညး object type ပါ၊ ဒါေၾကာင ကြၽနေတာတ႔ ၾက ႔ကတ႔ type န႔ index ေထာကလ႔ ရပါတယ။ သမးမယ data ေတြကေတာ value အပငးမာ သမးရပါတယ။ သလညး object type ပါပ။ Hashtable ကလညး ArrayList လပ size က dynamically increment လပလ႔ ရပါတယ။ Example ေလးၾကညရေအာင။

using System; using System.Collections; class arraylistTest { static void Main() { Hashtable ht = new Hashtable(); ht.Add("Name", "Sevenlamp"); ht.Add("Address", "Yangon"); ht.Add("Age", 28); foreach (DictionaryEntry de in ht) { Console.WriteLine("{0}\t\t: \t {1} ", de.Key, de.Value); } Console.WriteLine("\nThere are {0} element/s in your Hashtable Array", ht.Count); Console.Read(); } }

basic of C# (part 17)

ဒေန႔ ကြၽနေတာ OOP အေၾကာငး မစခင enumeration န႔ structure အေၾကာငး နညးနညး ေျပာခငတယဗာ။ အရငဆး variable declaration အေၾကာငးက ျပနေႏႊးရေအာင။ ကြၽနေတာတ႔ number တနဖးတစခ သမးဖ႔ integer အမးအစား variable တစခေၾကျငာမယဆရင…

int num;

ဆျပးေၾကျငာပါတယ။ ဒါဆရင memory ေပၚမာ integer value တစခသမးဖ႔ အတြက ေနရာ တစေနရာ ယလကပါတယ။ ဟတျပ… ဒါဆရင ကြၽနေတာက

myOwnType var1;

Page 51: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 47

Written By SevenLamp

ဆျပး ေၾကျငာလကတယ ဆပါေတာ။ ဒါဆကြၽနေတာတ႔ program က compiler က နားလညပါဥးမလား။ နားမလညနငေတာပါဘး ဘာလ႔လဆေတာ myOwnType ဆတ႔ pre-defined type မဟတတာတစခက ေၾကျငာလကလ႔ပါ။ ကြၽနေတာတ႔ Integer type ေၾကျငာေတာ compiler က integer value ေတြထညဖ႔မနးသပါတယ။ myOwnType ကေၾကျငာလကေတာ compiler က ဘာအမးအစားအတြက ေၾကျငာေပးရမနးမသဘး ျဖစသြားပါတယ။ ဒါဆရင ကြၽနေတာတ႔က compiler က myOwnType ဆတာကေတာ ဘယလ data မးေတြက သမးခငတာပါဆျပး ေျပာေပးလကရင မျဖစဘးလား။ ျဖစပါတယ။ ဘယလလပေပးရမာလ ကြၽနေတာတ႔ user defined data type ေတြ ေၾကျငာေပးရမာပါ။ ဒလလပဖ႔အတြက ကြၽနေတာတ႔ enumeration ေတြ၊ structure ေတြ၊ class ေတြ အေၾကာငးက သဖ႔လလာပါျပ။ ကြၽနေတာတ႔ enumeration ေဆာကဖ႔အတြက enum keyword ကသးရပါတယ။ ဟတျပ အခ ကြၽနေတာ myOwnType က create လပပါေတာမယ။

enum myOwnType { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

myOwnType ထမာ ကြၽနေတာက ေန႔ ၇ ေန႔က သမးခငပါတယလ႔ defined လပလကပါတယ။ ကြၽနေတာက ေန႔ေတြက စာသားေတြန႔ ေရးလကေပမယ enumeration မာ တစကယသမးသြားမာက default integer type ပါ။ ကြၽနေတာက integer type အစား တျခား ကနးျပည number type အျဖစ ေၾကျငာခငလ႔လညး ရပါတယ။ default အားျဖင 0 ကေန စျပး တခစက 1 ေပါငးေပါငးျပးသမးသြားမာပါ။ ဆလတာက ေရ႕ဆးမာ ရတ႔ Sunday ရ႕ value က 0 ျဖစျပး Monday က 1 ၊ Tuesday က 2 ပါ။ ကြၽနေတာတ႔ ၾကကတ႔ number န႔လညး ကယစားျပလ႔ ရပါတယ။ ဥပမာ..

enum myOwnType : byte { Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday }

အေက ဒပစအတငးဆရင Sunday = 0, Monday = 5, Tuesday = 6, Wednesday = 7, Thursday = 100,

Page 52: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 48

Written By SevenLamp

Friday = 101, Saturday = 102 ဆျပး ျဖစသြားပါမယ။ ကြၽနေတာတ႔ enumeration test လပဖ႔ program တစခေလာက ေရးၾကညရေအာင။

using System; class Program { enum myOwnType : byte { Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday } static void Main() { myOwnType wd = myOwnType.Friday; int i = 7; Console.WriteLine("{0} is {1}", wd, (int)wd); Console.WriteLine("{0} is {1}", i, (myOwnType)i); Console.ReadLine(); } }

Output

Friday is 101 7 is Wednesday

basic of C# (part 18)

Enumeration ကသးျခငးအားျဖင ကြၽနေတာတ႔ ကယပငdata type ေတြေဆာကျပး သးလ႔ရလာပါမယ။ enumeration သးတာ ဘာပေကာငးလာလ အတအကေတာ မသဘးဗ။ ကြၽနေတာစတထငေတာ enumeration သးလကျခငးအားျဖင ၁။ memory ေပၚမာ ေနရာယတ႔ size ေသးသြားမယ၊ ၂။ project တစခက develop လပတ႔ programmer ေတြ ၾကားထမာ standardized ျဖစသြားမယ ( ဥပမာ.. developer တစေယာကက Sunday လ႔ေပါငးရငေပါငးမယ၊ ေနာကတစေယာကက SUNDAY လ႔ေပါငးမယ၊ တျခားတစေယာကက sun လ႔ပ ေပါငးရငေပါငးမယ၊ enum defined လပလကျခငးအားျဖင ဒါမးကစၥေတြ မရနငေတာဘး ေပါ )။

Page 53: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 49

Written By SevenLamp

Enumeration သးရင ကြၽနေတာတ႔က data type တစမးထပ သးလ႔ရတယ။ integer ဆ integer, byte ဆ byte ေပါ၊ record တစခပစမး data type အစသမးခငရငေတာ enum အစား structure ေဆာကျပးသးၾကပါတယ။ (ဆငမဆငေတာ မသဘး တြျပးေျပာလကတာ ) ဥပမာ.. ကြၽနေတာက ေကာငးသားတစေယာကရ႕ data ေတြသမးခငတယဆရင သမးမယ data ေတြထမာ roll (int), name (string), mark (int) စတာေတြ ပါမယဗာ။ ဒါဆရင enum သးလ႔ မရေတာဘး၊ structure ဒါမမဟတ class ကသးရေတာမယ။ structure န႔ class က အဓက value type န႔ reference type ပကြာသြားတာ။ ကနတာအားလး အတတနးပါးပ။ example program ေလးၾကညရေအာင။

using System; struct Student { public int roll; public string name; public int mark; } class structuretest { static void Main() { Student s1; s1.roll = 1; s1.name = "Ag Ag"; s1.mark = 90; Student s2 = s1; s2.roll = 2; s2.name = "Mg Mg"; Student s3 = new Student(); s3.roll = 3; s3.name = "Zw Zw"; s3.mark = 80; Console.WriteLine("\nRoll : {0} \nName : {1} \nMark : {2}", s1.roll, s1.name, s1.mark); Console.WriteLine("\nRoll : {0} \nName : {1} \nMark : {2}", s2.roll, s2.name, s2.mark); Console.WriteLine("\nRoll : {0} \nName : {1} \nMark : {2}", s3.roll, s3.name, s3.mark); Console.Read(); } }

ျပနရငးရေအာင

struct Student { public int roll; public string name; public int mark;

Page 54: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 50

Written By SevenLamp

}

ဒါက Student ဆတ႔ user defined type တစခ create လပတာပါ။ ဒလေရးလကျခငးအားျဖင compiler က Student ဆတာမာေတာ integer အမးအစား variable ႏစခရယ၊ string တစခရယ ပါတယဆတာ သသြားပါျပ။ variable ေတြရ႕ေရ႕မာ public လ႔ေရးတာကေတာ အဒ variable ေတြက structure ရ႕ အျပငဘက တျခားေနရာကေန ေခၚသးခြငျပတာပါ။ ျပးေတာ Main function ထမာ ကြၽနေတာက ေကာငးသား ၃ေယာကရ႕ data သမးခငတယ ဆေတာ Student variable ၃ ခေၾကျငာရမာေပါ။ ဒါေၾကာင ကြၽနေတာက s1, s2 န႔ s3 ဆျပး ေၾကျငာလကပါတယ။

Student s1;

ဆျပး ေၾကျငာလကတာန႔ ကြၽနေတာတ႔ စကရ႕ memory ေပၚမာ Student အမးအစား data ေတြသမးလ႔ရမယ ေနရာတစခ ေဆာကေပးသြားပါတယ။ အဒ ေနရာထမာ roll, name, mark တ႔ သမးဖ႔ေနရာပါ ပါျပးသားပါ။

s1.roll = 1; s1.name = "Ag Ag"; s1.mark = 90;

ျပးေတာမ ကြၽနေတာက အဒထက 1, “Mg Mg”, 90 တ႔က ထညလကပါတယ။ Student အမးအစား s1 ထမာ ရတ႔ variable ေတြက ျပနေခၚခငတာျဖစလ႔ s1(dot)variable name ဆျပး ေရးရပါတယ။

Student s2 = s1;

ေနာကထပ s2 က ေၾကျငာတ႔ေနရာမာေတာ s1 ထက တနဖးေတြကပါ s2 ထက ထညလကပါတယ။ ဒါဆရင s2 ထမာ ရတ႔ roll, name န႔ mark မာ s1 ထက တနဖးေတြ ေရာကျပးသားျဖစသြားပါတယ။

s2.roll = 2; s2.name = "Mg Mg";

ျပးေတာမ s2 ရ႕ roll န႔ name က ျပနျပငလကပါတယ။ အမတကေတာ မျပငလကပါဘး။ ဒလျပငလကျခငးအားျဖင နဂတနဖးျဖစတ႔ s1 ထမာ ေျပာငးသြားမလား? Structure က value type ျဖစလ႔ s1 ထမာ လကျပး ေျပာငးသြားမာ မဟတပါဘး။

Student s3 = new Student(); s3.roll = 3; s3.name = "Zw Zw"; s3.mark = 80;

Page 55: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 51

Written By SevenLamp

s3 ထပေၾကျငာတယ၊ တနဖးထညပါတယ။ ဒေနရာမာ s3 က new Student() ဆျပး object ေဆာကေပးထားတာ ေတြ႔မာပါ။ ကြၽနေတာတ႔ structure က object ေဆာကျပးေတာ ျဖစျဖစ မေဆာကပန႔ ျဖစျဖစ ၾကကသလသးလ႔ရပါတယ။ object ေဆာကေပးရင structure ထက variable ေတြက default value assign လပေပးသြားမာျဖစျပးေတာ၊ object မေဆာကပသးရငေတာ default value assign မလပေပးပါဘး။ ဒါဆ default value ကဘာေတြလ? ဟတက႔ number ေတြဆ default value က 0 ပါ။ string အတြကကေတာ null ေပါ။

ဒ program ေလးက ရကျပး run ၾကညလကပါဥး။

Chapter 7

basic of C# (part 19)

ကြၽနေတာတ႔ မေန႔က ေရးခ႔တ႔ structure test program ေလးန႔ပ ဆကျပး ေျပာရေအာငဗာ။ structure ကသးျခငးအားျဖင ကြၽနေတာတ႔ record ေတြသမးလ႔ ရတယဆတာ သခ႔ပါျပ။ structure ဟာ object-oriented programming မာ အေျခခအကဆး အပငးျဖစတ႔ class ေတြျဖစေပၚလာဖ႔ ကနဥး အစပါပ။ structure က value type ပါ။ ဒါေၾကာင OOမာ သးလ႔ အဆငမေျပပါဘး။ ဒအခါမာ structure ပစအတငး reference type အေနန႔ သးနငမယ class က ေနာကပငးမာ အသးတြငကယလာပါတယ။ OOP မာ အဓကအကဆးကေတာ class ေတြပါပ။ ဟတျပ၊ class တစခမာ အေျခခအားျဖငေတာ data member ေတြန႔ member function ေတြပါေလ႔ရပါတယ။ member data ေတြဟာ သကဆငရာ classရ႕ ၀ေသသ လကၡဏာေတြက ကယစားျပျပးေတာ၊ member function ေတြကေတာ အဒ classရ႕ လပေဆာငခကေတြပါ။ ဥပမာအားျဖင People ဆတ႔ class တစခမာ အမည(name)၊ အသက(age) စသညတ႔ဟာ member data ေတြ ျဖစၾကျပး၊ စားသည(eat())၊ အပသည(sleep()) စသညတ႔ကေတာ member function ေတြ ျဖစၾကမာပါ။

class People { string name; // member data int age; // member data void eat() // member function {

Page 56: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 52

Written By SevenLamp

// eat something… } void sleep() // member function { // sleep at night. } }

အခကြၽနေတာ ေရးလကတ႔ People class က datatype class လ႔ ေခၚပါတယ။ မေန႔က program ေလးက class အေနန႔ ျပနျပး ေရးၾကညရေအာင။

class Student { public int roll; public string name; public int mark; public void Display() { Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”, roll, name, mark); } } class StudentTest { static void Main() { Student s1 = new Student(); s1.roll = 1; s1.name = “Ag Ag”; s1.mark = 90; Student s2 = new Student(); s2.roll = 2; s2.name = “Zw Zw”; s2.mark = 88; Student s3 = s2; s3.roll = 3; s3.name = “Ma Ma”; // display s1.Display(); s2.Display(); s3.Display(); Console.Read(); } }

OUTPUT :

Page 57: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 53

Written By SevenLamp

1 Ag Ag 90 3 Ma Ma 88 3 Ma Ma 88

ဒ program ေလးက အေသးစတျပနရငးျပပါ႔မယ။ ပထမဆး data type class (Student) ေလး ေဆာကပါတယ။ member data အေနန႔ roll၊ name န႔ mark တ႔ပါျပး။ student information ေတြ ျပနထတျပေပးဖ႔ Display ဆတ႔ member function တစခပါပါတယ။ student class ထက member ေတြ အားလးရ႕ ေရ႕မာ public ဆတ႔ keyword ေလးေရးထားတာ ေတြ႕မာပါ၊ class တစခအတြငးမာ member ေတြ ေၾကျငာရင default က private ပါ။ ဆလတာကေတာ သကဆငရာ class အတြငးမာပ သးခြငရျပး အျပင(တျခား class ေတြ) ကေန ေခၚသးလ႔ မရဘးဆတ႔ အဓပၸါယပါ။ အခကြၽနေတာက public လပေပးလကတ႔ အတြက ၾကကတ႔ ေနရာကေန ေခၚသးခြငရသြားပါတယ။ ဟတျပ။ အခကြၽနေတာတ႔ program ေလးက run ဖ႔ အတြက Main function ပါတ႔ run class တစခ ထပေဆာကပါတယ။ Main function အတြငးမာ ပထမဆး ေကာငးသားတစေယာကရ႕ information သမးဖ႔အတြက Student အမးအစား variable a က ေၾကျငာျပး object ေဆာကေပးပါတယ။ class ေတြဟာ reference data type ျဖစတ႔ အတြက variable ေၾကျငာရန႔ တနဖးသမးလ႔ မရေသးပါဘး။ ဒါေၾကာင တနဖးတကယ သမးနငဖ႔အတြက object ေဆာကေပးရပါတယ။ ရႈပသြားျပထငတယ ကြၽနေတာတ႔ memory မာ stack အပငးန႔ heap အပငး ဆျပး အပငး၂ပငးရတယဗ။ value type variable ေတြက stack အပငးမာပ သမးေလရတယ။ ဒါေၾကာင မေန႔က သမးခ႔တ႔ Student အမးအစား s1, s2, s3 တ႔က structure (value type) ျဖစတ႔အတြက stack အပငးမာ ေနရာယသြားပါတယ။ အဒေနရာမာပ တနဖးက တကယသမးပါတယ။ class ကေတာ မတပါဘး။ သက stack ရယ heat ရယ ခြျပးေနရာယပါတယ။ object reference(variable) က stack မာ သမးျပး၊ real object ကေတာ heat မာ သမးပါတယ။ structure န႔ class တ႔ memory ေပၚမာ ေနရာယပက ပေလး ဆြျပေပးထားပါတယ၊ ပၾကညလကရင နညးနညးနားလညသြားမယ ထငပါတယ။

Page 58: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 54

Written By SevenLamp

Structure မာ သမးသြားတ႔ ပကေတာ ရငးပါတယ ကြၽနေတာတ႔ class မာ သမးသြားတ႔ ပကပ ၾကညရေအာင။ ကြၽနေတာေျပာခ႔သလပ class က variable ေၾကျငာလကလ႔ ရလာတ႔ ေနရာမာ value ေတြသမးလ႔မရပါဘး၊ reference ေတြပ သမးလ႔ ရပါတယ။ value တကယသမးနငဖ႔အတြကေတာ ကြၽနေတာတ႔က new operator သးျပး object ေဆာကေပးရပါတယ။ အဒလ new န႔ ေဆာကလကတ႔ object ေတြဟာ heap memoryထမာ ေနရာသြားယပါတယ။ ဒါေၾကာင Student s3 က object မေဆာကထားပါဘး၊ class variable ပ ေၾကျငာထားပါတယ။ ဒါေၾကာင s3 အတြက ကယပင object မရပါဘး။ s3 ထက s2 ကထညလကပါတယ။ ဒေနရာမာ s2 ထမာ ဘာရလ ကြၽနေတာတ႔ ျပနၾကညေတာ s2 ေၾကျငာထားတ႔ ေနရာမာ memory address (f002) ပ ရပါတယ။ ဒါေၾကာင s3 ထကလညး f002 ပ ေရာကသြားမာပါ။ ဒါဆ s3 ကလညး memory address f002 ရေနတ႔ ေနရာက object ကပ သြားျပး point လပပါတယ။ ဒါေၾကာင s2 န႔ s3 ၂ ခလးက object တစခထကပ point ထားၾကပါတယ။ ဒါေၾကာင s3 ထကထညလကတ႔ roll 3 န႔ name “Ma Ma” ဟာ s2 က ရကထတတ႔ ေနရာမာပါ ေပၚလာရျခငးျဖစပါတယ။ ေတာေတာေလးေတာ ရႈပသြားမယထငတယ။ ကြၽနေတာ စာအေရးအသား ညေတာ ေသေသခာခာ နားလညေအာင မရငးျပနငလ႔ပါ။

basic of C# (part 20)

ဒေန႔ ကြၽနေတာတ႔ Constructor အေၾကာငး ေျပာရေအာင။ ကြၽနေတာတ႔ student က object ေဆာကတနးကေရးခ႔တ႔ code ေလးက ျပနၾကညရေအာင။

Student s1 = new Student();

Page 59: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 55

Written By SevenLamp

ကြၽနေတာတ႔ class ေတြက object ေဆာကဖ႔ အတြက new operator ကသးျပး function တစခက ေခၚရပါတယ။ အဒ function name က class name န႔ တပါတယ။ အဒ function က constructor function လ႔ ေခၚပါတယ။ ကြၽနေတာတ႔ Student class ေဆာကတနးက constructor function ေဆာကခ႔လား။ မေဆာကေပးခ႔ပါဘး။ ကြၽနေတာတ႔မေဆာကေပးခ႔ပ ဘယလျဖစလ႔ ေခၚသးလ႔ ရေနပါလမ႔။ ဟတက႔ ကြၽနေတာတ႔ class တစခ ေဆာကလကျပဆတာန႔ compiler က အဒ class ထမာ constructor function ပါလားစစပါတယ၊ မပါဘး ဆရင default constructor function တစခက compiler က အလအေလာက ေဆာကေပးပါတယ။ ဒလေဆာကေပးသြားလသာ ကြၽနေတာတ႔ class ေတြက object ေဆာကလ႔ ရတာဗ။ အေက compiler ကေဆာကေပးတ႔ default constructor က ဘာေတြလပေပးလ ဆေတာ class ထမာ ရတ႔ member data ေတြက default value assign လပေပးပါတယ။ default value ဆတာဘာလ ေျပာျပးျပထငတယေနာ။ တခါတေလ default constructor က လပေပးတ႔ အလပေတြက ကြၽနေတာက မၾကကဘး ဆရင ကြၽနေတာတ႔ လခငတ႔ ပစရေအာင ကယတင constructor ေတြ ေဆာကေပးဖ႔ လပါတယ။ ဟတျပ ဒါဆရင constructor ေတြဘယလ အလပလပလ၊ constructor ဘယႏစမးရလ၊ ကယပင constructor ေတြ ဘယလေဆာကလ ေလလာလကရေအာင။

Instant Constructor, Private Constructor န႔ Static Constructor ဆျပး Constructor အမးအစား ၃ မးရပါတယ။ လသအမားဆးန႔ အသးလညး အမားဆး မျဖစမေနသးေနရတ႔ constructor အမးအစားကေတာ instant constructor ျဖစပါတယ။ instant constructor ဆတာကေတာ ကြၽနေတာတ႔ class ေတြက object ေဆာကဖ႔အတြက new operator န႔ တြျပး ေခၚေနရတ႔ constructor ပ ျဖစပါတယ။ instant constructor မာ ၂ မးထပခြနငပါတယ။ Default Constructor န႔ Parameterized Constructor ဆျပး ျဖစပါတယ။ Default constructor က compiler က auto ေဆာကေပးတယဆတာ အေပၚမာ ကြၽနေတာေျပာခ႔ျပးပါျပ။ ဒါေပမယ တစခ သထားရမာက compiler က ကြၽနေတာတ႔ class ထမာ constructor လး၀ မပါဘး ဆမ default constructor က ေဆာကေပးတာပါ။ ကြၽနေတာတ႔ class ထမာ constructor တစခ ပါျပဆတာန႔ default constructor ေဆာကတ႔ အလပက compiler က မလပေပးေတာပါဘး။ instant constructor တစခေဆာကဖ႔အတြက လကနာရမယ စညးကမးေတြကေတာ constructor ရ႕ ေရ႕မာ public keyword ပါရပါမယ၊ class name န႔ နာမညတရပါမယ၊ return type မထညေပးရပါဘး။ က ဟေန႔က ေရးခ႔တ႔ student class ေလးမာပ စမးၾကညရေအာငဗာ။ ကြၽနေတာက roll, name န႔ mark တ႔က ကယ စတၾကက default value ထညေပးဖ႔ ကယပင default constructor ေလး ေဆာကပါမယ။

class Student { public int roll; public string name;

Page 60: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 56

Written By SevenLamp

public int mark; public Student() // default constructor { roll = -1; name = “?”; mark = 0; } public void Display() { Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”, roll, name, mark); } } class StudentTest { static void Main() { Student s1 = new Student(); s1.Display(); Console.Read(); } }

အေက ဒ program ေလးက run ၾကညရင constructor ထမာ ကြၽနေတာတ႔ ထညေပးထားတ႔ အတငး Roll = 1, Name = “?” န႔ Mark = 0 ဆျပး ေပၚလာမာပါ။ constructor က မထညပ run ၾကညရငေတာ Roll = 0, Name = “” န႔ Mark = 0 ျဖစေနပါလမမယ။ ဒါက default constructor အလပလပပပါ။ အခ parameterized constructor အေၾကာငးဆကၾကညရေအာင။ ကြၽနေတာက student class က object ေဆာကတ႔ constructor function ေလးထက student ရ႕ name ေလးက parameter အေနန႔ ထညေပးခငတယ ဆရင အခကြၽနေတာတ႔ ေဆာကထားတ႔ default constructor က သးလ႔ မရေတာပါဘး။ ဒါဆ string တစခ လကခမယ constructor တခထပေရးေပးဖ႔ လအပလာပါျပ။ အခလ ေရးလကပါမယ။

class Student { public int roll; public string name; public int mark; public Student(string name) // parameterized constructor {

Page 61: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 57

Written By SevenLamp

roll = -1; this.name = name; // assign local to member mark = 0; } public void Display() { Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”, roll, name, mark); } } class StudentTest { static void Main() { Student s1 = new Student(“Mg Mg”); s1.Display(); Console.Read(); } }

ဒ program ေလးက run ရင Roll = -1, Name = “Mg Mg” န႔ Mark = 0 ဆျပး ျပပါလမမယ။ ဒ program မာ ကြၽနေတာက default constructor အစား parameterized constructor ကထညလကပါတယ။ ဒါဆရင compiler က default constructor ေဆာကေပးမာလား ? မေဆာကေပးဘးေနာ။ ဒါေၾကာင ကြၽနေတာက Main function ထမာ ဒလ သြားေရးရင error တကပါလမမယ။ Student s2 = new Student(); // error code ဘာလ႔လ ဆေတာ default constructor မပါလ႔ပါ။ အခေရးလကတ႔ constructor ထမာ this.name = name; ဆျပး ေရးလကတာက ေတြ႔မာပါ၊ အ႕ဒါေလး ျပနရငးပါဥးမယ။ Student class ထမာ ကြၽနေတာက name ဆတ႔ variable ေလးက ေၾကျငာထားျပးသားပါ။ အဒါက member variable လ႔ ေခၚေၾကာငးလညး သျပးသားပါ။ ဒလပါပ ကြၽနေတာ အခ ေဆာကလကတ႔ constructor ထမာ လ parameter variable name က ထပေၾကျငာလကပါတယ။ အဒါကေတာ local variable လ႔ ေခၚပါတယ။ က အခ member န႔ local နာမညတေနပါျပ။ ဒါဆ အေနအထားမးမာ ကြၽနေတာက name လ႔ ေခၚလကရင အနးဆး local variable ကပ compiler က ယသးသြားပါတယ။ ဒါေၾကာင ကြၽနေတာက member variable name က ေခၚဖ႔အတြက this ဆတ႔ keyword န႔ တြျပး ေခၚေပးရပါတယ။ instant constructor အေၾကာငး နားလညျပလားေတာ မသဘး။ နားမလညဘးဆရငလညး ေျပာၾကဥးဗာ။ ထပျပး ျပနရငးေပးပါမယ။

ေနာကေန႔မ Private န႔ Static constructor ေတြ အေၾကာငးဆကရေအာငဗာ။

Page 62: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 58

Written By SevenLamp

basic of C# (part 21)

ဟေန႔က ကြၽနေတာတ႔ Instant constructor အေၾကာငးသခ႔ျပးျပ။ Constructor လ႔ဆလကတာန႔ programmer ေတာေတာမားမား ေျပးျမငမၾကတာလညး ဒ Instant Constructor ပါပ။ အသးအမားဆးန႔ မသးမျဖစ Constructor လညးျဖစပါတယ။ Instant Constructor အျပင တျခား လသနညးတ႔ constructor ၂ ခရပါေသးတယ။ အဒါေတြကေတာ Private Constructor န႔ Static Constructor တ႔ပါပ။ Instant Constructor က public constructor လလ ေခၚပါေသးတယ။ constructor ရ႕ ေရ႕မာ public keyword ကေရးေပးရပါတယ။ ဘာလ႔လ ဆေတာ class က object ေဆာကဖ႔အတြက တျခား class ေတြ ထမာ ေခၚသးလ႔ ရေအာငပါ။ private လ႔ေရးလကလ႔ရရငေတာ အဒ private constructor ပါတ႔ class က object ေဆာကလ႔ မရေတာပါဘး။ ဒါေၾကာင object မေဆာကေစခငတ႔ class ေတြမာ private constructor ကေရးေပးေလရပါတယ။ ဥပမာ…

using System; class Constant { private Constant() {} public static string DeveloperName = "Sevenlamp"; } class Program { static void Main() { //Constant c = new Constant(); // error Console.WriteLine(Constant.DeveloperName); Console.Read(); } }

ဒ program ေလးမာ private constructor ေၾကျငာထားလ႔ Constant class က object ေဆာကလ႔ မရပါဘး။ ဒါဆရင အဒ class ထမာ ရတ႔ member data ေတြက ဘယလ ျပနေခၚသးမလ။ ဟတက႔ ကြၽနေတာတ႔ private constructor ရတ႔ class ေတြထက member ေတြက ျပနသးလ႔ ရေအာင အဒ member ေတြက static keyword န႔ တြ႔ျပး ေၾကျငာေပးရပါမယ။ ဟတျပ အဒ variable ေတြက static variable တနညးအားျဖင class variable လ႔ေခၚပါတယ။ အဒ class variable ေတြက ေခၚဖ႔အတြက သရေနတ႔ class က object ေဆာကစရာ မလပါဘး။ program မာ ေခၚထားသလ

Page 63: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 59

Written By SevenLamp

class name ကေနတဆင ေခၚသးလ႔ ရပါတယ။ ေနာက constructor တစမးကေတာ static constructor ပါ။ class တစခအတြငးမာ ရတ႔ static member ေတြအလပမလပခင အရငဆး static constructor က အလပလပေလရပါတယ။ ခန program ေလးကပ static constructor ေလးထညျပး ျပန run ၾကညရေအာင။

using System; class Constant { private Constant() {} static Constant() { Console.WriteLine("print from static constructor"); DeveloperName = "Sevenlamp"; } public static string DeveloperName; } class Program { static void Main() { Console.WriteLine(Constant.DeveloperName); Console.WriteLine(Constant.DeveloperName); Console.Read(); } }

Program run လကရင “Sevenlamp” ဆတ႔ စာသားက မရကျပခငမာ “print from static constructor” ဆတ႔ စာသားကအရင ရကသြားတာ ေတြ႔ရမာပါ။ ဒါေပမယ တစခသထားရမာက static constructor က static member ေတြက မေခၚခင ပထမဆး တစၾကမပ အလပလပပါတယ။ ဒါေၾကာင ကြၽနေတာက developername က ၂ ၾကမရကျပထားေပမယ “print from static constructor” ကေတာ တစၾကမပ ေပၚလာမာျဖစပါတယ။ က ဒေလာကဆ ကြၽနေတာတ႔ constructor ေတြ အေၾကာငး နညးနညးနားလညလာျပ ထငပါတယ။

ေနာကပဒမာ static member န႔ instant member အေၾကာငး ဆကေျပာပါမယ။

Page 64: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 60

Written By SevenLamp

Chapter 8

basic of C# (part 22)

class တစခထမာ ရတ႔ member ေတြက static member န႔ instant member ဆျပး ၂ မးခြ႔ျခားနငပါေသးတယ။ static member က class member လ႔လညး ေခၚပါတယ။ instant member ကေတာ object member ေပါ။ ဟတျပ ဒါဆရင အဒ static member ေတြန႔ instant member ေတြ ဘာကြာျခားလ ဆကၾကညရေအာင။ အဓက ကြာျခားခက ၄ ခကေလာက ရတယဗ။ အရငဆး ဒ program ေလးက run ၾကညလကပါဥး။

class Test { public static string clsVar; // static member public string objVar; // instant member public void Show() { Console.WriteLine(clsVar); // use class member from instant member Console.WriteLine(objVar); } } class Program { static void Main(string[] args) { Test t = new Test(); Test t2 = new Test(); t.objVar = "this is object member"; // call from object instant Test.clsVar = "this is class member"; // call from class name t.Show(); Console.WriteLine(); t2.Show(); Console.Read(); } }

၁။ static member ေတြ ေၾကျငာဖ႔အတြက static keyword က သးရပါတယ။ ရးရးmember ေတြမာေတာ static ထညရနမလပါ။

Page 65: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 61

Written By SevenLamp

public static string clsVar; // static member public string objVar; // instant member

၂။ instant member ေတြက class ကေဆာကတ႔ object ေတြမာ တစခဆ copy ပါသြားမာ ျဖစေပမယ၊ static member ကေတာ object အားလးအတြက တစခထရမာ ျဖစပါတယ။

Test t = new Test(); Test t2 = new Test();

၃။ instant member က object name ကေန ျပနေခၚသးရျပး၊ static member ကသးဖ႔အတြကေတာ class name ကေနတဆငသာ ေခၚခြငရပါတယ။

t.objVar = "this is object member"; // call from object instant Test.clsVar = "this is class member"; // call from class name

၄။ static member ေတြက instant member ေတြကေန တဆငေခၚသးခြငရပါတယ။ ဒါေပမယ instant member ေတြကေတာ static member ေတြကေန ေခၚခြငမရပါဘး။

public void Show() { Console.WriteLine(clsVar); // call class member from object member Console.WriteLine(objVar); }

ကြၽနေတာတ႔ static member ေတြက အရငက သးဖးတယထငလား? ဟတက႔ သးဖးပါတယ။ ဥပမာအေနန႔ screen မာ စာရကဖ႔သးတ႔ WriteLine function ကပ ၾကညပါ။ WriteLine function က Console Class ထက member function တစခပါ။ ဒါေပမယ ကြၽနေတာတ႔ WriteLine function ကသးဖ႔အတြက Console Class က object ေဆာကပါသလား။ မေဆာကဖးေနာ class name ကေနပ ေခၚသးသြားတာပါ Console.WriteLine() ဆျပးေလ။ အေက အဒလ ေခၚခြငရတာ WriteLine function က static member function ျဖစေနလ႔ပါ။ က ကြၽနေတာတ႔ class member

Page 66: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 62

Written By SevenLamp

ကသးျပး program တစခေလာကေရးၾကညရေအာင။ အဒ program ေလးမာ ကြၽနေတာတ႔ customer တစေယာက အသစထညလကတငး account number auto ေပၚလာခငတယ။ ျပးေတာ customer စစေပါငး ဘယႏစေယာက ရလဆတာက ျပနျပေပးခငတယ။

class Customer { string acno; string name; public Customer(string name) { this.acno = GetNewAcno(); //call static member function this.name = name; } public override string ToString() { return acno + "-" + name; } public static int counter = 0; public static string GetNewAcno() { counter++; return "C" + counter.ToString("D3"); } } public class Program { static void Main() { Customer a = new Customer("Mg Mg"); Customer b = new Customer("Zw Zw"); Customer c = new Customer("Ag Ag"); Console.WriteLine("{0}", a); Console.WriteLine("{0}", b); Console.WriteLine("{0}", c); Console.WriteLine("Customer Count is {0}", Customer.counter); Console.Read(); } }

Page 67: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 63

Written By SevenLamp

basic of C# (part 23)

ဒေန႔ ကြၽနေတာတ႔ C# ရ႕ property ေတြ အေၾကာငး ေျပာၾကရေအာင။ အရငဆး property ေတြ ဘယလေၾကာင ျဖစေပၚလာလ အရငစေျပာပါမယ။ ဟတျပ ကြၽနေတာတ႔ class တစခထက instant member data ေတြက တျခား class ေတြကေန ေခၚသးမယဆရင အဒ instant member ရ႕ေရ႕မာ public keyword ထညျပး ေၾကျငာေပးရပါတယ။ ဒလမးပါ…

using System; class Test_A { public int var; } class Program { static void Main() { Test_A obj = new Test_A(); obj.var = 1; Console.WriteLine(obj.var); Console.Read(); } }

ဒ program ေလးကၾကညၾကညပါ။ Test_A class ထက var ဆတ႔ variable က program class ထကေနေခၚျပး တနဖးထညတယ။ ျပးေတာ ျပနရကထတတယ။ ဒလေခၚလ႔ ရဖ႔အတြက Test_A ထမာ public ဆျပး ေၾကျငာေပးရတယ။ ဒလ member data ေတြက public လပျပး အျပငကေန ေခၚသးတာက ေရးရတာ လြယပါတယ၊ ဒါေပမယ Object-oriented ဆျပး ေအာလာၾကတ႔ သကာလမာ data hiding ဆတ႔ rule ေလးတစခပါပါလာပါတယ။ အဒ rule ကေတာ member data ေတြက အျပငကေန တကရကေခၚျပး မသးရပါဘး၊ hide လပထားပါတယ။ ဒါဆရင အဒ member က အျပငကေနဘယလေခၚမလ။ ဟတက႔ အဒလေခၚဖ႔အတြက အေစာပငးကာလေတြမာ ကြၽနေတာတ႔ member function ေတြက သးရပါတယ။ ဒလမးပါ….

using System; class Test_B { private int var; public void SetData(int value)

Page 68: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 64

Written By SevenLamp

{ var = value; } public int GetData() { return var; } } class Program { static void Main() { Test_B obj = new Test_B(); obj.SetData(2); Console.WriteLine(obj.GetData()); Console.Read(); } }

ဒ program ေလးကၾကညလကပါ။ Type_B class ထက member variable က အျပငကေန ေခၚသးလ႔မရေအာင private လပလကပါတယ။ ျပးေတာမ အဒ member data ထက တနဖးထညဖ႔ SetData function န႔ တနဖးျပနထတဖ႔ GetData function ကေရးေပးပါတယ။ အဒ function ေတြကေတာ public လပေပးရပါမယ။ ဒလေရးလကျခငးအားျဖင data hiding rule က လကနာျပးသားျဖစသြားပါတယ။ ခလမး function ကေနတဆင တနဖးအသြငးအထတလပတာ မရဘးလားဆေတာ ရပါတယ၊ ဒါေပမယ member variable က ေခၚသးရတာေလာကေတာ မလြယကပါဘး။ အနညးဆးေတာ member data တစခအတြက function ၂ခ မတေနရပါတယ။ ဒါေၾကာင C# language မာေတာ data hiding rule ကလညး လကနာျပး member data ကေခၚသလလညး လြယလြယကက ေခၚလ႔ရေအာင property ဆတာက သးလာၾကပါတယ။ က property က ဘယလေရးရလ….

using System; class Test_C { private int var; public int MyVar { get { return var;

Page 69: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 65

Written By SevenLamp

} set { var = value; } } } class Program { static void Main() { Test_C obj = new Test_C(); obj.MyVar = 3; Console.WriteLine(obj.MyVar); Console.Read(); } }

Property ေရးတ႔ ပစက member function န႔ေတာဆငပါတယ။ အရငဆး အျပငကေနေခၚသးလ႔ရေအာင public ေၾကျငာေပးရပါတယ။ ျပးရငproperty ကေန return ျပနမယ data type ေၾကျငာရမယ၊ အဒေနာကမာေတာ property ရ႕ name ေပါ။ function န႔မတတ႔ အခကကေတာ property မာ parameter လကခတ႔ အပငးမပါပါဘး။ property ထက တနဖးထညဖ႔အတြက set keyword န႔ တနဖးထတဖ႔အတြက get keyword ကသးရပါတယ။ ဆလတာကေတာ property မာ get န႔ set ဆျပး အပငး၂ ပငးပါ၀ငပါတယ။ property ထက user က တနဖးထညလကတ႔ အခါ အဒ property ထက set အပငးထမာ ေရးထားတ႔ code ေတြက အလပလပပါတယ။ user ထညလကတ႔ တနဖးကေတာ value လ႔ေခၚတ႔ keyword ထကေရာကသြားပါတယ။ အဒကေနတဆင member data ထကထညေပးပါတယ။ property ထက တနဖးထတတ႔အခါမာေတာ get ထမာ ေရးထားတ႔ code ေတြက အလပလပေပးပါတယ။ property က အျပငကေန ေခၚတ႔ ပစကေတာ ရးရး member data ကေခၚသလပ ေခၚရပါတယ။ အေက… အခကြၽနေတာတ႔ Property ေတြ ေရးတကျပလထငပါတယ။ property က member data ေတြက ကယစားျပဖ႔ သးတာမားေပမယ member data မရပန႔လညး property ကပေရးလ႔လညး ရပါတယ။ ဒ example program ေလး ေရးျပး run ၾကညပါဥး။

using System; class myNumber { private int num; public string Num

Page 70: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 66

Written By SevenLamp

{ get { return num.ToString(); } set { try { num = Convert.ToInt32(value); } catch { num = 0; } } } public int Square // read only property { get { return num * num; } } } class Program { static void Main() { myNumber obj = new myNumber(); Console.Write("Enter a number : "); obj.Num = Console.ReadLine(); Console.WriteLine("Square of {0} is {1}", obj.Num, obj.Square); Console.Read(); } }

basic of C# (part 24)

Page 71: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 67

Written By SevenLamp

က ဒေန႔ေတာ database အပငးေလး ခဏနားျပး C# ဘကက နညးနညးျပနလညေအာင။ ကြၽနေတာတ႔ အခေနာကပငး programming language မာ အသကယကယေလာငေလာင ျဖစလာတာက OOT လ႔ ေခၚတ႔ Object-Oriented Technique ပျဖစပါတယ။ OO မာ ဘာေတြပါလ…

အေမြဆကချခငးလ႔ ေခၚတ႔ inheritance၊

အသြငေျပာငးျခငးလ႔ေျပာလ႔ရတ႔ Polymorphism၊

Data hiding လ႔ေခၚတ႔ member data ေတြက သ၀ကသမးဆညးထားျခငး၊

Encapsulation သမးဆညးထားတ႔ member data ေတြက တဆငချဖင သးခြငေပးျခငး၊

စသညျဖငေပါ႔ဗာ.. အဒါေတြ ပါပါတယ။

Inheritance အေမြဆကချခငးဆတာဘာလ???

ဒလေလးေတြးၾကညရေအာငဗာ အခကြၽနေတာတ႔ မဘေတြပငဆငတ႔ ပငဆငမႈေတြဟာ ကြၽနေတာတ႔ရ႕ ပငဆငမႈေတြပါပ။ ဒလပါပ ကြၽနေတာတ႔ရ႕ ပငဆငမႈေတြကလညး ကြၽနေတာတ႔ရ႕ မးဆကသစေတြက ပငဆငၾကဥးမပါ။ ဒသေဘာတရားေလးက ယျပး OOမာ inheritance ဆတာေပၚေပါကလာတာပါ။ class တစခရ႕ ပငဆငမႈ property ေတြဟာ အဒ class ရ႕ child ေတြကလညး ပငဆငနငပါတယ။ ဒလ ပငဆငနငျခငးအားျဖင ကြၽနေတာတ႔က class ေတြအားလး အတြက တညတ႔ property ေတြက အၾကမၾကမေၾကျငာေပးေနစရာ မလေတာပါဘး။ ဥပမာဗာ ကြၽနေတာက လတစေယာကက ကယစားျပမယ class တစခေဆာကမယဆရင အဒ class ထမာ ဘယလ member ေတြပါမလ စဥးစားၾကည၊ နမညပါမယ၊ အသကပါမယ၊ ေနရပလပစာပါမယဗာ၊ စသညျဖငေပါ။

class People { string Name; int Age; string Address; }

က…အခ ေနာကတစခါ ကြၽနေတာက ေကာငးသားတစေယာကက ကယစားျပမယ class တစခထပေဆာကဖ႔ လလာျပဆရငေရာ ဘယလ member ေတြပါမလ၊ ေကာငးသားမာလညး

Page 72: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 68

Written By SevenLamp

နမယပါမယ၊ အသကပါမယ၊ လပစာပါမာပါပ၊ ေကာငးသားမာ ပပါလာတာက roll နပါတပါမယ၊ class ပါပါမယ။

class Student { string Name; int Age; string Address; int Roll; int Class; }

ဟတျပ ဒလအေျခအေနမးမာ နမညတ႔ အသကတ႔က ထပျပး မေၾကျငာခငဘးဆရင ကြၽနေတာတ႔ Student class က People class ရ႕ child အျဖစ ေၾကျငာလ႔ ရပါတယ။ ဒလမ းပါ…

class Student : People { int Roll; int Class; }

ဒါက inheritance လပတယလ႔ ေခၚပါတယ။ inheritance လပလကျခငးအားျဖင People class ထက member data က Student class ထမာ ျပနျပ ေၾကျငာေပးေနစရာ မလေတာပါဘး။ ဒါေပမယ ဒေနရာမာ အေရးၾကးတ႔ အခကတစခကက သထားဖ႔ လပါေသးတယ။ ဒလဗာ ကြၽနေတာတ႔ မဘရ႕ ပငဆငမႈအားလး ကြၽနေတာတ႔ရမလား၊ မရပါဘး သတ႔ ကယပငအတြက သမးထားတာေတြလညး ရနငပါတယ။ C# language မာလ အဒလမး ခြျခားဖ႔အတြက ကြၽနေတာတ႔ Access Modifier ဆတာက သဖ႔လအပလာပါတယ။ C# language မာ access modifier ၅ မးရပါတယ။ အဒါေတြ ကေတာ

- public ( အမားသး )

- protected ( မမႏငchild ေတြသး )

- private ( မမကယတငသး )

- internal ( library တအတြငးသး )

- protected internal ( child ျဖစလင၄ငး၊ library တလင၄ငး သး )

Page 73: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 69

Written By SevenLamp

စသညတ႔ ျဖစပါတယ။ အေပၚက example People class ေလးမာ ကြၽနေတာတ႔ access modifier မထညေပးလကပါဘး။ ဒါဆရင default အေနန႔ private ပါ။ ဒါေၾကာင People class ထက member data သးခက people class အတြငးမာပ သးခြငရပါတယ။ Student မာ သးလ႔ မရပါဘး။ အခကြၽနေတာတ႔က Student class ထကေနပါ သးခြငရခငတာျဖစလ႔ protected member အျဖစေၾကျငာေပးရမာပါ။

class People { protected string Name; protected int Age; protected string Address; }

Polymorphism အသြငေျပာငးျခငးဆတာကေရာ???

ကြၽနေတာတ႔ ရပကြကေတြမာ လပေလရတယဗာ တခါတေလ ရပကြကရး ကေနျပးေတာ တစအမက လတစေယာကႏႈနး အစညးအေ၀းတကရမယတ႔ ဘာတ႔ ၾကဖးမာေပါ။ ဟတက႔ ရပကြကရးက ေခၚတာက လတစေယာကလ႔ ေခၚတာပါ တနညးအားျဖင people class က ေခၚတာပါ။ အဒါက အမမာ ရေနတ႔ ေကာငးသားတစေယာကက သြားတကလ႔ မရဘးလား၊ ရပါတယ။ Teacher တစေယာကသြားတကမယဆလ႔လ ရပါတယ။ Teacher ကလညး people တစေယာကပ ျဖစလ႔ပါ။ ဒါေပမယ Student ပ သြားသညျဖစေစ၊ Teacher ပသြားသညျဖစေစ၊ ဒါမမဟတ People ကယတငပ သြားသညျဖစေစ၊ အားလးက People လ႔ပ ျမငပါတယ။ အားလး အခြငအေရးတနးတပါပ။ Student မ႔ အခြငအေရးပရမလား မရပါဘး။ အေက အဒလမး People ကေခၚတာက Stuent သြားလကတာက အသြငေျပာငးလျခငး ( polymorphism ) လ႔ ေခၚပါတယ။

static void Main() { People p; p = new Student(); }

Polymorphism မာ သတထားရမည အခကကေတာ child က parent အသြငေျပာငးနငေပမယ parent ကေတာ child အျဖစေျပာငးလ႔ မရပါဘး။ ဆလတာကေတာ ေကာငးသားအားလး စာေမးပြလာေျဖပါဆျပး ေခၚတာက အမမာ ရတ႔ လၾကးေတြသြားေျဖလ႔ ရမလား မရပါဘး၊ ဒသေဘာပါ။ Student ကေတာငးရငေတာ People ေပးလ႔ မရပါဘး၊ Student ပ ေပးမ ရမာပါ။

Data Hiding

Page 74: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 70

Written By SevenLamp

Data hiding ဆတာကေတာ ကြၽနေတာတ႔ အမမာ မသားစပငဆငမႈေတြက တျခားလေတြသေအာင ထတေၾကျငာေလရလား? မရပါဘး တတတတေလးပ သမးထားေလရပါတယ။ ဒသေဘာပါပ class ေတြထမာရတ႔ member data ေတြကလညး အျပငကေန ေခၚလ႔မရေအာင private လပထားျခငးက data hiding လ႔ ေခၚပါတယ။ ဥပမာဗာ အခ student class ထမာ roll န႔ class ပါတယမလား၊ အဒ member data ေတြက အျပငကေန ေခၚသးလ႔ မရပါဘ။ ဘာလ႔လဆေတာ private member data ေတြ ျဖစလ႔ပါ။ ဒလမး class member data ေတြက private အျဖစပ ေၾကျငာတာက Data Hiding လ႔ေခၚပါတယ။

Encapsulation

Encapsulation ဆတာကေတာ ကြၽနေတာတ႔ hide လပထားတ႔ data ထက လအပတ႔ dataေတြက function ေတြကေနေသာလညးေကာငး၊ property ေတြကေနတဆငေသာလညးေကာငး၊ အသးျပနငဖ႔အတြက စမေပးျခငးပ ျဖစပါတယ။ ကြၽနေတာတ႔ C# မာေတာ member data ေတြက ကယစားျပဖ႔အတြက property ေတြကသးေလရပါတယ။ ဒလမးပါ..

class Student : People { int Roll; int Class; public int RollNo { get { return Roll; } set { Roll = value; } } public int ClassID { get { return Class; } set { Class = value;

Page 75: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 71

Written By SevenLamp

} } }

Chapter 9

basic of C# (part 25)

Function Overloading Vs Function Overriding

ကြၽနေတာတ႔ ဒေန႔ function overloading န႔ function overriding အေၾကာငးေလး ေျပာၾကရေအာင။ အရငဆး function overloading အေၾကာငးေျပာရေအာင။ overload ဆတာ အလပတစခထကပျပး လပတာက ေျပာခငတာပါ။ function overloading ဆေတာ ကြၽနေတာတ႔ ေရးလကတ႔ function က တာ၀န တစခထကပျပး လပေဆာငေပးတာကရညရြယတာပါ။ function name က တစခထပ ဒါေပမယ လပေဆာငမႈအမားၾကး လပနငေအာငေပါ။ ဥပမာဗာ.. ကြၽနေတာက string ကေန integer ေျပာငးတ႔ function ေလးတစခေလာက ေရးခငတယ။

static int ConvertToInteger(string st) { try { return Convert.ToInt32(st); } catch { return 0; } }

က.. ဒ function ေလး ေရးလကျခငးအားျဖင ကြၽနေတာတ႔ string ကေန integer ေျပာငးခငတငး လြယလြယကက ေခၚလ႔ ရသြားမယ။ ဒါေပမယ တျခား type ေတြကေနေျပာငးခငရင ဒ function သးလ႔ ရမလား။ မရပါဘး။ ဒါဆ ကြၽနေတာက တျခားtype ေတြ အတြကကလညး ဒလမး function ေတြ ထပေရးေပးဖ႔ လပါလမမယ။

Page 76: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 72

Written By SevenLamp

static int ConvertToInteger(decimal dec) { try { return Convert.ToInt32(dec); } catch { return 0; } } static int ConvertToInteger(long l) { try { return Convert.ToInt32(l); } catch { return 0; } }

ဟတျပေနာ.. အခလမး function name တျပး parameter မတတ႔ function ေတြ တစခထကပျပး ေရးလကတာက function overloading လပတယလ႔ ေခၚပါတယ။ function overloading လပျခငး အားျဖင ဘာပေကာငးလာမလ။ ဟတက႔ ကြၽနေတာတ႔ program ေရးတ႔ေနရာမာ အမားၾကးပျပး လြယကေစပါတယ။ အကယလ႔သာ function overload မလပရဘးဆရင ကြၽနေတာတ႔ string ကေန integer ေျပာငးဖ႔အတြကက function name တစခ၊ decimal ကေန integer ေျပာငးဖ႔အတြကက function name တစခ၊ long ကေန integer ေျပာငးဖ႔အတြကက function name တစခ စသညျဖင name ေတြ အမားၾကး သးေနမတေနရမာေပါ။ အခ overloading လပျခငးအားျဖင function name တစခထကပ သဖ႔ လပါေတာတယ။ Framework class library ထမာလညး overload လပထားတ႔ function ေတြ အမားၾကး ေတြရမာပါ။ က အႏစခပျပနေျပာပါမယ function overloading ျဖစဖ႔အတြက function name တရပါမယ၊ argument (parameter) မတရပါဘး။ parameter မတရဘး ဆတာမာ parameter ရ႕ datatype ျဖစေစ၊ အရညအတြက ျဖစေစမတရင ရပါတယ။

ေနာကတစခကေတာ function overriding။ overriding လ႔ ေျပာတ႔ အတငးပါပ၊ function overrideing ဆတာက function တစခေပၚမာ ေနာကထပ function တစခန႔ ထပျပး အပလကတာက

Page 77: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 73

Written By SevenLamp

ေျပာခငတာပါ။ ဒလလပလကရင function ၂ ခ ျဖစသြားမလား၊ မျဖစပါဘး။ override လပျခငးခရတ႔ function က ေပာကသြားမာပါ။ function overrideing က အဓကအားျဖင polymorphism န႔ တြျပးသးေလ ရပါတယ။ parent class ထမာ ရျပးသား function တစခက child class ထမာျပနျပးေရးခငတယ ဆရင override လပဖ႔ လလာပါျပ။ ဒလ အခနမးမာ function overriding ကသးပါတယ။ ဥပမာေလးန႔ ေျပာရရင… ကြၽနေတာမာ animal ဆတ႔ class ရတယဗာ၊ parent class ေပါ၊ အဒ animal class ထမာ eat() ဆတ႔ function ေလးပါတယ။

class animal { public void eat() { Console.WriteLine("Eat something"); } }

အေက.. အဒ animal class မာ child class ၂ ခရတယ။ dog class န႔ ant class ေပါ။ အဒ dog class န႔ ant class က animal class ကေန inheritance လပထားတာျဖစတ႔ အတြက သတ႔ဆမာ eat() function အလအေလာက ပါလာပါတယ။ အဒ parent class ကေနပါလာတ႔ eat() function ထက statement ေတြက child class မာ မလခငဘး။ ပျပး detail ၾကတ႔ message န႔ အစားထးခငတယဆပါေတာ (ဥပမာ.. Eat something အစား၊ Eat Bone တ႔ Eat sugur တ႔န႔ အစားထးခငျပဆရင)၊ ဒါဆ ဘယလလပမလ? ေနာကထပ function တစခထပေဆာကခငတာ မဟတဘးေနာ၊ parameter လညး မေျပာငးတ႔ အတြက overloading လညး လပလ႔ မရဘး။ ဒလ အေျခအေနမးမာ ကြၽနေတာတ႔ မျဖစမေန function overriding လပဖ႔ လလာပါျပ။

ဒါဆ function overriding လပဖ႔ ဘာလမလ? Parent class ထမာ ဒတငးေရးထားတ႔ function တငးကေတာ override လပလ႔ မရပါဘး။ override လပဖ႔ ခြငျပထားတ႔ function ေတြကပ လပလ႔ရတာပါ။ ဒလ override လပဖ႔ ခြငျပခငတယဆရင parent class ထက function ရ႕ေရ႕မာ virtual ဆတ႔ keyword ေလးထညေရးေပးလကရပါတယ။

class animal { public virtual void eat() { Console.WriteLine("Eat something"); } }

Page 78: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 74

Written By SevenLamp

override ျပနလပမယ child class က function ေရ႕မာေတာ override ဆတ႔ keywordက ထညေပးရပါတယ။

class dog : animal { public override void eat() { Console.WriteLine("Eat Bone!"); } }

က… example program ေလး တစခေလာကေရးၾကညပါဥး။

class animal { public virtual void eat() { Console.WriteLine("Animal: Eat something"); } } class dog : animal { public override void eat() // function overriding { Console.WriteLine("Dog: Eat Bone!"); } } class ant : animal { public override void eat() { Console.WriteLine("Ant: Eat Sugar"); } } class Program { static void Main() { animal obj; obj = new animal(); obj.eat();

Page 79: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 75

Written By SevenLamp

obj = new dog(); //polymorphism obj.eat(); obj = new ant(); obj.eat(); Console.Read(); } }

Basic of C# က ကြၽနေတာဒမာပ ရပလကပါေတာမယ။ အခေလာကဆရင ကြၽနေတာတ႔ C# ဆတာ ဘာလသေလာကပါျပ။ OOP အေၾကာငးလညး နညးနညးေတာ နားလညေလာကျပလ႔ ယဆပါတယ။ ေနာကပဒ႔ေတြမာ window application အပငးန႔ web application အပငးက ဆကေရးသြားပါမယခငဗာ။

Graphics And Random

Graphics Class

ကြၽနေတာတ႔ ပေတြဆြခငျပဆရင ဘာေတြလအပမလ။ အရငဆး ဆြဖ႔အတြက ေနာကခတစခလပါမယ။ စာရြကေသာလညးေကာငး၊ နရေသာလညးေကာငး၊ ပတကား ေသာလညးေကာငးေပါ။ ေနာကျပး ဆြမယ ခတျဖစျဖစ စတတျဖစျဖစလပါမယ။ ဒ ၂ ခရျပဆရငေတာ ကြၽနေတာတ႔ ပေတြ ဆြလ႔ရပါၿပ။ ဒအတငးပါပ ကြၽနေတာတ႔ C# window application မာ graphic ပေတြ ဆြဖ႔ လအပလာျပဆရငလညး ဆြခငတ႔ ေနာကခ object န႔ ဆြမယ pen or brush လအပပါတယ။ တကယဆြတ႔ အလပကေတာ graphics object ကေနတဆငလပေပးရပါမယ။ အရငဆး Graphics Class က object ေဆာကရပါမယ။ ဒလ ေဆာကတ႔အခါ ကြၽနေတာတ႔ ဆြခငတ႔ ေနာကခobject ကေနတဆင CreateGraphic() ဆတ႔ function ကသးၿပးေဆာကရမာပါ။ ဒလမးပါ..

Graphics g = this.CreateGraphics(); // form ေပၚမာ ဆြရန…

Graphics g = label1.CreateGraphics(); // label ေပၚမာ ဆြရန…

ေနာကခကေရြးၿပးၿပဆရင အခလအပတာက ဆြမယ ခတပါ။ ကြၽနေတာဆြမယပမာ outline အနားသပပ ပါမယဆရင Pen class ကသးရၿပး။ အတြငးသား ကပါ အေရာငျဖညမယဆရငေတာ

Page 80: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 76

Written By SevenLamp

Brush class ကသးရပါမယ။ ကြၽနေတာလခငတ႔ အေရာငကလညး တခါတညး ေျပာေပးလကပါမယ။

Pen p = new Pen (Color.Red); // အနေရာင ခတေလး တစခယလကတာပါ။

လငးရ႕ အထအပါးကပါ ခနေပးလ႔လညး ရပါတယ။ pen class မာ width property မာ ျပငေပးလ႔ရပါတယ။

p.Width = 2; // line အထ 2 pixel ယပါမယ။

ဒါမမဟတ… Pen object ေဆာကတနးမာပ constructor ထမာတခါတညး ထညေပးလကလညး ရပါတယ။

Pen p = new Pen (Color.Red, 2);

Brush object ေဆာကရငေတာ တစခကသတထားရမာက Brush class ကယတငက object ေဆာကလ႔ မရပါဘး။ သ႔ရ႕ child class (SolidBrush, LinearGradientBrush,…) ေတြကပ object ေဆာကလ႔ရပါတယ။

Brush b = new SolidBrush (Color.Green); // အစမးေရာင စတတေလးတစခယလကတာပါ။

က.. အခေနာကဆး ကြၽနေတာတ႔ တကယဆြပါေတာမယ။ Pen ကသးမယဆရင Draw function ေတြကသးရျပး၊ Brush ကသးမယဆရငေတာ Fill Function က သးရပါတယ။ အခကြၽနေတာ width 100, height 100 ရတ႔ အစမးေရာက box ေလးက အနေရာငအနားကြပေလးန႔ လခငတယဆရင…..

Graphics g = this.CreateGraphics();

Pen p = new Pen(Color.Red, 2);

Brush b = new SolidBrush(Color.Green);

g.FillRectangle(b, 10, 10, 100, 100);

g.DrawRectangle(p, 10, 10, 100, 100);

ေနာကသဖ႔ တစခလေသးတာက ဒကဒေတြေရးရမယ event ပါ။ Form စေပၚလာလာခငးမာ ေပၚခငရင Form_Paint event မာ ေရးရပါမယ။ Button တစခခကႏပမ ဆြမယဆရငေတာ အဒ

Page 81: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 77

Written By SevenLamp

button_click event မာ ေရးရမာေပါ။ Paint event မာ မေရးထားတာေတြ အားလးက form က Minimax လပလကရင အကန ေပာကသြားမာပါ။

Random Class

ကြၽနေတာတ႔ C# programming language မာ random ေခါကခငၿပဆရင Random Class ကသးရပါတယ။ Random ေခါကတယဆတာက သကမတထားတ႔ range တစခအတြငးမာ ျဖစခငတာျဖစဆျပး တစခက ေရြးလကတာပါ။

Random rnd = new Random();

rnd.Next(); // Integer value တစခ return ျပနပါတယ။

rnd.Next(10); // 0 – 9 ထက value တစခ return ျပနပါတယ။

rnd.Next(2, 6); // 2 – 5 ထက value တစခ return ျပနပါတယ။

က ဟတၿပ အခကြၽနေတာက ခန rectangle ေလးရ႕ location ေလးကက form ေပၚမာ random ေပၚေအာင ေရးၾကညရေအာင။

Random rnd = new Random();

int x = rnd.Next(this.ClientSize.Width);

int y = rnd.Next(this.ClientSize.Height);

Graphics g = this.CreateGraphics();

Pen p = new Pen(Color.Red, 2);

Brush b = new SolidBrush(Color.Green);

g.FillRectangle(b, x, y, 100, 100);

g.DrawRectangle(p, x, y, 100, 100);

Page 82: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 78

Written By SevenLamp

Basic Window Application (Part 1)

Event

Window Form Application ေတြမာ အေရးၾကးတ႔ အစတအပငး တစခအေနန႔ သဖ႔လာလလာတာက Event ဆတာေလးပါ။ ဟတျပ… Event ဆတာဘာလ? Event ဆတာက အလြယေျပာရရင အျဖစအပကတစခလ႔ ေျပာရပါမယ။ အျပငေလာကမာ မးရြာတယ၊ မးခနးတယ၊ ေလတကတယ၊ အနးသးေၾကြတယ စသညျဖငေပၚ အဒလ ျဖစသြားတာေတြ အားလးက Event လ႔ ေျပာလ႔ ရမယထငပါတယ။ ကြၽနေတာတ႔ Programming မာ လညး user ရ႕ လပေဆာငမႈေပၚမတညျပး ျဖစပကသြားတာေတြ အားလးက Event လ႔ေခၚပါတယ။ User က Window Form ေပၚမာ Mouse က ႏပလကရင ႏပတယ ဆတ႔ အျဖစအပကျဖစပါတယ။ ဒလပါပ Form ၾကးက ပတလကရငလညး Form ပတတယဆတ႔ အျဖစအပကျဖစသြားပါတယ။ အဒလမး User ရ႕ action တငး အတြက Event ေတြျဖစေနပါတယ။ အဒလ Event ေတြ ျဖစသြားတ႔ အခနမာ ကြၽနေတာတ႔ programmer ေတြက user ေတြက ျပနျပး ေပးခငတ႔ response ေတြ ရလာျပဆရငေတာ အဒ အတြက Coding ေတြ ေရးေပးရပါမယ။ ( ဥပမာ user က form က click လပရင Hello လ႔ user က ျပခငတယ။ ဒါမမဟတ form ေပၚမာ mouse ေရႊ႕ရင mouse pointer ရ႕ location ေလး ျပခငတယ။ စသညျဖငေပါ..)။ အဒလ ေရးဖ႔ လပတာက Event Handling လပတယလ႔ ေခၚပါတယ။ Event က Handle လပတာကလညး အေရးၾကးပါတယ။ ကြၽနေတာတ႔ ကဒေတြ မေရးခင အရငဆး ဘယ event မာ ေရးရမာလ ဆတာက ခြျခားေရြးနငဖ႔ လပါတယ။ ကြၽနေတာက Mouse_Click Event မာ ေရးရမယ ကဒက Key_Press Event မာ သြားေရးရင Mouse ႏပတ႔အခါ အလပလပမာ မဟတပါဘး။

အခကြၽနေတာတ႔ window form ရ႕ event ေလးေတြက နညးနညး ေလလာလကရေအာင။ Form မာ ပထမဆး သဖ႔လတ႔ event က Load Event ပါ။ ကြၽနေတာတ႔ Form object က memory ေပၚဆြတငတ႔ အခနမာ form load event ျဖစပါတယ။ form load event က form ၾကး screen မာ မေပၚခငျဖစတာ ျဖစတ႔အတြကေၾကာငး form မာ initialize လပဖ႔ လတ႔ အပငးေတြက form load ထမာ ေရးေပးေလရတယ။ ဥပမာ.. ကြၽနေတာက form ေပၚလာတာန႔ form background color က random color ေလး ျဖစေစခငတယဆရင form load event ထမာ ဒလေလး ေရးေပးရမာပါ….

private void Form1_Load(object sender, EventArgs e) { Random rnd = new Random(); this.BackColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); }

Page 83: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 79

Written By SevenLamp

ဒလပါပ.. form ၾကး ေပၚေနတ႔ အခနမာ form ေပၚမာ click ႏပတငးမာလညး ကာလာေျပာငးေနခငတယ ဆရင Form ရ႕ Click Event မာပါ သြားေရးေပးရမာပါ။

private void Form1_Click(object sender, EventArgs e) { Random rnd = new Random(); this.BackColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256)); }

အခကြၽနေတာက form က user က ပတလကတ႔ အခနမာ user က ပတမာ ေသခာလားဆျပး confirm message ေလး ေမးခငတယဆပါေတာ… ဒါဆရင ဘယမာ ေရးရမာလ ? ဟတက႔ Form ရ႕ FormClosing Event မာ ေရးရပါမယ။ ဒလမးပါ…

Pic_1

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult res = MessageBox.Show("Sure to close?", "Confirm...", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (res == DialogResult.No) e.Cancel = true; }

MessageBox class ထက show function ေလးက ေခၚလကရင ကြၽနေတာတ႔ form ေပၚမာ dialog form ေလး တစခ ျပေပးပါတယ။ dialog form ဆတာက အဒ form ေပၚေနရင တျခား form ေတြက

Page 84: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 80

Written By SevenLamp

အလပဆကလပလ႔ မရပါဘး။ အဒ dialog form ပတသြားမ အလပဆကလပလ႔ ရပါတယ။ အဒ MessageBox form ေလးရ႕ Show function မာ အဓက parameter ၄ ခ ေပးလ႔ ရပါတယ။

၁ – ေပၚခငတ႔ Message ( here : Sure to close? ) ၂ – Title bar Text ( here : Confirm… ) ၃ – ေပၚခငတ႔ Button အမးအစားေတြ ( here : Yes and No ) MessageBoxButtons ဆတ႔ enum ေလးထက တနဖး တစခခေရြးေပးရပါမယ။ default ကေတာ OK button ပါ။ ၄ – ေပၚခငတ႔ Icon ( here : Warning ) ဒါလညး တတပါပ… MessageBoxIcon အမ းအစား enum ပါ။

ဒ parameter ၄ ခက နပါတ ၁ တစခထ ေပးမယဆလညး ရပါတယ။ ဒါေပမယ နပါတ ၂ ပေပးမယဆရငေတာ မရပါဘး။ နပါတ ၃ ကေပးခငတယဆရင နပါတ ၁ ေရာ နပါတ ၂ ပါေပးမ ရပါမယ။

Dialog form ေတြအားလး ပတသြားတ႔ အခနမာ DialogResult အမ းအစား enum တစခ return ျပနပါတယ။ အခ ျပနလာတ႔ return value က ကြၽနေတာက No န႔ ညလား ဆျပး စစလကပါတယ။ (ကြၽနေတာက MessageBoxButtons မာ YesNo ကေရြးလကတ႔အတြက Return value ဟာ Yes ေသာလညးေကာငး၊ No ေသာလညးေကာငး return ျပနပါမယ။ ) ကြၽနေတာတ႔ အခေရးေနတ႔ Event က form ပတတ႔ event ျဖစတ႔အတြက User က Yes ကႏပရင ကြၽနေတာတ႔က ဘာမ လပေပးစရာ မလပါဘး။ အ.. User က No ကႏပရငေတာ ကြၽနေတာတ႔က Form မပတေအာင e.Cancel ထက true value သြားထညေပးရပါတယ။ ဒါဆ form မပတေတာပါဘး။ ခေလာကဆ Event ဆတာက နညးနညး နားလညလာမယ ထငပါတယ။

Basic Window Application (Part 2)

Event 2 (Mouse Event)

ဒေန႔ ကြၽနေတာတ႔ window form application ရ႕ event ေတြ အေၾကာငးပ ဆကရေအာင။ အခကြၽနေတာက program run လကျပး form ေပၚမာ mouse ေရႊ႕ရင အဒ mouse pointer ရ႕ location ေလးက form ရ႕ caption မာ ျပခငတယဆပါေတာ။ ဒါဆရင ကြၽနေတာက ဘယ event ကသးရမလ ဆရင Form ရ႕ Mouse Move Event ကသးရပါမယ။

private void Form1_MouseMove(object sender, MouseEventArgs e) {

Page 85: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 81

Written By SevenLamp

this.Text = e.Location.ToString(); }

ကြၽနေတာက form Title bar မာ မျပခငဘး mouse pointer ေလးရ႕ ေဘးမာ ပ location ေလးက ေပၚေနေစခငတယဆရငေတာ Form ေပၚမာ စာသားေတြ ျပဖ႔အတြက Label Control ကသးျပး အခလေရးရပါမယ။

pic1

private void Form1_MouseMove(object sender, MouseEventArgs e) { label1.Left = e.X + 10; label1.Top = e.Y - 10; label1.Text = e.Location.ToString(); }

အရငဆး Form ေပၚမာ Label တစခထညရပါမယ။ Mouse Move event မာ အဒ Label ေလးရ႕ Location ကေရႊဖ႔အတြက Left န႔ Top က mouse pointer လကရေရာကေနတ႔ location(x,y) သြားထညေပးလကပါတယ။ ဒေနရာမာ တစခါတညး သလကဖ႔လတာက form ေပၚမာ control ေတြ ေနရာေရႊ႕ခငရင အဒ control ရ႕ left န႔ top က ေျပာငးျခငးအားျဖင ေရႊ႕နငတယဆတာေလးပါ။

Basic Window Application (Part 3)

ေဘာလးေလး လႈမရေအာင

Page 86: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 82

Written By SevenLamp

pic1

ဒတစေခါက ကြၽနေတာတ႔ ေဘာလးေလးက form ေပၚမာ လႈမၾကရေအာင။ အရငဆး picturebox တစခယလကပါ။ ျပးရင image property ကေန ေဘာလးပေလးက import လပထားလကပါဥး။ picturebox ရ႕ property ေတြမာ ေနာကထပ သဖ႔ လတာ တစခက sizemode property ပါ။ sizemode property က ေလာကျပး ေျပာငးျပး စမးၾကညလကရင သသြားမာပါ။ က အခ ေဘာလးပေလး ရသြားပါျပ၊ ေရႊ႕ဖ႔ပ ကနေတာတယ။ ကြၽနေတာက ပထမဆး အေနန႔ေတာ keyboard က up – down, left – right keys ေလးေတြက အသးျပျပး ေဘာလးက ေရႊ႕ခငပါတယ။ ဒေတာ keyboard က key ႏပပါတယဆတ႔ event မာ ႏပလကတ႔ key က ျပနျပး စစရပါမယ။ picturebox မာ key န႔ ပါတသကတ႔ event မရပါဘး၊ ဒေတာ ကြၽနေတာတ႔ form ရ႕ key events ေတြကပ သးရပါမယ။ KeyDown, KeyUp န႔ KeyPress event 3 ခထကေနျပး ကြၽနေတာတ႔ KeyDown or KeyUp event ကသးရပါမယ။ ဘာလ႔လ ဆရင KeyPress Event မာ Arrow keys ေတြက ဖမးလ႔ အဆငမေျပတာေၾကာငပါ။

private void Form2_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Up) { if(pictureBox1.Top > 0) pictureBox1.Top -= 1; } else if (e.KeyCode == Keys.Down) { if(pictureBox1.Top+pictureBox1.Height < this.ClientSize.Height)

Page 87: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 83

Written By SevenLamp

pictureBox1.Top += 1; } else if (e.KeyCode == Keys.Left) { if(pictureBox1.Left > 0) pictureBox1.Left -= 1; } else if (e.KeyCode == Keys.Right) { if(pictureBox1.Left+pictureBox1.Width < this.ClientSize.Width) pictureBox1.Left += 1; } }

keydown event မာ user ရကလကတ႔ keycode ေလးက ျပနစစရပါတယ။ ျပးေတာမ up arrow ဆရင picturebox ေလးက အေပၚက ေရြ႕ဖ႔အတြက picturebox ရ႕ top property က ေလာေပးလကတာပါ။ ဒအတငးပ down arrow ဆရငေတာ top property က တးေပးရမာပါ။ ဒလ တးေပး ေလာေပးလပတ႔ ေနရာမာ form ရ႕ အျပငဘကက picturebox မေရာကသြားရေလေအာငထနးထားေပးဖ႔လ လပါေသးတယ။ ဒါေၾကာင ကြၽနေတာတ႔ up arrow ႏပတ႔ ေနရာမာ picturebox ရ႕ top က form ရ႕ အေပၚဆးေနရာထကၾကးလား စစရပါတယ။ အေပၚဆးေနရာက 0 ပါ။ ဒလပါပ down arrow ႏပတ႔ ေနရာမာလညး pictureboxရ႕ ေအာကေျခက form ရ႕ ေအာကေျခထက ငယမ ဆကျပး ေရြ႕ခြငေပးတာပါ။ ဒါဆရင left arrow န႔ right arrow မာ ေရးထားတာကလညး နားလညမာပါ။ ေဘာလးေလးက ပျပး ျမနျမနေရြ႕ေစခငရငေတာ ၁ တး၊ ၁ေလာတ႔ ေနရာမာ ၂ တ႔ ၃ တ႔ စသညျဖင တးေပးလ႔ ရပါတယ။

Automatic Moving the Ball

အခကြၽနေတာက ဒတယ အဆငေနန႔ ေဘာလးေလး အခလ ေရႊ႕တ႔ ကစၥက user key ႏပမ မဟတပ၊ ဒအတငးထားရငလညး သဟာသ ေရြ႕ေနေစခငပါတယ။ ဒါဆရင ဘယလ လပရမာပါလ။ user ရ႕ action အတြက reaction မဟတပ program ကေန သဟာသ အလအေလာက အလပလပေနေစခငတ႔ ကစၥတငးအတြက ကြၽနေတာတ႔ Timer Control က သးရပါမယ။ က… timer control ေလး form ထထညလကပါဥး။ Timer Control အေၾကာငးက ကြၽနေတာ Screen Server Program ေလးမာ ေျပာျပးပါျပ။ timer control ရ႕ interval property မာ ၁၀ ေလာကထား၊ enabled က true ေပးၿပး၊ Tick event ထမာ ေဘာလး ေရြ႕ဖ႔ လအပတ႔ code ေတြေရးေပးလကပါမယ။

bool ToUp = true; bool ToLeft = true;

Page 88: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 84

Written By SevenLamp

private void timer1_Tick(object sender, EventArgs e) { if (ToUp) pictureBox1.Top--; else pictureBox1.Top++; if (ToLeft) pictureBox1.Left--; else pictureBox1.Left++; if (pictureBox1.Top <= 0) ToUp = false; if (pictureBox1.Top + pictureBox1.Height >= this.ClientSize.Height) ToUp = true; if (pictureBox1.Left <= 0) ToLeft = false; if (pictureBox1.Left + pictureBox1.Width >= this.ClientSize.Width) ToLeft = true; }

ဒေနရာမာ နညးနညး ရငးဖ႔ လတာက အခကြၽနေတာက ေဘာလးေလး ေရႊ႕တ႔ အလပေတြအားလး(အေပၚ၊ေအာက… ) က event တစခထအတြငးမာ ေရးမာ ျဖစတ႔ အတြက၊ လကရ အေျခအေနက အေပၚဖကက သြားေနတ႔ အခနလား၊ ေအာကဆငးေနတ႔ အခနလား ဆတာက မတထားဖ႔လပါတယ။ ဒလ မတထားဖ႔အတြက ToUp ဆတ႔ bool variable တစလးက member variable အျဖစေၾကာျငာထားလကပါတယ။ အဒ ToUp ထမာ true ဆရင အေပၚက ေရႊ႕ဖ႔အတြက top က ၁ ေလာတယ။ မဟတဘး false ဆရငေတာ top က ၁ တးလကပါတယ။ ျပးေတာ ေဘာလးေလးက form ရ႕ အေပၚဆးက ေရာကျပဆရင ေအာကျပနဆငးရမယ ဒါေၾကာင အဒ ToUp ထက false ထညပါတယ။ ဒလပါပ ေအာကဆးေရာကျပဆရငလညး အေပၚျပနတကဖ႔အတြက ToUp ထက true ျပနထညေပးလကပါတယ။ ဒါဆ ကြၽနေတာ ေဘာလးေလးက အေပၚတကလက၊ ေအာကဆငးလကန႔ အျမတမး ေရႊ႕ေနပါလမမယ။ ဘယ၊ညာ အတြကလညး ဒသေဘာအတငးပါပ။

ဒ program ေလးမာ ကြၽနေတာ အဓက သေစခငတာက Key Event ေတြအေၾကာငးန႔ Timer Control အေၾကာငးေလးပါ။ ေနာကျပး Event တစခအတြငးမာ ဆန႔ကငဖက အလပ ၂ ခက ေရးရေတာမယဆရင အခလမး variable ေလးန႔ ထနးျပးသးရမယဆလညး သရပါမယ။

Page 89: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 85

Written By SevenLamp

ေနာကဆးတစခကကေတာ အခလမးကစၥေတြအတြက variable ေၾကာျငာမယဆရင local variable ကသးလ႔ မရပါဘး။ member variable ကေၾကာျငာမသာလင variable ထက တနဖးက သမးေပးထားနငမာပါ။

Chapter 10

ADO.NET in C# (part 1)

ကြၽနေတာတ႔ေတြ database ထက record ေတြက User Interface မာ ရတ႔ datagrid လ၊ textbox လ control ေတြမာ ျပဖ႔ ျပငဖ႔ ဘယလ ခတဆကရမလ ဆတ႔ အေၾကာငးက ဆကျပးေလလာၾကရေအာင။ C# window application မာ database န႔ ခတဆကဖ႔အတြက နညးလမး ၂ မ း သးလ႔ရပါတယ။ နပါတ ၁ နညးလမးကေတာ data ျပမယ UI control န႔ data ရတ႔ databaseက တကရကခတဆကျခငး ျဖစျပး ဒလေဆာငရြကနငဖ႔အတြက SQL DataSource object က သးရပါတယ။ နပါတ ၂ နညးလမးကေတာ database table ေတြထက data ေတြက ကြၽနေတာတ႔ program ရ႕ memory ေပၚမာ dataset ေတြ အေနန႔ သမးထားျပး၊ အဒ dataset ေတြန႔ UI controls ေတြန႔ ခတဆကျခငးပ ျဖစပါတယ။ ဒလ တဆငခ ခတဆကဖ႔ အတြကေတာ OBJECT DataSource န႔ dataset တ႔က သးရပါတယ။ ကြၽနေတာကေတာ dataset တဆငချပး object datasource န႔ သးရတာက ပျပးၾကကတယဗ။ ဘာလ႔လဆေတာ data အသြငးအထတ transaction တစခစအတြက database က အျမသြားေနစရာမလဘး။ dataset table ထမာပ

Page 90: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 86

Written By SevenLamp

လပလ႔ရတယ။ အားလးျပးလ႔ စတေကနပျပဆမ database ထက တစၾကမထ update လပနငတယ။ ေနာကပျပးေကာငးတာက quary ေတြက dataset တစေနရာထမာ စျပး ေရးထားတာေၾကာင လအပလ႔ modify လပခငတ႔ အခါမာ လြယကတယ။ sql datasource ကသးရင data ျပမယေနရာ ၃ ေနရာရရင quary က သးေနရာလးမာ သးခါေရးရမာဗ။ ဒါဆ ျပငမယဆရငလညး သးေနရာလးမာ လကျပငရလမမယ။ ခတဆကပ ၂မ းလးက ကြၽနေတာရငးျပပါမယ၊ ပထမဆး database ထမာ table ေလးတစခအရင သြားေဆာကလကပါဥး။

DATABASE NAME => mySaleDB

TABLE NAME => Category

Field name Data Type AllowNull

CategoryID int false PrimaryKey (auto increment)

CategoryName varchar(50) true

Description varchar(500) true

Status bit true Default vale – true

အေက.. ရျပေနာ… အခကြၽနေတာတ႔ object datasource န႔ သးတ႔ပစက အရငစျပး သးျပပါမယ။ ပထမဆး window project တစခေဆာကပါမယ။ VS2008 => File => New => Project => Window Form Application. Object datasource ကသးမယဆရင ပထမဆးလအပတာက dataset ပါ။ database table ထက data ေတြက memory ေပၚမာ သမးထားဖ႔အတြက ကြၽနေတာတ႔ dataset ကသးရပါမယ။ အေက project menu ေအာကက Add new item menuitem က ႏပလကပါ။ ဒါဆ item ေရြးဖ႔ window ေပၚလာမယ၊ အဒမာ dataset ဆတာကေရြး CategoryDataSet လ႔ နာမညေပးျပး Add လကပါ။ ဒါဆ CategoryDataSet.xsd ဆတ႔ dataset တစခကြၽနေတာတ႔ ရပါျပ။ database န႔ ခတဆကမယ dataset တစခမာ ပမာျပထားတ႔အတငး DataTable န႔ TableAdapter ဆျပး အပငး ၂ ပငးပါေလရပါတယ။ DataTable ကေတာ memory ေပၚမာ data ေတြသမးေပးျပး၊ Tableadapter ရ႕တာ၀နကေတာ အဒ table ထက database ကေန data အသြငးအထတက ေဆာငရြကေပးပါတယ။ ဒလေဆာငရြကဖ႔အတြက Query statement ေတြကြၽနေတာတ႔ ေဆာကေပးရမာပါ။ က TableAdapter စေဆာကရေအာင၊ ToolBox ထကေန tableadapter က double click လပျပးေရြးလကပါ။ TableAdapter ေဆာကတ႔ အခါမာ ပထမဆး database န႔ connection ယရပါတယ။ လကရ project ထမာ connection ယျပးသားရရင combobox ထမာ ေရြးရျပး၊ မရေသးရငေတာ new connection လပရပါမယ။

Page 91: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 87

Written By SevenLamp

New connection wizard မာ ကြၽနေတာတ႔ သးခငတ႔ database အမ းအစားေရြးလ႔ရပါတယ။ Microsoft Access သးမလား၊ Microsoft SQL Server ပသးမာလား၊ Oracle Database ပ ခတခငလားေရြးလ႔ရပါတယ။ ကြၽနေတာတ႔ Microsoft SQL Server ကပ ေရြးျပး continue လကပါမယ။

Add Connection wizard က Server Name ေနရာမာ ကြၽနေတာတ႔ database ရေနတ႔ computer name ကထညေပးရပါမယ။ ကယစကက ခတမယဆရင (.) ထညေပးလညးရပါတယ။ ျပးရင database login username န႔ password ထညေပးရပါမယ။ မရဘးဆရငေတာ Window

Page 92: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 88

Written By SevenLamp

Authentication ကေရြးခ႔ပါ။ ေနာကဆးတဆငကေတာ database name combo ထမာ mySaleDB ကေရြးေပးျပး OK လကပါ။

အခ dataconnection combo ေလးမာ ကြၽနေတာတ႔ ေရြးခ႔တ႔ connection ေလးေတြ႔ေနရပါျပ။ အဒ connection မာ password တခါတညးထညမလား မထညဘးလား ေရြးလ႔ရပါတယ။ ကြၽနေတာကေတာ တခါတညးပ ထညထားလကပါတယ။ ျပးရင Next လကပါဥး။

Page 93: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 89

Written By SevenLamp

အခေဆာကခ႔တ႔ connection ကသမးထားမလား လာေမးပါတယ။ သမးထားလကပါ။ ဒါဆရငေတာ connection ယတ႔ အပငးျပးပါျပ။ connection ရသြားျပးေတာ Query ဆကေရးရပါဥးမယ။ ပထမဥးဆး SQL Statement သးမလား၊ Store Procedure သးမလား ေရြးခငးတာပါ။ SQL Statement ပ ေရြးျပး Next လကပါ။

Page 94: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 90

Written By SevenLamp

ဒါဆရင Query ေရးဖ႔ ေနရာေရာကပါျပ။ ကြၽနေတာက Category table ထက record အားလး ထတျပဖ႔အတြက “SELECT * FROM Category” လ႔ေရးလကပါတယ။ query က ကယတငမေရးပ design ကပ ေဆာကခငးခငတယဆရင Query Builder button ကႏပျပး ေဆာကလ႔ ရပါတယ။ က ဆကျပး Next လကပါဥး။

ေနာကတစဆငမာေတာ ကြၽနေတာတ႔ေရးခ႔တ႔ query က program ထမာ ျပနေခၚဖ႔အတြက

Page 95: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 91

Written By SevenLamp

function name ေပးရတာပါ။ function ၂ ခေဆာကေပးပါတယ။ Fill န႔ Get ပါ။ dataset စေဆာကတ႔ ပထမဆး query အတြက နာမညမေျပာငးပါန႔ default အတငး ပ ထားျပး next လကပါဥး။

ေနာကဆးမာ ကြၽနေတာတ႔ရ႕ CategoryDataSet ၾကးေအာငျမငစြာ တညေဆာကျပးစးသြားပါျပ။ compiler ေဆာကေပးသြားတ႔ result ကၾကညလကပါဥး။ ကြၽနေတာတ႔က Select query တစခထ ေဆာကခ႔ေပမယ insert, update, delete အားလးက compiler က auto ေဆာကေပးသြားပါတယ။

Page 96: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 92

Written By SevenLamp

Finish လကရင categoryDataSet ထမာ Category Table ေလးရယ၊ table ထမာ ပါတ႔ column name ေတြရယ၊ CategoryTableAdapter ရယ၊ Fill န႔ GetDate Function ေတြရယက ေတြ႔ရမာပါ။ အေက… နားလညမယထငပါတယ။ ဒါဆရင ကြၽနေတာတ႔ Dataset ေတြ တညေဆာကတကပါျပ။ ေနာကေန႔မ datagridview န႔ ခတပါမယ။

ADO.NET in C# (part 2)

က မေန႔က ကြၽနေတာတ႔ categoryDataSet ေဆာကခ႔ျပးျပဆေတာ အခကြၽနေတာတ႔ datagrid မာ ျပဖ႔ လပရေအာင။ အရငဆး window form တစခယလကပါ၊ နာမညကေတာ CategoryList လ႔ ေပးလကပါ။ အဒ form ထက ပမာ ျပထားတ႔ အတငး label တစခ၊ button တစခန႔ datagrid

Page 97: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 93

Written By SevenLamp

တစခထညလကပါဥး။ control ေတြမာ ျပငရမယ property setting ကလညး ျပထားပါတယ။

ပ (၁)

Datagrid က click ႏပလကရင ညာဖကအေပၚေဒါငမာ arrow icon ေလးတစခေတြ႔ရပါလမမယ။ အဒါေလးက ႏပလကရင datasource ေရြးဖ႔ combobox ေလးကေတြ႔မာပါ။ အဒ combobox ေလးက ႏပျပး ဒ form ေလးမာ ရေနတ႔ datasource ေတြကေရြးလ႔ရပါတယ။ အခကြၽနေတာတ႔က datasource မထညရေသးလ႔ ဘာမ ေတြ႔ရမာမဟတပါဘး။ datasource တစခ create လပဖ႔နညးလမး ၂ခရပါတယ။ နညးလမး (၁) က ေအာကက ပ (၂) မာ ျပထားသလ combobox ထမာ အဆငဆငသြားျပး ကြၽနေတာတ႔ ေဆာကထားတ႔ CategoryDataSet ထက category table ေလးက ေရြးေပးလကပါ။ ဒါဆရင ပ (၃) မာ ျပထားသလ categoryBindingSource object, categoryDataSet object န႔ categoryTableAdapter တ႔က ေဆာကေပးသြားပါလမမယ။ datagrid မာလညး category table ထက column ေတြ ေပၚလာတာ ေတြ႔ရမာပါ။ ဒါဆရင datagrid န႔ dataset ခတတ႔ အပငးျပးသြားပါျပ။ အခ ဒ program ေလးက run လကရင data

Page 98: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 94

Written By SevenLamp

ေတြေပၚလာျပလား။ မေပၚဘးေနာ… ဘယေပၚမလ category table ထမာ data မ မရတာကး

ပ (၂)

ပ (၃)

က အခ ကြၽနေတာတ႔ dataset န႔ ခတဆကမႈ ျပးသြားျပ ဆေတာ။ data အသြငးအထတလပလ႔ ရပါျပ။ ဒလလပလ႔ ရဖ႔အတြက အရငဆး ပ (၃)မာ ျပထားသလ datagrid မာ Enable Adding,

Page 99: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 95

Written By SevenLamp

Enable Editing န႔ Enable Deleting တ႔က check လပေပးခ႔ရပါမယ။ အခ ကြၽနေတာတ႔ လပရမာက program က run လကျပး category ေတြထညရပါမယ။ ဒလထညတ႔ အခါမာ categoryID က ထညေပးစရာ မလပါဘး။ primary key ျဖစတ႔ categoryID က autoincrement လပထားတ႔ အတြက ကြၽနေတာတ႔ data ျဖညေပးစရာ မလပါဘး။ save လပရင အလလထညေပးသြားပါလမမယ။ အခကြၽနေတာတ႔ data ျဖညျပးလ႔ database ထက သမးေတာမယဆရင update button ကႏပပါမယ။ ဒါဆ update button ရ႕ click event မာ dataset ထက data ေတြက database ထသြားသမးဖ႔ အတြက code ေရးေပးရပါမယ။ ကြၽနေတာတ႔ အခ datagrid ထမာ ထညေနတ႔ data ေတြက memory ေပၚက categoryDataSet ထမာ ရေနပါတယ။ အဒ data ေတြက database ထေရာကဖ႔အတြက Adapter ကေနတဆင Update function ကေခၚရမာပါ။ မေခၚခငအရငဆး datagrid န႔ ခတထားတ႔ datasource က ျပငေနတာ ျပးပါျပလ႔ ေျပာေပးရပါမယ။ ဒလမးပါ…

private void button1_Click(object sender, EventArgs e) { this.categoryBindingSource.EndEdit(); this.categoryTableAdapter.Update(this.categoryDataSet.Category); }

အခ ကြၽနေတာေခၚလကတ႔ update function က dataset ေဆာကတနးက compiler က auto ေဆာကေပးသြားတ႔ function ျဖစပါတယ။

Page 100: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 96

Written By SevenLamp

ပ (၄)

ပ (၅)

ပ (၄) မာ ျပထားတ႔ အတငး ကြၽနေတာ category ၂ေၾကာငးျဖညလကပါတယ။ categoryID က -1 န႔ -2 ဆျပး temporary assign လပေပးသြားပါတယ။ update button က ႏပျပး update လပလကျပးတ႔ အခနမာေတာ ပ(၅) အတငး ျဖစသြားမာပါ။ categoryID က database ထကအတငး refresh ျဖစသြားပါတယ။ program က ပတျပး ျပနဖြငတ႔ အခါမာလညး ဒအတငးပ ေပၚေနပါလမမယ။ ဘာလ႔လဆေတာ form_load event မာ ေရးထားတ႔ ဒ code ေၾကာငပါ။

private void CategoryList_Load(object sender, EventArgs e) { this.categoryTableAdapter.Fill(this.categoryDataSet.Category); }

Page 101: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 97

Written By SevenLamp

ဒ code က ကြၽနေတာတ႔ datagrid န႔ dataset ထက table န႔ ခတလကတ႔ အခနမာ auto ေရးေပးသြားတာပါ။ dataset ထမာ ရတ႔ categoryTableAdapter ထမာ ကြၽနေတာတ႔ေရးခ႔တ႔ Fill function ကသးျပး dataset ထက category table ထက data ျဖညေပးပါတယ။ table ထမာ dataရသြားတ႔ အတြက table န႔ ခတထားတ႔ datagridview မာပါ data ေတြ ေပၚလာတာပါ။ အဒ formload event ထက data fill လပတ႔ code က comment ပတျပး ျပန run ရင data ေပၚမာ မဟတေတာပါဘး။ အေက ဒေလာကဆရင object datasource သးျပး datagridview န႔ data အသြငးအထတလပတာ နားလညျပထငပါတယ။

ADO.NET in C# (part 3)

က ဒေန႔ေတာ ကြၽနေတာတ႔ မေန႔က program ေလးကပ ပျပးလြယတ႔ နညးေလးသးျပး ျပနေရးလကရေအာငဗာ။ dataset က အရငမေဆာကပ datagrid ကေနတဆင ေဆာကမာျဖစပါတယ။

ပ(၁) ပ(၁)မာ ျပထားတ႔ အတငး အဆငဆငသြားလကပါ။ ကြၽနေတာတ႔ dataset ၾကမေဆာကထားတ႔အတြက choose data source ထမာ ဘာမ ေတြ႔ရမာ မဟတပါဘး။ က Add Project Data Source လငေလးက click လကပါ။

Page 102: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 98

Written By SevenLamp

ပ(၂) ဒါဆရင Data Source အမ းအစားေရြးခငးတ႔ window ေလးေပၚလာပါမယ။ ကြၽနေတာက databaseထကေန ယခငတာျဖစလ႔ Database ကေရြးျပး Next ပါမယ။

Page 103: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 99

Written By SevenLamp

ပ(၃) ဒါဆရင connection ေရြးခငးတ႔ ေနရာကေရာကပါျပ။ အရငက ခတဖးတ႔ connection ေတြရေနရင ပ(၃)မာ ျပထားသလ combobox ေလးထကေနေရြးေပးလကပါ။ မရဘးဆရငေတာ ဟေန႔က ေျပာခ႔သလ New Connection လပရမာပါ။ Next ထပႏပပါဥး၊ ဒါဆ connection ကသမးမလား ေမးလမမယ။ သမးမယေျပာျပး Next ထပႏပပါ။

Page 104: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 100

Written By SevenLamp

ပ(၄) Database object ေရြးခငးတ႔ ေနရာေရာကရင Tables ေအာကက Category Table ကေရြးရပါမယ။ DataSet name ေနရာမာ CategoryDataSet လ႔ ေျပာငးခငရင ေျပာငးလ႔ ရပါတယ။ ဒတငးထားလညး ျပနာမရပါဘး။ က Finished လကပါ။ ဒါဆရငေတာ ကြၽနေတာတ႔ datagrid န႔ database ခတဆကတ႔ လပငနးစဥ ျပးဆးပါျပ။ dataSet ကလညး ေဆာကေပးသြားမာပါ။ form load event မာလညး data fill လပေပးသြားပါလမမယ။ အခ ကြၽနေတာတ႔က data update လပဖ႔ code ၂ ေၾကာငးပ ေရးေပးစရာ လအပပါေတာတယ။ က…

Page 105: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 101

Written By SevenLamp

ဘယလလ… ပ(၅)

private void CategoryList_Load(object sender, EventArgs e) { this.categoryTableAdapter.Fill(this.mySaleDBDataSet.Category); } private void button1_Click(object sender, EventArgs e) { categoryBindingSource.EndEdit(); this.categoryTableAdapter.Update(mySaleDBDataSet.Category); }

Question & Answer 1

ကြၽနေတာ သငယခငးတ႔ရ႕ comment ထမာ ေမးတ႔ ေမးခြနးေလးေတြက အလငးသငသလ ျပနေျဖနငေအာငဆျပး Question and Answer ဆတ႔ အပငးေလး ထညဖ႔ စဥးစားမတယ။ ဒါန႔ ဒ category ေလးက စလကပါတယ။ သငယခငးတ႔ C# န႔ ပတသကျပး သခငတာေလးေတြ ေမးနငပါတယ။ ကြၽနေတာ သသေလာက ေျဖေပးပါမယ။ အ မသရငလညး ၾကးစား ရာဖတျပး ေျဖေပးနငေအာင ၾကးစားပါမယ။

Page 106: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 102

Written By SevenLamp

အရငဆး Ko Thet ေမးတ႔ ေမးခြနးေလးန႔ စလကရေအာင….

Q : How to populate data in text box by using combo box.Says, Chose ID in Combo Box, then Name, Add, City, Contact no and etc will be shown in respective text box control. If you have time, please show me.

Comment by Ko Thet — October 22, 2009

A : ဒေမးခြနးေလးအတြက ကြၽနေတာ example program ေလး တစခ ေရးျပပါမယ။ အရငဆး ေအာကမာ ျပထားတ႔ ပ(၁) အတငး database ထမာ table ေလး တစခေဆာကလကပါတယ။

Database name => Course_DB

Table name => EmployeeTable

pic_1

Page 107: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 103

Written By SevenLamp

Note: EmployeeID က ကြၽနေတာတ႔ ထညစရာ မလပ database မာ auto တးသြားခငလ႔ အဒ column properties မာ (Is Identity) က Yes လ႔ ေပးလကပါတယ။ Identity Seed (1) ကေနစျပး Identity Increment (1) စ တးသြားမယလ႔ ေျပာတာပါ။

ျပးရင အဒ EmployeeTable ထက Sample Data နညးနညး ျဖညေပးထားလကပါမယ။ ပ(၂) န႔ ပ(၃)မာ ၾကညပါ။

pic_2

pic_3

database ေဆာကျပးေတာ အခကြၽနေတာတ႔ program ဘကအပငးက ဆကပါမယ။ New Window Application တစခယျပး ပ(၄) အတငး design ခလကပါတယ။

pic_4

Page 108: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 104

Written By SevenLamp

Database ထက data က window form မာ ခတျပဖ႔အတြက ကြၽနေတာ အခ ပ(၅) မာျပထားသလ အဆငဆင လပသြားလကပါ။

pic_5

Page 109: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 105

Written By SevenLamp

pic_6

Data Source Configuration Wizard မာ ‘DataBase’ ကေရြးျပး Next ထပႏပလကပါ။ ဒါဆရင ပ(၇) မာ ျပထားသလ database connection ေရြးခငးတ႔ ေနရာကေရာကပါမယ။ ကြၽနေတာတ႔က အခမ connection အသစေဆာကမာ ျဖစလ႔ New Connection button ကႏပလကပါ။ Add connection wizard ေရာကရင ပ(ဂ) မာ ျပထားသလမး connection တစခ ေဆာကလကပါ။

Page 110: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 106

Written By SevenLamp

pic_7

Page 111: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 107

Written By SevenLamp

pic_8

Page 112: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 108

Written By SevenLamp

pic_9

ပ(၉) မာ ျပထားတ႔ အတငး ကြၽနေတာတ႔ database connection တစခရပါျပ။ အဒ connection string ထမာ password ထညသမးထားမယဆရင ဒတယ radio button ေလးက ေရြးေပးရပါမယ။

Page 113: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 109

Written By SevenLamp

pic_10

ေနာကတစဆငမာ connection setting ေလးက သမးမလားလ႔ ေမးပါတယ။ အေက သမးထားလကပါ… နာမညကလညး မေျပာငးတာေကာငးပါတယ။

Page 114: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 110

Written By SevenLamp

pic_11

အခကြၽနေတာတ႔ combobox ကေနတဆင dataset ေဆာကတ႔ အဆငျပးသြားပါျပ။ အခ ေျပာသလမေဆာကခငဘး ဒါမမဟတလညး ကြၽနေတာတ႔ form ထမာ combobox မပါဘးဆရငလညး dataset ၾကးပ ဒတငး ယျပး ေဆာကလ႔လညး ရပါတယ။ (Project Menu -> Add New Items -> DataSet )

Page 115: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 111

Written By SevenLamp

pic_12

Code file ထမာလညး Form_Load event က auto ေဆာကေပးသြားပါလမမယ။

private void Form1_Load(object sender, EventArgs e) { this.employeeTableTableAdapter.Fill(this.course_DBDataSet.EmployeeTable); }

Database ထက data ေတြက ကြၽနေတာတ႔ program ရ႕ memory ေပၚမာ ယျပး သမးေပးထားတ႔ အလပက DataSet က လပေပးပါတယ။ အဒ dataset ထက data ေတြ ပ႔ေဆာငေပးတ႔ အလပကေတာ tableadapter က တာ၀နယပါတယ။ Form Load event ထမာ ေရးေပးသြားတ႔ အလပက အဒ data fill လပေပးတ႔ အလပပါ။ DataSet ထက data ေတြက UI Controls ေတြမာ ျပဖ႔ အတြကကေတာ BindingSource ကသးရပါတယ။

pic_13

Page 116: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 112

Written By SevenLamp

အခ program ေလးက အခေန run လကရင combobox ထမာ employee no ေတြကေတြ႔ေနရမာပါ။ ဒါေပမယ textbox ေတြမာေတာ ေပၚမာ မဟတေသးပါဘး။ ကြၽနေတာတ႔ textbox ေတြန႔ မခတေပးရေသးဘးေလ။ အေက အခ textbox ေတြန႔ bindingsource န႔ ခတေပးပါမယ။

pic_14

Textbox န႔ databind ဖ႔အတြက textbox ရ႕ properties window ကသြားလကပါ။ အေပၚဆးနားမာ (DataBindings) ဆတ႔ property ေလးက ဖြငလကျပး၊ Text property ကႏပလကပါ။ အဒမာ ကြၽနေတာတ႔ form မာ ရေနတ႔ employeeTableBindingSource ကေတြရပါမယ။ အဒ bindingsource ထကေန ကြၽနေတာတ႔ textbox မာ ျပခငတ႔ column name ကေရြးေပးလကရပါပ။ က… ကနတ႔ textbox ေတြအားလးမာလညး ဒတငးပ လကလပလကပါ။ အခဆရငေတာ Ko Thet လခငတ႔ Program ပစေလး ရျပထငပါတယ။

Chapter 11

create your database

Page 117: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 113

Written By SevenLamp

ကေကာစြာရ႕ cbox ထက ေမးခြနးေလးက ေျဖေပးရငးန႔ ကြၽနေတာ SQL Server 2005 မာ database တညေဆာကပေလး ေျပာျပေပးခငပါတယ။ အရငဆး SQL Server 2005 က run ဖ႔အတြက START-> ALL PROGRAM -> MICROSOFT SQL SERVER 2005 -> SQL SERVER MANAGEMENT STUDIO က click လကပါ။ ဒါဆရင sql server management studio ပြငလာျပး database server login ေတာငးပါလမမယ။ server name ေနရာမာ ကြၽနေတာတ႔က ကယစကကယ ဖြငမာျဖစလ႔ computer name ဒါမမဟတ local ဒါမမဟတ (.) ေလးထညေပးရပါမယ။ authentication အေကာင အတြကေတာ ၂ မးေရြးလ႔ရပါတယ၊ window authentication န႔ ၀ငမယဆရင login name န႔ password ေပးစရာမလပါဘး။ SQL Server Authentication န႔ ၀ငရငေတာ default login name က (sa) ပါ၊ password ကေတာ ကြၽနေတာတ႔ SQL Server install လပတနးက ေပးထားခ႔တ႔ password ကသးရပါမယ။ တကယလ႔ SQL Server install လပတနးက မေပးခ႔ဘး ဆရငေတာ window authentication ကပ ေရြးျပး ၀ငလကပါ။

အခကြၽနေတာတ႔ server ထက ေရာကပါျပ။ အဒမာ object explorer ကေတြ႔ရမာပါ။ မေတြ႔ရင View Menu -> object explorer ကေရြးလကပါ။ object explorer ထမာ Databases, Security, Replication စသညျဖင tree nodes ေလးေတြ ေတြ႔ရပါမယ။ အဒ ထက Databases nodes ေလးထက ထပ၀ငလကရင ကြၽနေတာတ႔ လကရ တညေဆာကထားတ႔ databases ေတြက ေတြ႔ရပါလမမယ။ အခကြၽနေတာတ႔ database တစခ အသစေဆာကဖ႔အတြက Databases node ေလးက right click လပျပး new database ဆတာက ေရြးလကပါ။ new Database window ေလး ေပၚလာပါမယ။ အဒက database name textbox ထမာ ကြၽနေတာတ႔ တညေဆာကခငတ႔ database အမညေလးထညပါ။ owner ကေတာ default ပထားလကပါ။ database တစခအတြက .mdf file န႔ .ldf file ဆျပး file ၂ ခ ေဆာကေပးပါလမမယ၊ ေဆာကေပးမယ default location က C:\ ေအာကက Sql server သြငးထားတ႔ location မာပါ။ ဒါက ကြၽနေတာတ႔ ၾကကတ႔ location မာ သြားေဆာကလ႔လညး ရပါတယ၊ database files ဇယားကြကထက Path ဆတ႔ ေနရာမာ သြားေရြးေပးလကပါ။ ျပးရငေတာ OK လပလကပါ၊ ဒါဆရင အခ ကြၽနေတာတ႔ ကယပင database ေလးေဆာကလ႔ ျပးပါျပ။

ဒ database ေလးထမာ data ေတြသမးဖ႔အတြက table ေတြ ထပေဆာကေပးဖ႔ လအပပါေသးတယ။ အဒ အတြက databases node ေလးထက ကြၽနေတာတ႔ အသစေဆာကလကတ႔ database အမညေလးက ထပဖြငလကရင Database Diagrams, Tables, Views စသညျဖင ထပေတြ႔ရပါမယ။ အဒမာ Tables nodes ေလးက right click လပျပး new table က ေရြးလကပါ။ ဒါဆ ကြၽနေတာတ႔ table အသစေဆာကဖ႔ ေနရာက ေရာကပါမယ။ အဒ ေနရာမာ ကြၽနေတာတ႔ table ထမာ သမးခငတ႔ record ေတြအတြက သမးမယ column(field) ေတြေၾကျငာေပးရပါမယ။ column name ေနရာမာ ကယၾကကတယ အမညေပးရမယ၊ တခ သတထားဖ႔က အဒ အမညအတြက space ေတြ မထညေပးပါန႔။ ထညေပးလ႔ မရဘးမဟတဘးေနာ၊

Page 118: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 114

Written By SevenLamp

မထညေပးတာက program ေတြကေန ျပနေခၚသးမယ အခါ ပျပး အဆငေျပေစပါတယ။ ျပးရင အဒ column အတြက သမးမယ data type က ေၾကျငာေပးရပါမယ။ allow null ဆတ႔ checkbox ေလးကေတာ ကြၽနေတာတ႔ အခေဆာကလကတ႔ column ေလးမာ data မထညလ႔ မရဘး၊ ထညက ထညရမယလ႔ သကမတခငရင off လပရျပး၊ မထညလညး ရမယဆရင on ေပးရမာပါ။ ဒနညးအားျဖင ကြၽနေတာတ႔ စတၾကက ေကာလေတြ ေဆာကေပးရပါမယ။ ဥပမာ အားျဖင

column name data type allow nulls

CategoryID int off

CategoryName varchar(50) on

စသညျဖငေပါ။

columns ေတြ ေဆာကလ႔ ျပးျပဆရင table တစခမာ လအပတ႔ primary key ကသကမတေပးရပါမယ။ ကယ သကမတခငတ႔ column ေလးက ေရြးျပး toolbar ေပၚက ေသာပ icon ေလးက ႏပလကရပါပ။ ျပး အဒ primary key က auto တးသြားေစခငရငေတာ ေအာကနားက column properties ထမာ Identity Specification ဆတာ ေနရာမာ (Is Identity) က Yes လပေပးရပါမယ။ အားလးျပးသြားျပဆရင ကြၽနေတာတ႔ အခေဆာကလကတ႔ table ေလးက save လပလကပါေတာ။ အေက ဒါဆရင အခကြၽနေတာတ႔ table ေတြ ေဆာကတကပါျပ။

Database Replication (part 1)

Database Replication (Synchronization)

ဒေန႔ ကြၽနေတာတ႔ database synchronization န႔ ပတသကတ႔ အေၾကာငးေလး နညးနညး ေျပာၾကရေအာငဗာ။ database က synchronize လပတယဆတာဘာလ? တစခထကပတ႔ database ေတြထမာ data ေတြကအတတရေနေအာင ျပလပျခငးလ႔ ေျပာရမယထငတယ။ ဒလဗာ.. ကြၽနေတာမာ database 2 ခရတယ db_A န႔ db_B ဆပါေတာ။ အဒ database ၂ ခက synchronization လပခငတယ။ db_A ထက ထညလကတ႔ data ေတြက db_B ထမာပါ ေရာကသြားေစခငတာေပါ။ ဒလ လပထားျခငး အားျဖင အေၾကာငး တစခခေၾကာင database တစခပကသြားခ႔ရင တျခား တစခကေန data ေတြက ျပနရေစနငမယေလ။ ေနာက တျခား အသး၀ငတ႔ ေနရာေတြ အမားၾကး ရဥးမယဗ။

Page 119: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 115

Written By SevenLamp

Database replication မာ publisher, distributor န႔ subscriber ဆျပး အဓက ဇာတလက ၃ ေယာကရတယဗ။

pic_1

Publisher ဆတာက replication မာ dataေတြ ပ႔လႊတမယ database ပါ။

Subscriber ဆတာကေတာ publisherက ပ႔လကတ႔ data ေတြက လကခမယ database ပါ။

Distributor ဆတာကေတာ data ေတြက သယယပ႔ေဆာငေပးတ႔သလ႔ ေျပာရမယထငတယ။ replication န႔ သကဆငတ႔ replication status data ေတြက သမးထားေပးတ႔ database ပါ။

အေက အေပၚမာ ေျပာခ႔သလ db_A ကေန db_B က replication လပမယဆရင။ db_A က publisher, db_B က subscriber ပါ။ publisher န႔ subscriber က ကြနပတာ တစလးထမာ ျဖစနငသလ၊ local area network ထမာလညး ျဖစနငပါတယ။ ဒါအျပင internet ထမာ ရတ႔ server ၂ လးမာလညး ျဖစနငပါတယ။ distributor database ကလညး publisher computer ထမာ ျဖစျဖစ၊ subscriber computer ထမာ ျဖစျဖစ၊ ဒါမမဟတလညး တျခား ကြၽနပတာ တစလးမာပ ျဖစျဖစ ထားလ႔ ရပါတယ။ အခကြၽနေတာေျပာမယ example ေလးမာေတာ publisher ေရာ၊ subscriber ေရာ၊ distributor ေရာ က ကြနပတာ တစလးထမာ ထားမာပါ(ဒတစလးပရတာေလ)

က အရငဆး Replication လပမယ database ၂ ခက အရငေဆာကလကပါ။ publisher လပမယစကမာ db_A န႔ subscriber စကမာ db_B ကေဆာကလကပါ။ ျပးရင အဒ database ေတြထမာ table လညးေဆာကရဥးမယေနာ။ table ေဆာကတ႔ေနရာမာ database 2 ခလးမာ table အေရအတြက အတအက တစရာမလပါဘး။ ဒါေပမယ replicate လပမယ table ေတာ တရမယ။ အခ sample အေနန႔ ဒလေလး ေဆာကေပးလကပါ။

Page 120: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 116

Written By SevenLamp

Column Name Data Type Allow Nulls ID int Unchecked Name varchar(50) Checked Remark varchar(250) Checked

ဒေနရာမာ မတထားဖ ႔ လတာက replicate လပမယ table မာ primary key ပါကပါရရမယ။ ဒါေၾကာင ID column က primary key အျဖစသကမတေပးလကပါ။ database ေဆာက table ေတြ create လပျပးရငေတာ replication လပမယ အပငးေရာကျပ။ replication လပဖ႔အတြက publisher computer ထမာ Distributor configuration အရင လပေပးရပါမယ။

ပ(၂) မာ ျပထားတ႔အတငး SQL Server Management Studio ထက replication folder က right click လပျပး Configure Distribution ကေရြးပါ။

pic_2

ဒါဆရင ပ(၃)မာ ျပထားတ႔အတငး Configure Distribution Wizard ေလး ေပၚလာပါလမမယ။ Next က ဆကႏပလကပါ။

Page 121: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 117

Written By SevenLamp

Pic_3

Page 122: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 118

Written By SevenLamp

Pic_4

ပ(၄) ကေတာ distributor database location ေရြးခငးတာပါ။ distributor က publisher စကမာ ထားမာလား။ ဒါမမဟတ တျခားစကတစလးလးမာ ထားမာလားဆတာက ဒအဆငမာ ေရြးနငပါတယ။ အခကြၽနေတာကေတာ publisher စကမာပ distributor ကထားမာ ျဖစတ႔အတြကေၾကာင default အတငးပ ထားျပး Next ဆကႏပပါမယ။ replication လပဖ႔အတြက ကြၽနေတာတ႔ computer မာ SQL Server Agent Run ေနဖ႔လတယဗ။ အဒ agent မrun ရေသးဘးဆရင ပ(၅) မာျပထားတ႔အတငး ေပၚလာလမမယ။ run ထားျပးသာဆရငေတ ေပၚမာ မဟတပါဘး။

Page 123: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 119

Written By SevenLamp

Pic_5

Page 124: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 120

Written By SevenLamp

Pic_6

ပ(၆)-ဒအဆငမာေတာ snapshot folder location ေရြးခငးပါတယ။ snapshot folder ဆတာက publisher database မာ changes လပသမက သမးထားေပးတ႔ transaction log folder လ႔ ေျပာလ႔ရမယထငတယ။ ဒ folder က subscriber computer ကေန လမးျပး ဖတမာ ျဖစလ႔ subscriber computer ကေန access လပလ႔ရတ႔ location မာ ျဖစရပါမယ။ ကြၽနေတာအခလပသလမး publisher န႔ subscriber က same computer ဆရငေတာ ဒအတငးထားလကလညး ရပါတယ။ same computer မဟတဘးဆရငေတာ ဒေနရာမာ netword share folder location ကထညေပးရပါမယ။ ဒလမးေပါ \\pub_computer\ReplData.

Page 125: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 121

Written By SevenLamp

Pic_7

ပ(၇)-ဒအဆငမာ ကြၽနေတာတ႔ distribution database ရ႕ name န႔ location က ရကေပးရမာပါ။ default ဒအတငးေလးပ ထားလကျပး Next ပါမယ။ ပ(ဂ)- ပ(၉)- ပ(၁၀)-မာ Next ေတြနပျပး Finished လကပါ။

Page 126: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 122

Written By SevenLamp

Pic_8

Page 127: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 123

Written By SevenLamp

Pic_9

Page 128: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 124

Written By SevenLamp

Pic_10

Page 129: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 125

Written By SevenLamp

Pic_11

ဒါဆ ကြၽနေတာတ႔ ပ(၁၁) မာ ျပထားတ႔အတငး Distributor က configure လပတာ ေအာငျမငစြာ ျပးဆးသြားပါျပ။

အခကြၽနေတာ Publisher စေဆာကပါမယ။ ပ(၁၂) မာ ျပထားတ႔အတငး Publications Folder က right click လပျပး New Publication ကေရြးပါ။ ဒါဆ ပ(၁၃) မာ ျပထားသလ ေပၚလာပါလမမယ။ Next ကႏပပါ။

Page 130: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 126

Written By SevenLamp

Pic_12

Pic_13

Page 131: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 127

Written By SevenLamp

Pic_14

ပ(၁၄)-အဆငမာေတာ ကြၽနေတာတ႔ publication လပခငတ႔ database ကေရြးေပးရမာပါ။ အခကြၽနေတာတ႔ db_A ကေရြးလကပါတယ။ ပ(၁၅)-အဆငမာေတာ ကြၽနေတာတ႔ publication type ကေရြးေပးရမာပါ။ publication type အဓက ၃ မးရပါတယ။

- Snapshot publication

- Transactional publication

- Merge publication

ကြၽနေတာအခ Transactional publication ကေရြးျပး Next ပါမယ။

Page 132: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 128

Written By SevenLamp

Pic_15

Page 133: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 129

Written By SevenLamp

Pic_16

ပ(၁၆)-အဆငမာ ကြၽနေတာတ႔ publish လပခငတ႔ Articles(table) ေတြကေရြးရပါတယ။ ျပးရင Article Properties ထက ၀ငျပး၊ ပ(၁၇) မာ ျပထားတ႔အတငး “Keep existing object unchanged” ကေရြးေပးလကပါမယ။ ဆလတာကေတာ အကယလ႔ subscriber table ထမာ data ေတြ ရေနရင ဒအတငးပ ထားမယလ႔ ေျပာတာပါ။

Page 134: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 130

Written By SevenLamp

Pic_17

Page 135: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 131

Written By SevenLamp

Pic_18

ပ(၁၈)-အဆငမာ ကြၽနေတာတ႔ article ေတြအတြက row filter ေပးလ႔ရပါတယ။ table ထမာ ရသမ row ေတြအားလးက publish မလပပ condition စစျပးမ လပခငရင ဒေနရာမာ Add button ႏပျပး filter ထညလ႔ ရပါတယ။ အခကြၽနေတာကေတာ မထညေတာပါဘး။

Page 136: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 132

Written By SevenLamp

Pic_19

ပ(၁၉)-ဒအဆငမာေတာ အေပၚcheckbox ေလးက check လပျပး Next ဆကႏပပါ။ ဒါဆ ေနာကအဆငမာ ပ(၂၀)- မာ ျပထားတ႔အတငး Agent Security setting လပေပးရပါမယ။

Page 137: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 133

Written By SevenLamp

Pic_20

Page 138: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 134

Written By SevenLamp

Pic_21

ပ(၂၁)-မာ ျပထားတ႔အတငး SQL Server Agent service account န႔ run မယလ႔ ေျပာလကပါတယ။ ေနာကျပး Publisher database က ၀ငဖ႔အတြက SQL Server login account ထညေပးရပါတယ။ ကြၽနေတာတ႔ SQL Server install လပတနးက password မေပးခ႔ဘးဆရငေတာ၊ By impersonation the process account ဆတာက ေရြးလကပါ။

Page 139: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 135

Written By SevenLamp

Pic_22

Page 140: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 136

Written By SevenLamp

Pic_23

Page 141: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 137

Written By SevenLamp

Pic_24

ပ(၂၂)- မာ Next ႏပ၊ ပ(၂၃)- မာ နမညေပးျပး Finished လကပါ။ ဒါဆ ပ(၂၄)-မာ ျပထားသလမး publisher ေဆာကတ႔ ကစၥ အဆငေျပသြားပါျပ။

အခ ေနာကဆး ကြၽနေတာတ႔ Subscriber ေဆာကဖ႔ပ ကနပါေတာတယ။ ပ(၂၅) မာ ျပထားတ႔အတငး ခနကြၽနေတာတ႔ ေဆာကလကတ႔ publisher က right click ႏပျပး New Subscription ကေရြးလကပါ။

Page 142: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 138

Written By SevenLamp

Pic_25

Page 143: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 139

Written By SevenLamp

Pic_26

ပ(၂၆) က Next လကရင ပ(၂၇) မာ ျပထားတ႔အတငး ကြၽနေတာတ႔ အခေရြးလကတ႔ publisher ေလးက ေတြ႔ရပါမယ၊ Next ထပႏပပါ။ ဒါဆ ေနာကတဆင(ပ-၂၈)မာ Distribution Agent location ေရြးရပါတယ။ Distribution Agent ဆတာက Transactional Replication မာ publisher ထက data ေတြ ဆြေပးတ႔ process က ေျပာတာပါ။ Transaction Replication မာ PUSH န႔ PULL ဆျပး type ၂ မ းရပါတယ။ PUSH ကသးရင distribution agent က publisher computer ေပၚမာေနျပး subscriber က replicate data ေတြ တြနးပ႔ေပးပါတယ။ PULL ကေရြးလကရငေတာ distribution agent က subscriber computer ေပၚမာေနျပး publisher ဆကေန replication data ေတြက ဆြခေပးပါတယ။ အခကြၽနေတာကေတာ PUSH ကပေရြးလကပါတယ။

Pic_27

Page 144: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 140

Written By SevenLamp

Pic_28

ပ(၂၉)-အဆငမာေတာ ကြၽနေတာတ႔ subscriber database ကေရြးေပးရပါတယ။ အကယ၍ subscriber က တျခားစကမာဆရင “Add Subscriber” button ေလးကႏပျပး ေရြးေပးရပါမယ။ အခကြၽနေတာက db_B database ကေရြးျပး Next လကပါမယ။

ပ(၃၀)-အဆငမာေတာ Subscriber အတြက Distribution Agent Security Setting လပေပးရပါတယ။ ပ(၃၁) မာ ျပထားတ႔အတငး ေရြးျပး Next လကပါဥး။

Page 145: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 141

Written By SevenLamp

Pic_29

Page 146: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 142

Written By SevenLamp

Pic_30

ပ(၃၃)၊ ပ(၃၄)၊ ပ(၃၅) အဆငဆင Next ေတြ ႏပသြားလကရင ေနာကဆး ကြၽနေတာတ႔ Subscription process အဆငေျပေျပန႔ ျပးဆးသြားမာပါ။

Page 147: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 143

Written By SevenLamp

Pic_31

Page 148: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 144

Written By SevenLamp

Pic_32

Page 149: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 145

Written By SevenLamp

Pic_33

Page 150: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 146

Written By SevenLamp

Pic_34

Page 151: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 147

Written By SevenLamp

Pic_35

အခကြၽနေတာတ႔ database ၂ ခ(db_A and db_B)က replication လပလ႔ ျပးသြားပါျပ။ ဒ replication တကယေရာ အလပလပျပလား စမးၾကညရေအာင။ Databases folder ေအာကက db_A database က right click လပျပး new query ေခၚလကပါ။ ျပး ပ(၃၆)မာ ျပထားတ႔အတငး အဒ query ထမာ INSERT STATEMENT တစေၾကာငးေရးျပး Run လကပါမယ။

Pic_36

Page 152: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 148

Written By SevenLamp

ျပးရင db_B ထမာ ၀ငမ၀ငသြားစစဖ႔အတြက db_B database အတြကလညး ေနာကထပ query ထပယပါမယ။ ျပး SELECT STATEMENT ေလး ေရးလကျပး run လကပါ။ က.. db_A ထက ကြၽနေတာထညလကတ႔ record က db_B ထမာပါ ေတြ႔ေနရပါျပ။

Pic_37

အခကြၽနေတာ ေျပာသြားတာက database replication မာ အရးရငးဆး၊ အလြယဆး အပငးေလးပါ။ အားလး နားလညၾကမယလ႔လညး ေမာလငပါတယ။ ေနာကမာ ပျပး ရႈပေထြးတ႔ replication ေတြ အေၾကာငး ဆကေရးပါဥးမယ။

Chapter 12

basic of SQL Statement (part 1)

SQL Statement ေလးေတြန႔ ပတသကျပး ကြၽနေတာသသေလာက basic knowledge ေလးေတြက ျပနျပး မေ၀ေပးခငလ႔ပါ။ ညေလး ညမေလးေတြ အတြကပေပါ။ ကြၽနေတာတ႔ programming လပတ႔ သေတြအားလး တခနမဟတတခနေတာ SQL Statement ေတြန႔ ပတသကရမာ မလြပါဘး။ C# န႔ပေရးေရး VB န႔ပေရးေရး PHP န႔ပေရးေရး java ပျဖစျဖစေပါ ဘယ language ကပ သးသညျဖစေစ data ေတြက database တစခခမာ သမးေတာမယ၊ ျပနထတျပေတာမယဆတာန႔ ကြၽနေတာတ႔ SQL Statement ေတြက သးရေတာမာပါ။ ဒေနရာမာ Database လ႔ ေျပာလကေတာ Microsoft platform က သေတြက MS SQL Server က ေျပးျမငၾကမာပါ။ ဟတပါတယ ကြၽနေတာလညး MS SQL Server 2005 က သးေနတာပါပ။ ဒါေပမယ ဘယလ DBMS ကပ

Page 153: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 149

Written By SevenLamp

သးသညျဖစေစ Basic SQL Statement ေတြကေတာ အတတပါပ။ ဒါေၾကာင ကြၽနေတာတ႔ အဒ basic SQL Statement ေလးေတြအေၾကာငး ေလလာၾကညရေအာငဗာ။

ဟးအရင Turbo C သးျပး program ေတြ ေရးၾကတ႔ ေခတတနးကေတာ ကြၽနေတာတ႔ေတြ data ေတြသမးဖ႔အတြက harddisk ထမာ file ေတြကယတင ေဆာကျပး ကယတငပ အသြငးအထတလပခ႔ၾကတယ။ ေနာကပငးမာ DBMS(Database Management Software) ေတြ ေပၚလာေတာ ကြၽနေတာတ႔ကယတင မလပေတာပ အဒ DBMS ေတြကပ ခငးစားလာခ႔ၾကတယ။ အဒလ ခငးဖ႔အတြက ကြၽနေတာတ႔က SQL လ႔ေခၚတ႔ Structured Query Language က သးၾကရပါတယ။ အဒ SQL မာ အဓက အပငး ၄ ပငးပါပါတယ။

INSERT ( database ထက data အသစေတြထညဖ႔ )

UPDATE ( database ထက data ေတြက ျပငဖ႔ )

DELETE ( database ထက data ေတြက ဖကဖ႔ )

SELECT ( database ထက data ေတြက user က ျပနထတျပဖ႔ )

ဒ command ေတြ စမးၾကညရေအာငအတြက ကြၽနေတာ database ထမာ table ၂ ခေဆာကလကမယ။ ကြၽနေတာလကရသးေနတာက SQL Server 2005 ဆေတာ အဒါန႔ပ ေျပာမယေနာ။ ညတ႔က တျခား DBMS ေတြ သးရငလညး အရမးေတာ ကြာမယမထငပါဘး။

Category Table Design

CategoryID int Primary key CategoryName varchar(50) Status varchar(50)

Item Table Design

ItemID int Primary key ItemName varchar(50) CategoryID int Price int Balance int Description varchar(250)

Insert Statement

Page 154: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 150

Written By SevenLamp

insert into tablename (column1name,column2name...columnxname) values (value1,value2...valuex);

Database ထက data record အသစတခထညေတာမယဆရင ကြၽနေတာတ႔ Insert Command ကသးရပါမယ။ အခ အရငဆး Category Table ထက record တစခ ထညၾကညရေအာင။ Insert Command ရ႕ အေနာကမာ into ဆတ႔ keyword ေလးထညေရးရတယ။ ျပးရင ကယ data ထညခငတ႔ table name ေပးရတယ။ ျပးေတာမ ကယထညမယ data ေတြက values ဆတ႔ keyword ရ ေနာကမာ ထညေရးေပးရမယ။ ဥပမာ… *** SQL SERVER 2005 တြင character ႏင datetime မားက single code ( ‘ ) ထညေပးရပါသည။ ***

INSERT INTO Category VALUES (1, ‘Computer’, ‘Active’)

အေပၚက example query ေလးအတငး ေရးမယဆရင category table ထမာ ရတ႔ field ေတြအားလးအတြက data ထညကထညေပးရမယ။ အစဥလကလညး ျဖစရပါမယ။ တခါတေလမာ ကြၽနေတာတ႔က column ေတြအားလးက data ထညမေပးခငတာတ႔၊ အစဥလကမျဖစတာတ႔ဆရင query ေရးတ႔အခါ table name ရ ေနာကမာ ကယထညခငတ႔ column name ကပါထညေရးေပးရမာပါ။ ဥပမာ…

INSERT INTO Category (CategoryID, CategoryName) VALUES (2, ‘Stationary’)

တခါတေလမာ ကြၽနေတာတ႔ table တစခထက data ေတြက တျခား table တစခထက copy ကးထညခငတ႔ အခါမးမာ Insert command က Select command န႔လညး တြသးနငပါေသးတယ။ ဒလမးပါ…

INSERT INTO Temp_Category SELECT * FROM Category

*** ဒ query run ဖ႔အတြက Temp_Category table ေလးကအရင ေဆာကေပး ရမယေနာ။ Category table ရ structure အတငးေဆာကလကေပါ ***

basic of SQL Statement (part 2)

Page 155: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 151

Written By SevenLamp

Update Statement

update tablename set columnname = newvalue [,columnxname = newvaluex...] where columnname OPERATOR value [and|or columnnamex OPERATOR valuex];

ကြၽနေတာတ႔ရ table ထက data ေတြက ျပနျပး ျပငခငတယဆရငေတာ SQL Update Command ကသးပါတယ။ Update Command က Set keyword န႔ တြျပး သးပါတယ။ ဥပမာအေနန႔ ခနတနးက insert quary 2 မာ ကြၽနေတာက categoryid န႔ categoryname ၂ ခပထညလကတယ၊ status ကမထညေပးလကဘး။ ဒါဆရင status က NULL value အေနန႔ ရေနမာပါ။ ဒါက အခ ကြၽနေတာက Active လ႔ထညေပးခငတယဆပါေတာ… ဒါဆရင ဒလေရးရပါမယ။

UPDATE Category SET Status = ‘Active’ WHERE CategoryID = 2

ဒ update quary ေလးမာ ေရးလကတာေတြကေတာ UPDATE command ရ႕ အေနာကမာ ကယျပငခငတ႔ tablename ထညေပးရမယ။ ျပးရင SET keyword ရ႕ ေနာကမာ ကယျပငခငတ႔ column name = value က comer(,) ေလးချပး ၾကကသေလာကထညေပးလ႔ရပါတယ။ အခ example မာေတာ ကြၽနေတာက Status column တစခထျပငခငတာမ႔တခထေပးတာပါ။ ျပးေနာကမာမ WHERE keyword ကသးျပး ကြၽနေတာျပငခငတ႔ report ကေရြးထတပါတယ။ CategoryID 2 န႔ ညတ႔ record ကပျပငမယဆတ႔ သေဘာပါ။ WHERE မပါပလညး ေရးလ႔ရပါတယ။ အလေရးလကမယဆရငေတာ Category table ထက record ေတြအားလးက ျပငသြားမာျဖစပါတယ။ ဒါေၾကာင update statement ေရးရင WHERE ထညေရးဖ႔ လေလ႔ရပါတယ။

Delete Statement

delete from "tablename" where columnname OPERATOR value [and|or columnnamex OPERATOR valuex];

Delete statement ကေတာ ကြၽနေတာတ႔ table ထက record ေတြကျပနဖကခငရင သးရမာပါ။ တခသထားဖ႔လတာက delete command ကသးရင record (row) တခလးဖကမာ ျဖစပါတယ။ column value တစခထက ဖကခငတယဆရငေတာ delete command မသးရပါဘး။ update

Page 156: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 152

Written By SevenLamp

command ကပသးရပါမယ။ က ကြၽနေတာက category table ထက record ေတြအားလးက မသးခငေတာဘး ဆပါေတာ…

DELETE FROM Category

Delete command က From န႔ တြသးပါတယ၊ ေနာကမာေတာ ဖကမယ table name ထညေပးရမာပါ။ record အားလးဖကခငတာမဟတဘးဆရငေတာ update command တနးကလမး Where statement ကသးျပး ကယဖကခငတ႔ record ရေအာငျပနစစထတရပါမယ။ Insert, Update န႔ Delete Statement ေတြဟာ ေရးရတာရငးလငးလြယကပါတယ။ တကယရႈပတာကေတာ Select Statement ပါ။ အခကြၽနေတာတ႔ select statement ကမသြားခင ကြၽနေတာတ႔ေဆာကထားတ႔ category န႔ item table ေတြထက data ေလးေတြထညေပးပါဥး။ ဒါမ select ျပနလပလ႔ရမာပါ။ insert command ကသးေနာ။

Category Table

CategoryID CategoryName Status

1 Computer Active

2 Stationary Active

3 Electronic Active

4 Clothes Inactive

5 Kitchen wares Inactive

Item Table

ItemID ItemName CategoryID Price Balance Description

1 Sony Optical Mouse 1 2500 10 -

2 A4 Tech Keyboard 1 5000 1 -

3 ViewSonic 17” Flat CRT 1 150000 5 -

4 First Eleven Book 2 500 15 -

Page 157: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 153

Written By SevenLamp

5 SONY 32” TV 3 900000 1 -

6 Moon 16” Stand Fan 3 20000 3 -

basic of SQL Statement (part 3)

Select Statement

SELECT [ALL | DISTINCT] columnname1 [,columnname2] FROM tablename1 [,tablename2] [WHERE condition] [ and|or condition...] [GROUP BY column-list] [HAVING "conditions] [ORDER BY "column-list" [ASC | DESC] ]

SQL Statement ၄ မ းမာျဖင ဒ select က အရပဆးပါပဗာ။ user ၾကညခငတ႔ result ရဖ႔အတြက ကြၽနေတာတ႔ select command က နညးလမးမးစန႔ သးရမာပါ။ အရႈပဆးဆလ႔လညး လန႔မသြားန႔ဥးေနာ၊ ဘယအရာမဆ မသရငခကျပး သသြားရငေတာ လြယပါတယ။ က.. အလြယဆးကေန စလကရေအာင။ ပထမဆး ကြၽနေတာက Category Table ထက record ေတြအားလးက user က ထတျပခငတယ ဆပါေတာ။ ဒါဆရင ဒလေရးရမာပါ။

SELECT * FROM Category

Result :

CategoryID CategoryName Status

1 Computer Active

2 Stationary Active

3 Electronic Active

4 Clothes Inactive

5 Kitchen wares Inactive

Page 158: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 154

Written By SevenLamp

Select command ရ႕ ေနာကမာ ကယထညၾကညခငတ႔ column name ေတြေပးရမာပါ။ ရသမ ေကာလအားလးက ထတျပမယဆရင ကြၽနေတာအခေရးလကသလ (*) က သးလ႔လညး ရပါတယ။ ဒါဆ အခကြၽနေတာက CategoryID န႔ CategoryName ၂ ခပ ၾကညခငတယဆရင ဒလျဖစသြားမယ။

SELECT CategoryID,CategoryName FROM Category

Result :

CategoryID CategoryName

1 Computer

2 Stationary

3 Electronic

4 Clothes

5 Kitchen wares

ဘယလလ လြယပါတယေနာ။ လြယမာေပါ ဒါက အရးရငးဆး select ပစက။ က အခကြၽနေတာက category table ထက record အားလးမၾကညခငဘး Status က Active ျဖစတ႔ Category ေတြပ ၾကညခငတယ ဆရင Condition ျပနစစဖ႔လလာပါျပ။ select command မာ condition စစဖ႔အတြက where ရယ၊ having ရယ ၂ ခ ၾကကတာသးခြငရပါတယ။ ဒ ၂ ခဘာကြာလဆတာ ေနာကမေျပာျပပါမယ။ ေလာေလာဆယေတာ ကြၽနေတာက where ကပ သးျပး စစလကပါမယ။

SELECT * FROM Category WHERE Status = ‘Active’

Result :

CategoryID CategoryName Status

1 Computer Active

2 Stationary Active

3 Electronic Active

ဒါဆရငေတာ record ၃ ေၾကာငးပ ျပပါေတာမယ။

Page 159: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 155

Written By SevenLamp

basic of SQL Statement (part 4)

ဒေန႔ Select Statement အေၾကာငးပ ဆကရေအာငဗာ။ WHERE အေၾကာငးပ ဆကေျပာပါမယ။ အခကြၽနေတာက ကနလကကန ၁၀ ခထကနညးျပး ေစးႏႈနးကလညး ၁၀၀၀၀ အထကရတ႔ item ေတြရ list ကၾကညခငတယ။ ဒါဆရင ဒလေရးရမာေပါ…

SELECT * FROM item WHERE balance < 10 AND price > 10000

Result :

ItemID ItemName CategoryID Price Balance Description

3 ViewSonic 17” Flat CRT

11 15000 5 -

5 SONY 32” TV 3 900000 1 -

6 Moon 16” Stand Fan 3 20000 3 -

ဒ query ေလးမာ ကြၽနေတာစစခငတ႔ condition က ၂ ခရေနတယ။ balance ၁၀ ခထကနညးရမာရယ၊ price ၁၀၀၀၀ ထကမားရမာရယ။ အဒ condition ၂ ခလးမနတာကပ လခငတာ ျဖစေတာ Where ေနာကမာ condition ၂ ခက AND န႔ဆကျပးေရးရပါတယ။ ကြၽနေတာတ႔ စစခငတ႔ condition ေတြ ၁ခထကပမားလာျပဆရင အဒ condition ေတြၾကားမာ AND ဒါမမဟတ OR ဆတ႔ keyword ေလးေတြထညေရးေပးရမယ။ အေပၚက query လမး condition ၂ ခလးမနမ result ထြကခငတယဆရင AND ကသးရျပး။ condition တစခမဟတ တစခမနရန႔ result ထြကခငတယဆရငေတာ OR ကသးရမာပါ။ ဥပမာ အေနန႔ ကြၽနေတာက electronic ပစၥညးေတြန႔ computer ပစၥညးေတြကပ ၾကညခငတယ ဆပါစ။ ဒါဆ ဒလေရးရမာပါ…

SELECT * FROM item WHERE CategoryID = 1 OR CategoryID = 3

Result :

Page 160: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 156

Written By SevenLamp

ItemID ItemName CategoryID Price Balance Description

1 Sony Optical Mouse 1 2500 10 -

2 A4 Tech Keyboard 1 5000 1 -

5 SONY 32” TV 3 900000 1 -

6 Moon 16” Stand Fan 3 20000 3 -

တခါတေလမာ ကြၽနေတာတ႔စစခငတ႔ condition က value ၂ ခၾကားျဖစခ႔ရင BETWEEN ကလညး သးလ႔ရပါတယ။ ဥပမာ balance ၂ ခကေန ၁၀ ခ ၾကားထက record ေတြ လခငတယဆရင…

SELECT * FROM item WHERE balance BETWEEN 2 AND 10

Result :

ItemID ItemName CategoryID Price Balance Description

1 Sony Optical Mouse 1 2500 10 -

3 ViewSonic 17” Flat CRT

11 15000 5 -

6 Moon 16” Stand Fan 3 20000 3 -

ထြကလာတ႔ result ရ ဆနကငဘက ေျပာငးျပနက လခငတယ ဆရငေတာ NOT က တြသးလ႔ ရပါတယ။

SELECT * FROM item WHERE balance NOT BETWEEN 2 AND 10

Result:

ItemID ItemName CategoryID Price Balance Description

2 A4 Tech Keyboard 1 5000 1 -

Page 161: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 157

Written By SevenLamp

4 First Eleven Book 2 500 15 -

5 SONY 32” TV 3 900000 1 -

တစခါတစေလ ကြၽနေတာတ႔ လခငတ႔ record ေတြက အစအစဥလကမဟတဘး ဆရငေတာ condition စစတ႔အခါ OR ေတြအမားၾကးသးရမယ အေနအထားေတြ ရလာနငပါတယ။ ဥပမာ ကြၽနေတာက ItemID 1,3,5 ကထတၾကညမယဆရင OR သးျပးစစရင ဒလမးျဖစပါမယ။

SELECT * FROM item WHERE ItemID = 1 OR ItemID = 3 OR ItemID = 5

ဒလ အေျခအေနမးမာ ကြၽနေတာတ႔ IN ကသးျပးေရးရင ပလြယမာပါ။

SELECT * FROM item WHERE ItemID IN ( 1,3,5 )

Result:

ItemID ItemName CategoryID Price Balance Description

1 Sony Optical Mouse 1 2500 10 -

3 ViewSonic 17” Flat CRT

11 15000 5 -

5 SONY 32” TV 3 900000 1 -

ItemID 1,3,5 ကလြျပး ကနတာေတြ ျပမယဆရငေတာ

SELECT * FROM item WHERE ItemID NOT IN ( 1,3,5 )

Result:

ItemID ItemName CategoryID Price Balance Description

2 A4 Tech Keyboard 1 5000 1 -

Page 162: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 158

Written By SevenLamp

4 First Eleven Book 2 500 15 -

6 Moon 16” Stand Fan 3 20000 3 -

ဒေလာကဆရငေတာ ကြၽနေတာတ႔ WHERE Condition ေတာေတာေလးစစတကျပလ႔ ေျပာလ႔ရပါျပ။ အခေနာကထပ ORDER BY အေၾကာငး ဆကေျပာပါမယ။ Select Query ကေနထြကလာတ႔ result record ေတြက sorting လပခငရင Order By keyword ကသးရမာပါ။ အေက အခကြၽနေတာ Item table ထက record ေတြအားလးၾကညခငတယ။ ကနလကကနအနညးဆးက အေပၚဆးမာျပခငတယဆရင….

SELECT * FROM item ORDER BY balance

Result:

ItemID ItemName CategoryID Price Balance Description

2 A4 Tech Keyboard 1 5000> 1 -

5 SONY 32” TV 3 900000 1 -

6 Moon 16” Stand Fan 3 20000 3 -

3 ViewSonic 17” Flat CRT

11 15000 5 -

1 Sony Optical Mouse 1 2500 10 -

4 First Eleven Book 2 500 15 -

Order by keyword က default အားျဖင ငယစဥၾကးလက(Ascending) စေပးပါတယ။ ၾကးစဥငယလက(Descending) စခငတယဆရငေတာ ကယစခငတ႔ column name ေနာကမာ DESC ဆျပးထညေပးရပါမယ။ ဥပမာ ကနလကကနအမားဆးက အေပၚဆးကေန ျပခငရင…

SELECT * FROM item ORDER BY balance DESC

Result:

Page 163: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 159

Written By SevenLamp

ItemID ItemName CategoryID Price Balance Description

4 First Eleven Book 2 500 15 -

1 Sony Optical Mouse 1 2500 10 -

3 ViewSonic 17” Flat CRT

11 15000 5 -

6 Moon 16” Stand Fan 3 20000 3 -

2 A4 Tech Keyboard 1 5000 1 -

5 SONY 32” TV 3 900000 1 -

အခလ sorting စတ႔ေနရာမာ Column တစခထကပျပး စခငရင comer(,) ေလးေတြ ျခားသြားရပါပ။ ကနလကကန အနညးဆးက အရငစမယ၊ ကနလကကန အေရအတြကခငး တရင ေစးႏႈနးအမားဆးက အေပၚကထားခငတယဆရင….

SELECT * FROM item ORDER BY Balance ASC, Price DESC

(*** ASC က ထညေရးေရး၊ မေရးေရး ရပါ၏ ***)

Result:

ItemID ItemName CategoryID Price Balance Description

5 SONY 32” TV 3 900000 1 -

2 A4 Tech Keyboard 1 5000 1 -

6 Moon 16” Stand Fan 3 20000 3 -

3 ViewSonic 17” Flat CRT

11 15000 5 -

1 Sony Optical Mouse 1 2500 10 -

4 First Eleven Book 2 500 15 -

Page 164: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 160

Written By SevenLamp

ဒေလာကဆရငေတာ ကြၽနေတာတ႔ Simple Select Query ေတြ ေရးတကပါျပ။

Chapter 13

basic of SQL Statement (part 5)

အခ ကြၽနေတာတ႔ Select quary ေတြမာ count တ႔ sum တ႔ စသညျဖင function ေတြထညသးၾကညရေအာင။ အဒ function ေတြက aggregate function ေတြလ႔ ေခၚတယ။ ဒလ aggregate function ေတြပါတ႔ query ေတြကလညး aggregate query လ႔ေခၚပါတယ။

Aggregate Functions List

AVG MIN

CHECKSUM SUM

CHECKSUM_AGG STDEV

COUNT STDEVP

COUNT_BIG VAR

GROUPING VARP

MAX

ဒ function ေတြက ကြၽနေတာတ႔ Select ရ ေနာကမာ ျဖစေစ၊ Having ရေနာကမာ ျဖစေစ၊ သးနငပါတယ။ ဥပမာ အခကြၽနေတာက ItemTable ထမာ ရတ႔ record အေရအတြကက သခငတယဆပါစ႔။ ဒါဆရင Count ဆတ႔ aggregate function ကသးျပး ခလေရးရမာပါ။

SELECT count(*) AS ItemCount FROM item

Result:

Page 165: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 161

Written By SevenLamp

ItemCount

6

Count ဆတ႔ function က ကြၽနေတာတ႔ Table ထမာ ရတ႔ record အေရအတြကကစစေပးပါတယ။ အဒ function ထမာ * ဒါမမဟတ ၾကကရာ column name ထညေပးရပါမယ။ ဒ function ေတြကသးရင ထြကလာတ႔ result မာ column name မရပါဘး။ ဒါေၾကာင ကြၽနေတာက column name ထညေပးဖ႔အတြက AS keyword ကသးပါတယ၊ AS ေနာကမာ ကြၽနေတာေပးခငတ႔ ItemCount ဆတ႔ နမညေလးထညေပးလကပါတယ။ တျခား Function ေတြကလညး စမးၾကညရေအာင။ ကြၽနေတာအခ စစေပါငးကနလကကနက သခငတယဆရင။

SELECT sum(balance) AS TotalBalance FROM item

Result:

TotalBalance

35

အခကြၽနေတာတ႔ aggregate function ေတြကသးတ႔အခါမာ table ထက record အားလးအတြက result တစခထထြကတာက ေတြ႔ရလမမယ။ ဟတျပ ဒါဆရင အခကြၽနေတာက Category တစခစအတြက ကနလကကနက ၾကညခငတယဆရငေရာ။ ဒလလပဖ႔ဆရငေတာ ကြၽနေတာတ႔ Group By keyword န႔ တြသးေပးဖ႔လလာပါျပ။

SELECT categoryid,sum(balance) AS TotalBalance FROM item GROUP BY categoryid

Result:

categoryID TotalBalance

1 16

2 15

3 4

Page 166: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 162

Written By SevenLamp

*** မတထားစရာ အခကတစခကရေသးတယဗ။ select ထမာ aggregate function ေတြ ပါျပဆရင၊ Group By လပထားတ႔ column ေတြကလြျပး တျခား column ေတြက ထညေရးခြင မရပါဘး*** အခ Having keyword အေၾကာငးဆကေျပာရေအာင။ ကြၽနေတာတ႔ေရးတ႔ query မာ condition စစစရာေတြ ရရင where ကသးရတယဆတာ သျပးၾကျပေနာ။ ဟတျပ အဒ where keyword က database ထမာ ရတ႔ column name ေတြကပ စစလ႔ရပါတယ။ တခါတေလကြၽနေတာတ႔က aggregate function ကထြကလာတ႔ result ေတြက စစဖ႔လလာျပဆရငေတာ Having ကသးရေတာမာပါပ။ ဥပမာ ကနလကကန စစေပါငး ၁၀ ခထကနညးန႔ category ကၾကညခငတယဆရင။

SELECT categoryid,sum(balance) AS TotalBalance FROM item GROUP BY categoryid HAVING sum(balance) < 10

Result:

categoryID TotalBalance

3 4

Having က where လမးလ column ေတြစစဖ႔အတြက သးလ႔လညး ရပါတယ။ category id 1 ရ႕ totalbalance ကျပဖ႔အတြက

SELECT categoryid,sum(balance) AS TotalBalance FROM item GROUP BY categoryid HAVING categoryid = 1

Result:

categoryID TotalBalance

1 16

Page 167: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 163

Written By SevenLamp

basic of SQL Statement (part 6)

Sql statement ေတြဘကကေတာ မလညျဖစတာ ေတာေတာၾကာသြားျပ။ ကြၽနေတာလညး ေရးခငတာေတြကေတာ အမားၾကး အခနကမရဘးျဖစေနတာန႔ ေရ႕မဆကနငဘးျဖစေနတာ။ ဘာဘျဖစျဖစ ရတ႔အခနေလးလျပး ကြၽနေတာသသေလာကေတာ ထပေရးေနဥးမာမ႔ အားေပးၾကပါဥးဗာ။ က… ကြၽနေတာတ႔ select statement က ေျပာလကစ ဆကပါဥးမယ။ table တစခထက data က ထတၾကညတာကေတာ နားလညေလာကျပထငပါတယ။ အခ ကြၽနေတာတ႔ တစခထကပတ႔ table ေတြထက data ေတြက ထတၾကညရေအာင။ ဥပမာဗာ… item table ထက record အားလးျပမယဆပါေတာ။ ဒါေပမယ categoryid အစား categoryname ကျပခငတယဆရင၊ item table န႔ category table ၂ ခက ခတရေတာမာပါ။ ဟတျပ… ဒါဆရင table ေတြ ခတဖ႔အတြက ဘာေတြလလ… ?

ဟတက႔ table တစခန႔ တစခခတဆကတာက join လပတယလ႔ ေခၚပါတယ။ join နညး ၃ မးရပါတယ။

၁) cross join

Cross join ကေတာ table ၂ ခက comer(,) ချပး join တာပါ။ ဒလမးပါ

select item.*, category.categoryName from item, category

result

ItemID ItemName CategoryID Price Balance Remark CategoryName 1 Sony Optical Mouse 1 2500 10 - Computer 2 A4 Tech Keyboard 1 5000 1 - Computer 3 ViewSonic 17” Flat CRT 1 15000 5 - Computer 4 First Eleven Book 2 500 15 - Computer 5 SONY 32” TV 3 900000 1 - Computer 6 Moon 16” Stand Fan 3 20000 3 - Computer 1 Sony Optical Mouse 1 2500 10 - Stationary 2 A4 Tech Keyboard 1 5000 1 - Stationary

Page 168: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 164

Written By SevenLamp

3 ViewSonic 17” Flat CRT 1 15000 5 - Stationary 4 First Eleven Book 2 500 15 - Stationary 5 SONY 32” TV 3 900000 1 - Stationary 6 Moon 16” Stand Fan 3 20000 3 - Stationary 1 Sony Optical Mouse 1 2500 10 - Electronic 2 A4 Tech Keyboard 1 5000 1 - Electronic 3 ViewSonic 17” Flat CRT 1 15000 5 - Electronic 4 First Eleven Book 2 500 15 - Electronic 5 SONY 32” TV 3 900000 1 - Electronic 6 Moon 16” Stand Fan 3 20000 3 - Electronic 1 Sony Optical Mouse 1 2500 10 - Clothes 2 A4 Tech Keyboard 1 5000 1 - Clothes 3 ViewSonic 17” Flat CRT 1 15000 5 - Clothes 4 First Eleven Book 2 500 15 - Clothes 5 SONY 32” TV 3 900000 1 - Clothes 6 Moon 16” Stand Fan 3 20000 3 - Clothes 1 Sony Optical Mouse 1 2500 10 - Kitchen wares 2 A4 Tech Keyboard 1 5000 1 - Kitchen wares 3 ViewSonic 17” Flat CRT 1 15000 5 - Kitchen wares 4 First Eleven Book 2 500 15 - Kitchen wares 5 SONY 32” TV 3 900000 1 - Kitchen wares 6 Moon 16” Stand Fan 3 20000 3 - Kitchen wares

cross join လ႔ ဆတ႔ အတငးပါပ။ ဒပစက table ၂ ခက ေျမာကလ႔ရတ႔ အတငး result ထြကပါတယ။ item ထမာက record ၆ ေၾကာငး၊ category ထမာက record ၅ ေၾကာငး ရပါတယ။ ဒါေၾကာင အေပၚက query က run လကရင record စစေပါငး အေၾကာငး ၃၀ ထြကပါလမမယ။ item table ထက record ၁ေၾကာငးစ အတြက category table ထမာ record ရသေလာကက ထတျပသြားတာပါ။ ကြၽနေတာက အကနမထတပ item table ထမာ ပါတ႔ categoryID န႔ category table ထမာပါတ႔ categoryID တတ႔ record ေတြပ ထတျပခငတယဆရငေတာ ထြကလာတ႔ result က condition ျပနစစဖ႔ လပါတယ။ ဒါေၾကာင ကြၽနေတာတ႔ where က သးျပး အခလ ေရးရပါမယ။

select item.*, category.categoryName

Page 169: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 165

Written By SevenLamp

from item, category where item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName 1 Sony Optical Mouse 1 2500 10 - Computer 2 A4 Tech Keyboard 1 5000 1 - Computer 3 ViewSonic 17” Flat CRT 1 15000 5 - Computer 4 First Eleven Book 2 500 15 - Stationary 5 SONY 32” TV 3 900000 1 - Electronic 6 Moon 16” Stand Fan 3 20000 3 - Electronic

၂) inner join Inner join က cross join က where ထညထားတ႔ ပစန႔ တပါတယ။ table ၂ ခက join ဖ႔အတြက On keyword ကသးပါတယ။ ဒလမးပါ..

select item.*, category.categoryName from item inner join category on item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName 1 Sony Optical Mouse 1 2500 10 - Computer 2 A4 Tech Keyboard 1 5000 1 - Computer 3 ViewSonic 17” Flat CRT 1 15000 5 - Computer 4 First Eleven Book 2 500 15 - Stationary 5 SONY 32” TV 3 900000 1 - Electronic 6 Moon 16” Stand Fan 3 20000 3 - Electronic

inner join န႔ေရးထားတ႔အတြက item table ထက categoryID က category table ထမာ ရမေနဘးဆရင အဒ record က ထတျပေပးမာမဟတပါဘး။ ဟတျပ တစခါတေလမာ ကြၽနေတာက item table ထက အားလးထတျပခငတယ၊ category table ထမာ ရရင category name ျပျပး၊ မရရငေတာ null ပေပၚလာခငတယဆရင။ တနညးအားျဖင table တခခက မတညျပး

Page 170: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 166

Written By SevenLamp

ျပခငတယဆရင ကြၽနေတာတ႔ inner join ကသးလ႔ မရေတာပါဘး။ ဒအခါမာ outer join ကသးရေတာမာပါ။

၃) outer join Outer join က ၂ ပငးထပခြနငပါတယ။ Left outer join န႔ Right outer join ပါ။ join keyword ရ႕ ဘယဖကက table က အကနျပမယဆရင left join န႔ ေရးရျပး။ join keyword ရ႕ ညာဖကက table က အကနျပခငရငေတာ right join န႔ ေရးပါမယ။

select item.*, category.categoryName from item left join category on item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName 1 Sony Optical Mouse 1 2500 10 - Computer 2 A4 Tech Keyboard 1 5000 1 - Computer 3 ViewSonic 17” Flat CRT 1 15000 5 - Computer 4 First Eleven Book 2 500 15 - Stationary 5 SONY 32” TV 3 900000 1 - Electronic 6 Moon 16” Stand Fan 3 20000 3 - Electronic select item.*, category.categoryName from item right join category on item.categoryID = category.categoryID

result

ItemID ItemName CategoryID Price Balance Remark CategoryName 1 Sony Optical Mouse 1 2500 10 - Computer 2 A4 Tech Keyboard 1 5000 1 - Computer 3 ViewSonic 17” Flat

CRT 1 15000 5 - Computer

4 First Eleven Book 2 500 15 - Stationary 5 SONY 32” TV 3 900000 1 - Electronic 6 Moon 16” Stand Fan 3 20000 3 - Electronic

Page 171: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 167

Written By SevenLamp

NULL NULL NULL NULL NULL NULL Clothes NULL NULL NULL NULL NULL NULL Kitchen wares

left join လ႔ေရးေရး left outer join လ႔ပ ေရးေရး တတပါပ။ right join န႔ right outer join လညး တတယေနာ။ ေနာကဆး query result မာ null ေတြထြကလာတာ ေတြ႔ရတယေနာ၊ ဘာလ႔လဆေတာ category table က မတညျပး ယလကေတာ item table ထမာ မရတာေတြအတြက null ေတြထြကလာတာပါ။

basic of SQL Statement (part 7)

ဒေန႔လညး ကြၽနေတာတ႔ SQL statement ေတြအေၾကာငးပ ဆကေျပာရေအာငဗာ။ subquery အေၾကာငးေျပာခငလ႔ဗ။ ကြၽနေတာက category table ထက categoryID 1, 3, 5 န႔ တတာေတြ ထတခငတယဆရင… OR ကသးရင ဒလေရးရမယ…

select * from category where categoryid = 1 or categoryid = 3 or categoryid = 5

result:

CategoryID CategoryName Status 1 Computer Active 2 Stationary Active 3 Electronic Active

categoryID အမားၾကး ကခလမး စစမယဆရင OR ကသးရတာ အဆငမေျပေတာပါဘး။ ဒအခါမာ In keyword ကသးျပး ခလေရးလ႔ရပါတယ…

select * from category where categoryid in ( 1, 2, 3 )

result:

CategoryID CategoryName Status 1 Computer Active

Page 172: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 168

Written By SevenLamp

2 Stationary Active 3 Electronic Active

အခကြၽနေတာက စစေပါငး ကနလကကန ၅ခ ထကမားတ႔ category ေတြက ထတျပခငတယဆရင…

select * from category where categoryid in ( select categoryid from item group by categoryid having SUM(balance)>5 )

result:

CategoryID CategoryName Status 1 Computer Active 2 Stationary Active

အေပၚက ေရးထားတ႔ query က တစပငးခငး အရင run ၾကညလက select categoryid from item group by categoryid having SUM(balance)>5 က run ရင အေျဖက 1,2 ဆျပးထြကလာမယ၊ အဒ result ကမ ေပၚက query က in န႔ ျပနစစယသြားတာ။ ဒလ query တစခထမာပါတ႔ ေနာကထပ query က subquery ဒါမမဟတ inner query လ႔ေခၚပါတယ။ အခ where ေနာကမာ ေရးတ႔ subquery မာ column အမားၾကးထတလ႔မရဘး။ where ေနာကက condition စစထားတ႔ column တစခကပထတေပးရတယ။ select ေနာကမာ column တစခအေနန႔လညး subquery ကသးလ႔ရပါေသးတယ။ ဥပမာဗာ.. ကြၽနေတာက category အားလးန႔ သတ႔ရ႕ ကနလကကနစစေပါငးကပါ ျပခငတယဆရင….။

select *, ( select sum(balance) from item where category.categoryid = item.categoryid group by item.categoryid ) as totalbalance

Page 173: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 169

Written By SevenLamp

from category

result:

CategoryID CategoryName Statius totalbalance 1 Computer Active 16 2 Stationary Active 15 3 Electronic Active 4 4 Clothes Inactive NULL 5 Kitchen wares Inactive NULL

ဒ query ေလးမာ အဓက ထတတာကေတာ category table ပ၊ totalbalance column အတြကမ ေနာကထပ query ကထပေခၚသြားတာ။ ဒေနရာမာ သတထားရမာက subquery ထကေန ထြကလာမယ value က only one row ပျဖစရမယ။ ဒါေၾကာင where category.categoryid = item.categoryid ဒအပငးေလး ထညေရးေပးရတယ။ ဟတျပ… ဒါဆရင ကြၽနေတာတ႔ subquery ဘယလေရးရလဆတာ နညးနညး သေလာကပါျပ။ အခ အေပၚက query ကပ ၾကညပါ select ထမာ ေနာကထပ select ေတြ ထပေရးေတာ query ကၾကညလကရင ရႈပေနသလ ျဖစေနလမမယ။ ဒအခါမ းမာ ပျပး ရငးသြားဖ႔အတြက ကြၽနေတာတ႔ ကယပင function ေတြေဆာကျပး ေရးလ႔ရပါတယ။ အေက.. function ေတြအေၾကာငးက ေနာကမ ဆကေျပာရေအာင။

basic of SQL Statement (part 8)

ဒေန႔ ကြၽနေတာတ႔ SQL Server 2005 မာ function ေတြကယတင ေဆာကျပး သးတ႔ ပစေလး ေလလာလကရေအာငဗာ။ function ၂ မးေဆာကလ႔ရတယဗ။ Table-valued function န႔ Scalar-valued function တျဖစပါတယ။ Table-valued function ရ႕ return type က table တစခလမး column တစခထကပတ႔ data ေတြက return ျပနပါတယ။ Scalar-valued function ကေတာ return value အေနန႔ column တစခပ return ျပနပါတယ။ အရငဆး scalar-valued function ေလး တစခေလာက ေရးၾကညရေအာင။ မေန႔တနးက ေရးခ႔တ႔ category ေတြန႔ total balance ထတတ႔ query ေလးက ျပနေရးပါမယ။

select category.*, ( select sum(balance) from item where item.categoryid = category.categoryid

Page 174: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 170

Written By SevenLamp

) as totalbalance from category

result:

CategoryID CategoryName Status totalbalance 1 Computer Active 16 2 Stationary Active 15 3 Electronic Active 4 4 Clothes Inactive NULL 5 Kitchen wares Inactive NULL

အေက ဒquery ထမာ ေရးထားတ႔ subquery ေလးက ကြၽနေတာက function ေလးခြျပး ေရးခငတာပါ။ အဒလေရးလကျခငးအားျဖင query ေရးတ႔ ေနရာမာ ပျပးရငးသြားမယ။ ဒေနရာမာ ကြၽနေတာလခငတာက totalbalance တစခထျဖစတ႔ အတြက scalar-valued function ေဆာကပါမယ။ ဒလပါ…

CREATE FUNCTION GetTotalBalance (@CategoryID int) RETURNS int AS BEGIN DECLARE @TotalBalance int SELECT @TotalBalance = SUM(balance) FROM Item WHERE CategoryID = @CategoryID RETURN @TotalBalance END

Function ေဆာကဖ႔ CREATE FUNCTION keyword ကသးပါတယ။ ျပနျပငဖ႔အတြကေတာ ALTER FUNCTION န႔

ALTER FUNCTION GetTotalBalance (@CategoryID int) RETURNS int AS BEGIN DECLARE @TotalBalance int SELECT @TotalBalance = SUM(balance) FROM Item

Page 175: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 171

Written By SevenLamp

WHERE CategoryID = @CategoryID RETURN @TotalBalance END

ဖကဖ႔အတြကေတာ DROP FUNCTION keyword တ႔က သးပါတယ။

DROP FUNCTION GetTotalBalance

ဒ function မာ CategoryID က parameter လကချပး item table ထမာ အဒ categoryID ရ႕ totalbalance က return ျပနပါတယ။ အေက အခကြၽနေတာတ႔ ဒ function က create လပျပးသြားျပဆရင ကြၽနေတာတ႔ ရ႕ query ေတြမာ ျပနေခၚသးလ႔ ရပါျပ။

select category.*, dbo.GetTotalBalance(categoryID) from category

result:

CategoryID CategoryName Status totalbalance 1 Computer Active 16 2 Stationary Active 15 3 Electronic Active 4 4 Clothes Inactive NULL 5 Kitchen wares Inactive NULL

က ေနာကထပ FUNCTION တစမးက Table-valued function. အခကြၽနေတာ categoryname, totalbalance န႔ totalamount တ႔က ထတျပခငပါတယ။ အဒ အတြက Table-value function ေလး ေဆာကရေအာင။ သလညးပ Create function keyword ကပ သးပါတယ။

CREATE FUNCTION GetItemByCategory() RETURNS TABLE AS RETURN ( SELECT categoryname, sum(balance) as totalBalance, sum(price * balance) as totalamount FROM Item inner join category ON item.categoryID = category.categoryID

Page 176: Basic of C#

Basic OF C#.Net(Our Notes For Our Youngers) 172

Written By SevenLamp

GROUP BY categoryname )

ျပးရင အဒ function ေလးက ဒလ ေခၚပါမယ

select * from GetItemByCategory()

result:

Categoryname totalBalance totalamount Computer 16 105000 Electronic 4 960000 Stationary 15 7500

မတခက။ ကၽြနေတာ ကsevenlamp ဆက ခြင႔ေတာငးဖ႔ အေျခအေနမေပးလ႔ မေျပာျဖစေပမ႔

အခတစခါတညး ခြင႔ေတာငးလကတာပါ..ကၽြနေတာ႔လ အခမ စတငေလ႔လာသေတြ တစေနရာတညးမာ

အက႔ပ႔စေတြကစစညးဖတနငေစဖ႔ကၽြနေတာေလ႔လာရငးန႔တစခါတညးစစညးေပးလကတာပါ..အကနားလည

နငမယထငပါတယ…အကေရးထားတာေတြက ဖတရငး အတငးအတာတစခအထ ကၽြနေတာ႔အတြက

အကးရခ႔ပါတယ…ေနာငဒပ႔စေတြက ဖတမ႔ ညငယညမငယေတြလညး အကးရမာပလ႔ ခယၿပး

အက႔ပ႔စေတြက စစညးေပးခငတ႔ ရညရြယခကျဖစလာၿပး စာအပေလးအျဖစ အမားသငါ ဖတနငေစရန

လပေပးလကပါတယအက….

ခငမငစြာျဖင႔….

ေဇာရပင(ျမနမာမသားစ ဖရမ)