Professional Documents
Culture Documents
Basic of Csharp
Basic of Csharp
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(?:)
Written By SevenLamp
Chapter 5 ……….35
Basic of C# (part 13) 2
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
Written By SevenLamp
Graphic Class
Random Class 3
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)
Written By SevenLamp
Create Function
Alter Function 4
Drop Function
http://sevenlamp.wordpress.com
http://www.sevenlamp.com
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 1
Chapter 1
basic of C# (part 1)
ဒီအခ်ိန္မွာ C# လို႔ ေျပာလိုက္ရင္ programming လုပ္ေနတဲ႔သူေတြ၊ programming ကိုစိတ၀
္ င္စားတဲ႔ သူေတြ
အားလံုးနီးနီး ၾကားဖူး ၊ သံုး ဖူး၊ ဖတ္ဖူး ၊ ေလ့လာဖူး ၾကမယ္လ႔ို ထင္ပါတယ္။ ကြၽန္ေတာ္အခု ဒီပိုစ့္ကို အခုမွ C#
စတင္ေလ့လာမယ္ ညီငယ္၊ညီမငယ္ ေက်ာင္းသား/သူ ေတြ အတြက္ရည္ရြယ္ျပီးေရးပါမယ္။ ညီငယ္၊
ညီမငယ္တ႔အ
ို တြက္ C# programming ေလ့လာတဲ႔ ခရီးမွာ အနည္းငယ္မွ်ေလာက္ပဲျဖစ္ျဖစ္
အေထာက္အကူရသြားေစခ်င္တ႔ဲ ရည္ရြယ္ခ်က္န႔ပ
ဲ ါ။ လံုး၀ အေျခခံကေနျပီး ကြၽန္ေတာ္ သိသေလာက္ ေရးမွာ
ျဖစ္တ႔ဲ အတြက္ မွားေတြေတြ႔ရင္လည္း ေထာက္ျပကူညီပါ၊ မရွင္းတာရွိရင္လည္း ေမးပါ၊ လိုအပ္တာရွိရင္လည္း
ကူညီလ႔ို ျဖည့္ေပးၾကပါလိ႔ု အရင္းဆံုး ေတာင္းပန္ပါတယ္။
ကြၽန္ေတာ္ဟာ professional developer တစ္ေယာက္ မဟုတ္ေသးပါဘူး။ C# အေၾကာင္းကို နည္းနည္းပါးပါး
နားလည္၊ လုပ္ဖူး တဲ႔ သူတစ္ေယာက္သာျဖစ္တ႔ဲ အတြက္၊ မွားခဲ႔တာရွိရင္ ေက်းဇူး ျပဳျပီး
ေျပာေပးျပင္ေပးၾကပါလိ႔လ
ု ည္း ေတာင္း ပန္ပါတယ္။ကြၽန္ေတာ္ အခ်ိန္ရရင္ ရသေလာက္
ပံုမွန္ေလးေရးေပးပါ့မယ္။ ဒါေၾကာင့္မ႔ို ပိုစ့္ေတြတင္တာၾကာခဲ႔ရင္၊ ေမးခြန္းမ်ားကို replyၾကာခဲ႔ရင္၊ နားလည္ျပီး
ခြင့္လႊတ္ေပးပါ(ေမးခဲ႔တာကို ရရင္ရတယ္ မရရင္မရဘူး ေသခ်ာေပါက္ ျပန္ေျဖပါ့မယ္) အားလံုးပဲ
ကူညီေပးၾကမယ္လ႔ို ေမွ်ာ္လင့္ပါတယ္။ ေက်းဇူးတင္ပါတယ္။
basic of C# (part 2)
ကဲ… စျပီ….။
History of C#
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 2
တစ္ခုေပါ့ဗ်ာ။ အဲ့ဒီ 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 ေတြပဲ က်န္ေတာ့တယ္တဲ႔)။
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)
ဆိုျပီးေတာ့။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 3
printf(“hello”);
3.5 2007 Visual Studio 2008 Window 7, Window Server 2008 RC2
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 4
Chapter 2
basic of C# (part 4)
window key + R ႏွိပ္ျပီး Run Box ကိုေခၚလိုက္ဗ်ာ ျပီးရင္ အဲ့ဒီ Box ထဲမွာ notepad
လို႔သာရိုက္ထည့္လိုက္၊ ဒါဆို Notepad ပြင့္လာလိမ့္မယ္။ ဟုတ္ျပီ… program စေရးရေအာင္။
ဒီအတိုင္းေရးလိုက္ဗ်ာ ျပီးမွ ျပန္ရွင္းမယ္။
class Hello
{
static void Main()
{
System.Console.Write("Hello World");
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 5
ဒီအတိုင္းေရးလိုက္ျပီ 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 ေတြကို နားလည္ျပီထင္တယ္ေနာ္။
အဓိကနားလည္ေစခ်င္တာကေတာ့ ဘာလုပ္ခ်င္လို႔ ဘယ္ကုဒ္ကိုေရးရတယ္ ဆိုတာကို
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 6
dir csc.exe /s
csc.exe C:\Test1.cs
dir Test1.exe
ေတြ႔တယ္မလားဗ် ကြၽန္ေတာ္တို႔ program ရဲ့ executable file ေလး။ အဲ့ဒီ file ေလးကို run ရင္
ရျပီေပါ့။ တခုေတာ့ မွတ္ထားဦးေနာ္၊ ဒီ exe file က .NET Framework ရွိမွ run လိ႔ု ရမွာေနာ္။ အခု
တခါတည္း run ၾကည့္ရေအာင္ဗ်ာ။ exe file ဆိုေတာ့ ဒီတိုင္း filename ရိုက္လိုက္ရံုပါပဲ။
Test1.exe or Test1
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 7
http://ifile.it/38lwqa5
basic of C# (part 5)
data type of C#
C# မွာ အဓိက data type ၂ မ်ိဳးရွိတယ္ဗ်။ Value Type နဲ႔ Reference Type ဆိုျပီးေခၚတယ္ဗ်ာ။
Value Type ဆိုတာကေတာ့ memory ေပၚက ကြၽန္ေတာ္တို႔ ေၾကျငာထားတဲ႔ ေနရာမွာ value
ကိုတိုက္ရိုက္ သိမ္းထားတာဗ်ာ။ Reference Type ဆိုရင္ေတာ့ value ကို မသိမ္းထားပဲ အဲ့ဒီ value
ရွိေနတဲ႔ memory address ကိုပဲ ကြၽန္ေတာ္တို႔ရဲ့ variable ထဲမွာ သိမ္းထားတာကို ဆိုလိုတာေပါ့။
နမူနာက ဒီလိုဗ်ာ…
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 8
int num = 3;
number value data တခုသိမ္းဖို႔အတြက္ num ဆိုတဲ႔ variable တစ္ခုကို memory ေပၚမွာ
ေနရာယူလိုက္ပါတယ္။ ျပီး တခါတည္း အဲ့ဒီ ေနရာမွာ 3 ဆိုတဲ႔ value တစ္ခုကို သိမ္းလုိက္ပါတယ္။
ေၾကျငာထားတဲ႔ ေနရာထဲမွာ value သိမ္းသြားတဲ႔ အတြက္ int ဟာ value type ျဖစ္ပါတယ္။
string st = “abc”;
ရွင္းသြားေအာင္ ပံုေလးကိုၾကည့္ပါ…
ဒါဆိုရင္ value type နဲ႔ reference type ကို ခြဲျပီး နားလည္မယ္ထင္ပါတယ္။ ဟုတ္ျပီ ဒါဆိုရင္ value
type မွာ ဘာေတြပါလဲ ဆက္ၾကည့္ရေအာင္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 9
decimal type၊
boolean data type၊ enumeration data type နဲ႔ structure data type ေတြပါ၀င္ပါတယ္။
string type၊
object type၊
array data type၊
class data type၊
interface နဲ႔
delegate type
ေတြပါ၀င္ပါတယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 10
keywords table
basic of C# (part 6)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 11
3 => int
3L => long
ဥပမာ
string v1 = “3″;
string v2 = “4″;
Console.Write(v1+v2);
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 12
သိဖို႔လိုလာပါျပီ။ အဲ့ဒီလို ေျပာင္းတဲ႔ ေနရာမွာ numeric type အခ်င္းခ်င္း ေျပာင္းတာနဲ႔ numeric type
နဲ႔ string type ေျပာင္းတာ ဆိုျပီး ခြဲေျပာပါမယ္။
int i = 123;
object o = i; // implicit boxing
object o = (object) i; // explicit boxing
int i = (int) o; // unboxing
string st = “123″;
int i = Convert.ToInt32(st);
int i = Int32.Parse(st);
string st = Convert.ToString(i);
string st = i.ToString();
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 13
အိုေက.. ဒါဆိုရင္ C# မွာ data type ေတြ တခုကေန တခုကို ေျပာင္းတာ ေျပာင္းတက္မယ္ေနာ္။
Chapter 3
basic of C# (part 7)
ဆိုျပီး ေရးလိုက္မယ္ဗ်ာ။ ျပီးရင္ user ဆီကေန ေတာင္းမယ့္ number ကို memory ေပၚမွာ
ခဏသိမ္းထားဖို႔ အတြက္ ေနရာယူ(variable declare) ရမယ္။ ဒါေၾကာင့္….
int num;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 14
ဒီလိုေရးလည္း ရပါတယ္။
num = Convert.ToInt32(Console.ReadLine());
ကဲ… ကြၽန္ေတာ္တို႔ရဲ့ num variable ထဲမွာ user ထည့္လိုက္တဲ႔ တန္ဖိုးေလး ေရာက္သြားပါျပီ။ အခု
user ကို square result ထုတ္ျပဖို႔ပဲက်န္ပါေတာ့တယ္…
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 15
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
basic of C# (part 8)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 16
ဒီပံုေလးထဲကလို ျဖစ္သြားမွာေပါ့ဗ်ာ….
1) Compile Error
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 17
2) Logic Error
Logic error ဆိုတာကေတာ့ programmer ရဲ့ စဥ္းစားပံုမွားလို႔ ျဖစ္ေစ၊ careless ျဖစ္ျပီး မွား ရိုက္မိလို႔
ျဖစ္ေစ၊ program ရဲ့ output မွာ အေျဖမွန္ မထြက္ေတာ့ပဲ၊ wrong result ထြက္လာတာမ်ိဳးကို
ဆိုလိုတာပါ။ ဥပမာ..
လို႔ ေရးရမယ့္ေနရာမွာ
3) Runtime Error
Runtime error ကေတာ့ အေပၚဆံုးမွာ ကြၽန္ေတာ္ျပထားတဲ႔ ပံုထဲက error မ်ိဳးေပါ့။ user fault
ေၾကာင့္ျဖစ္ေစ၊ ကြန္ပ်ဴတာရဲ့ အမွားေၾကာင့္ျဖစ္ေစ program မွားသြားတာမ်ိဳးေပါ့။
အျမဲတမ္းမွားမလားဆိုေတာ့ user သာ အမွန္ထည့္ရင္ မမွားဘူး ။ user ကမွားထည့္တာနဲ႔
ကြၽန္ေတာ္တို႔ program လည္း မွားသြားမယ္။ ဒါေပမယ့္ တကယ္ေကာင္းမြန္ျပည့္စံုတဲ႔ program
တစ္ခုျဖစ္ဖို႔အတြက္ ဒီလို error မ်ိဳးေတြကိုလည္း မျဖစ္ေအာင္ programmer က
စဥ္းစားေပးနိုင္ရမယ္။
Exception Handling
ဥပမာ…
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 18
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;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 19
}
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);
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 20
ေနာက္ေနဆက္ၾကတာေပါ့။
basic of C# (part 9)
Primary x.y
f(x)
a[x]
x++
x–
new
typeof
checked
unchecked
->
Unary +
-
!
~
++x
–x
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 21
(T)x
true
false
&
sizeof
Multiplicative *
/
%
Additive +
-
Shift <<
>>
Equality ==
!=
Logical &
|
^
Conditional &&
||
?:
Assignment =
+=
-=
*=
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 22
/=
%=
&=
|=
^=
<<=
>>=
??
Lambda =>
Precedence Operators
*/%
+-
<< >>
== !=
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 23
&
&&
||
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 ထြက္ပါတယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 24
ၾကီးတဲ႔type ထြက္ပါတယ္။ ဒါေပမယ့္ integer ထက္ေသးတဲ႔ type ေတြ ဆုိရင္ေတာ့ integer type
ထြက္ပါတယ္။
ဥပမာ…
short v1 = 3;
short v2 = 4;
short v3 = v1 + v2; // error တက္ပါလိမ့္မယ္။
int v3 = v1 + v2; // ဆိုမွ မွန္မယ္။
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
ၾကည့္လိုက္ရင္ သိသြားမွာပါ။ ဒီေန႔ေတာ့ ဒီေလာက္နဲ႔ပဲ နားလိုက္ရေအာင္ဗ်ာ။
မရွင္းတာေမးခ်င္တာေတြအားလံုး ေကာမန္႔ ေပးခဲ႔ၾကပါေနာ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 25
Chapter 4
Function
Function တစ္ခုမွာ return type , function name and argument list ဆိုျပီး အပိုင္း ၃
ပိုင္းပါတယ္ဗ်။ ဥပမာ….
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 26
note: function call ပဲျဖစ္ျဖစ္ definition ပဲျဖစ္ျဖစ္ declaration ပဲျဖစ္ျဖစ္ function လိ႔ု
ေျပာလိုက္တာနဲ႔ ( ) ပါရမယ္ဆိုတာေတာ့ အေသသာမွတ္ထားလိုက္ဗ်ာ။
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 တစ္ခုအေနနဲ႔ ထည့္ေပးလိုက္တာပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 27
ဒါေၾကာင့္ 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);
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 28
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
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 29
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
13579
if…..else
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 30
switch
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();
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 31
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();
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 32
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();
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 33
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;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 34
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
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 )
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 35
Chapter 5
၁။ while
၂။ do – while
၃။ for
၄။ foreach
looping ဆိုရင္ ေတာ္ေတာ္မ်ားမ်ား သံုးၾကတာက for loop ပါ။ looping ေတြမွာ looping variable
ဆိုတာေလး မ်ားေသာအားျဖင့္ရွိၾကပါတယ္၊ ဥပမာ looping ၁၀ၾကိမ္လုပ္မယ္ဆိုရင္ လက္ရွိမွာ
ဘယ္ႏွစ္ၾကိမ္ရွိျပီလဲဆိုတာ မွတ္ေပးထားမယ့္ variable ေလးေပါ့။ looping အလုပ္လုပ္ဖို႔အတြက္
အဓိက အခ်က္ ၃ခ်က္ သိရပါမယ္။ loopng variable ေလး ဘယ္ကစျပီး အလုပ္လုပ္မလဲ ဆိုတဲ႔
start ရယ္၊ ဘယ္အခ်ိန္ထိအလုပ္လုပ္မလဲဆိုတဲ႔ stop ရယ္၊ ဘယ္လို တိုးသြားမလဲဆိုတဲ႔ step
ရယ္ေပါ့။ ဒီ၃ခ်က္ကို for looping မွာ ဒီလိုေရးပါတယ္…
Example:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 36
start;
for( ; stop; )
{
statements;
step;
}
Example:
int i = 1;
for( ; i<=10; )
{
Console.WriteLine(“*”);
i++;
}
start;
while ( stop )
{
statements;
step;
}
Example:
int i = 1;
while( i<=10 )
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 37
{
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 );
using System;
class forlooptest
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 38
{
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);
}
}
foreach looping
foreach looping ကို collection(အစုအေ၀း) တစ္ခုအတြင္းမွာ ရွိသေလာက္ အားလံုး
လုပ္ခ်င္တယ္ဆိုရင္ သံုးေလ႔ရွိပါတယ္။ array ထဲမွာ ရွိသေလာက္လုပ္ခ်င္တယ္၊ class ထဲက
property ေတြအားလံုးလုပ္ခ်င္တယ္၊ ဒီလို အေျခအေနမ်ိဳးမွာ foreach loop ကိုသံုးပါတယ္။ ဥပမာ..
ကြၽန္ေ တာ့္ ဘေလာ့ကို လာၾကည့္တ႔ဲ သူငယ္ခ်င္းေတြ အားလံုးကို တစ္ေယာက္ laptop တစ္လံုး
လက္ေဆာင္ေပးခ်င္တယ္ ဆိုရင္ foreach ကိုသံုးျပီး ဒီလို ေရးရမွာပါ..
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 39
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();
}
}
arr[0] = 2;
arr[1] = 4;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 40
arr[2] = 6;
arr[3] = 8;
arr[4] = 0;
int[ ] arr = { 2, 4, 6, 8, 0 };
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();
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 41
အခု ေၾကျငာလိုက္တဲ႔ 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;
using System;
class Program
{
static int GetInteger()
{
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 42
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];
Console.WriteLine();
for (int i = 0; i <= matrix1.GetUpperBound(0); i++)
{
for (int j = 0; j <= matrix1.GetUpperBound(1); j++)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 43
{
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];
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 44
}
}
}
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
ကြၽန္ေတာ္တို႔ array ေတြ ေၾကျငာတဲ႔ အခါမွာ integer array ေၾကျငာရင္ integer ပဲ သိမ္းလို႔
ရပါမယ္။ string array ဆိုရင္လည္း string ေတြပဲ သိမ္းမွာေပါ့။ ဒီလိုမဟုတ္ပဲ ကိုယ္ၾကိဳက္တဲ႔ data
type ကို သိမ္းလို႔ ရခ်င္ရင္ေတာ့ object array ေဆာက္ေ ပးရပါတယ္။
အခုထိ ကြၽန္ေတာ္တို႔ သံုးခဲ႔တဲ႔ array ေတြရဲ႕ size ဟာ static size ျဖစ္ပါတယ္။ ကြၽန္ေတာ္တို႔ array
ကို ၃ ခန္းေၾကျငာလိုက္ရင္ ၃ ခန္းထက္ပိုျပီး တန္ဖိုးထည့္လို႔ မရပါဘူး။ ကြၽန္ေတာ္တို႔ သံုးမယ့္ array
ရဲ႕ size ကို dynamic size အျဖစ္သံုးခ်င္တယ္ ဆိုရင္ေတာ့ သီးျခားအေနနဲ႔ collection class ေတြကို
သံုးၾကရမွာပါ။ ပထမဆံုးအေနနဲ႔ ArrayList Class အေၾကာင္း စေျပာပါ့မယ္။
ArrayList Class က array တစ္ခုလိုမ်ိဳး အလုပ္လုပ္ေပးပါတယ္။ သူက variant size ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 45
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";
Hashtable Class
Hashtable class ထဲမွာ key/value တြဲ႕ data ေတြ လက္ခံပါတယ္။ key/value အတြဲလိုက္ကို
DictionaryEntry လို႔ေခၚပါေသးတယ္။ ArrayList မွာ ကြၽန္ေတာ္တို႔ index ကို integer type
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 46
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);
ဒီေန႔ ကြၽန္ေတာ္ OOP အေၾကာင္း မစခင္ enumeration နဲ႔ structure အေၾကာင္း နည္း နည္း
ေျပာခ်င္တယ္ဗ်ာ။ အရင္ဆံုး variable declaration အေၾကာင္းကို ျပန္ေႏႊးရေအာင္။ ကြၽန္ေတာ္တို႔
number တန္ဖိုးတစ္ခု သိမ္းဖို႔ integer အမ်ိဳးအစား variable တစ္ခုေၾကျငာမယ္ဆိုရင္…
int num;
myOwnType var1;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 47
enum myOwnType
{
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
}
အိုေက ဒီပံုစံအတိုင္းဆိုရင္
Sunday = 0,
Monday = 5,
Tuesday = 6,
Wednesday = 7,
Thursday = 100,
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 48
Friday = 101,
Saturday = 102
ဆိုျပီး ျဖစ္သြားပါမယ္။
ကြၽန္ေတာ္တို႔ enumeration test လုပ္ဖ႔ို program တစ္ခုေလာက္ ေရးၾကည့္ရေအာင္။
using System;
class Program
{
enum myOwnType : byte
{
Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday
}
Output
Friday is 101
7 is Wednesday
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 49
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;
ျပန္ရွင္းရေအာင္
struct Student
{
public int roll;
public string name;
public int mark;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 50
ဒါက Student ဆိုတ႔ဲ user defined type တစ္ခု create လုပ္တာပါ။ ဒီလိုေရးလိုက္ျခင္းအားျဖင့္
compiler က Student ဆိုတာမွာေတာ့ integer အမ်ိဳးအစား variable ႏွစ္ခုရယ္၊ string တစ္ခုရယ္
ပါတယ္ဆိုတာ သိသြားပါျပီ။ variable ေတြရဲ႕ေရွ႕မွာ public လို႔ေရးတာကေတာ့ အဲ့ဒီ variable
ေတြကို structure ရဲ႕ အျပင္ဘက္ တျခားေနရာကေန ေခၚသံုးခြင့္ျပဳတာပါ။
ျပီးေတာ့ Main function ထဲမွာ ကြၽန္ေတာ္က ေက်ာင္းသား ၃ေယာက္ရဲ႕ data သိမ္းခ်င္တယ္
ဆိုေတာ့ Student variable ၃ ခုေၾကျငာရမွာေပါ့။ ဒါေၾကာင့္ ကြၽန္ေတာ္က s1, s2 နဲ႔ s3 ဆိုျပီး
ေၾကျငာလို္က္ပါတယ္။
Student s1;
Student s2 = s1;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 51
Chapter 7
class People
{
string name; // member data
int age; // member data
void eat() // member function
{
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 52
// 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 :
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 53
1 Ag Ag 90
3 Ma Ma 88
3 Ma Ma 88
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 54
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 ကို
ရိုက္ထုတ္တဲ႔ ေနရာမွာပါ ေပၚလာရျခင္းျဖစ္ပါတယ္။ ေတာ္ေတာ္ေလးေတာ့ ရႈပ္သြားမယ္ထင္တယ္။
ကြၽန္ေ တာ္ စာအေရးအသား ညံ့ေတာ့ ေသေသခ်ာခ်ာ နားလည္ေအာင္ မရွင္းျပနိုင္လို႔ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 55
ကြၽန္ေတာ္တို႔ 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 ေတြ ဘယ္လိုေဆာက္လဲ ေလ့လာလိုက္ရေအာင္။
class Student
{
public int roll;
public string name;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 56
class Student
{
public int roll;
public string name;
public int mark;
public Student(string name) // parameterized constructor
{
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 57
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 အေၾကာင္း နားလည္ျပီလားေတာ့ မသိဘူး။
နားမလည္ဘူးဆိုရင္လည္း ေျပာၾကဦးဗ်ာ။ ထပ္ျပီး ျပန္ရွင္းေပးပါ့မယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 58
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 မွာ ေခၚထားသလို
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 59
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();
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 60
Chapter 8
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 ထည့္ရန္မလိုပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 61
၂။ instant member ေတြက class ကိုေဆာက္တ႔ဲ object ေတြမွာ တစ္ခုဆီ copy ပါသြားမွာ
ျဖစ္ေပမယ့္၊ static member ကေတာ့ object အားလံုး အတြက္ တစ္ခုထဲရွိမွာ ျဖစ္ပါတယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 62
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;
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 63
ဒီေန႔ ကြၽန္ေတာ္တို႔ 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)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 64
{
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();
}
}
using System;
class Test_C
{
private int var;
public int MyVar
{
get
{
return var;
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 65
}
set
{
var = value;
}
}
}
class Program
{
static void Main()
{
Test_C obj = new Test_C();
obj.MyVar = 3;
Console.WriteLine(obj.MyVar);
Console.Read();
}
}
using System;
class myNumber
{
private int num;
public string Num
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 66
{
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();
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 67
Inheritance အေမြဆက္ခံျခင္းဆိုတာဘာလဲ???
class People
{
string Name;
int Age;
string Address;
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 68
class Student
{
string Name;
int Age;
string Address;
int Roll;
int Class;
}
- public ( အမ်ားသံုး )
- private ( မိမိကိုယ္တိုင္သံုး )
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 69
စသည္တ႔ို ျဖစ္ပါတယ္။ အေပၚက 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 အသြင္ေျပာင္းျခင္းဆိုတာကေရာ???
Data Hiding
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 70
Encapsulation
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 71
}
}
}
Chapter 9
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 72
ဟုတ္ျပီေနာ္.. အခုလိုမ်ိဳး 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
ျဖစ္ေစ၊ အရည္အတြက္ ျဖစ္ေစမတူရင္ ရပါတယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 73
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");
}
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 74
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();
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 75
Console.Read();
}
}
Graphics Class
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 76
လိုင္းရဲ႕ အထူအပါးကိုပါ ခ်ိန္ေပးလို႔လည္း ရပါတယ္။ pen class မွာ width property မွာ
ျပင္ေပးလို႔ရပါတယ္။
Graphics g = this.CreateGraphics();
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 77
button_click event မွာ ေရးရမွာေပါ့။ Paint event မွာ မေရးထားတာေတြ အားလံုးက form ကို
Minimax လုပ္လိုက္ရင္ အကုန္ ေပ်ာက္သြားမွာပါ။
Random Class
ကဲ ဟုတ္ၿပီ အခုကြၽန္ေတာ္က ခုန rectangle ေလးရဲ႕ location ေလးကိုကို form ေပၚမွာ random
ေပၚေအာင္ ေရးၾကည့္ရေအာင္။
int x = rnd.Next(this.ClientSize.Width);
int y = rnd.Next(this.ClientSize.Height);
Graphics g = this.CreateGraphics();
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 78
Event
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 79
အခုကြၽန္ေတာ္က form ကို user က ပိတ္လိုက္တဲ႔ အခ်ိန္မွာ user ကို ပိတ္မွာ ေသခ်ာလားဆိုျပီး
confirm message ေလး ေမးခ်င္တယ္ဆိုပါေတာ့… ဒါဆိုရင္ ဘယ္မွာ ေရးရမွာလဲ ? ဟုတ္ကဲ႔ Form
ရဲ႕ FormClosing Event မွာ ေရးရပါမယ္။ ဒီလိုမ်ိဳးပါ…
Pic_1
MessageBox class ထဲက show function ေလးကို ေခၚလိုက္ရင္ ကြၽန္ေတာ္တို႔ form ေပၚမွာ dialog
form ေလး တစ္ခု ျပေပးပါတယ္။ dialog form ဆိုတာက အဲ့ဒ ီ form ေပၚေနရင္ တျခား form ေတြကို
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 80
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 ဆိုတာကို နည္းနည္း နားလည္လာမယ္ ထင္ပါတယ္။
ဒီေန႔ ကြၽန္ေတာ္တို႔ window form application ရဲ႕ event ေတြ အေၾကာင္းပဲ ဆက္ရေအာင္။
အခုကြၽန္ေတာ္က program run လိုက္ျပီး form ေပၚမွာ mouse ေရႊ႕ရင္ အဲ့ဒီ mouse pointer ရဲ႕
location ေလးကို form ရဲ႕ caption မွာ ျပခ်င္တယ္ဆိုပါေတာ့။ ဒါဆိုရင္ ကြၽန္ေတာ္က ဘယ္ event
ကိုသံုးရမလဲ ဆိုရင္ Form ရဲ႕ Mouse Move Event ကိုသံုးရပါမယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 81
this.Text = e.Location.ToString();
}
ကြၽန္ေ တာ္က form Title bar မွာ မျပခ်င္ဘူး mouse pointer ေလးရဲ႕ ေဘးမွာ ပဲ location ေလးကို
ေပၚေနေစခ်င္တယ္ဆိုရင္ေတာ့ Form ေပၚမွာ စာသားေတြ ျပဖို႔အတြက္ Label Control ကိုသံုးျပီး
အခုလိုေရးရပါမယ္။
pic1
အရင္ဆံုး Form ေပၚမွာ Label တစ္ခုထည့္ရပါမယ္။ Mouse Move event မွာ အဲ့ဒီ Label ေလးရဲ႕
Location ကိုေရႊဖ႔အ
ို တြက္ Left နဲ႔ Top ကို mouse pointer လက္ရွိေရာက္ေနတဲ႔ location(x,y)
သြားထည့္ေပးလိုက္ပါတယ္။ ဒီေနရာမွာ တစ္ခါတည္း သိလိုက္ဖို႔လိုတာက form ေပၚမွာ control ေတြ
ေနရာေရႊ႕ခ်င္ရင္ အဲ့ဒီ control ရဲ႕ left နဲ႔ top ကို ေျပာင္းျခင္းအားျဖင့္ ေရႊ႕နိုင္တယ္ဆိုတာေလးပါ။
ေဘာလံုးေလး လႈိမ့္ရေအာင္
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 82
pic1
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 83
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
မွာ ေရးထားတာကိုလည္း နားလည္မွာပါ။ ေဘာလံုးေလးကို ပိုျပီး ျမန္ျမန္ေရြ႕ေစခ်င္ရင္ေတာ့ ၁ တိုး၊
၁ေလွ်ာ့တဲ႔ ေနရာမွာ ၂ တို႔ ၃ တိ႔ု စသည္ျဖင့္ တိုးေပးလို႔ ရပါတယ္။
အခုကြၽန္ေတာ္က ဒုတိယ အဆင့္ေနနဲ႔ ေဘာလံုးေလး အခုလို ေရႊ႕တဲ႔ ကိစၥကို 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
ေတြေရးေပးလိုက္ပါမယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 84
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;
}
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 85
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 ထဲမွာပဲ
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 86
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 87
Add Connection wizard က Server Name ေနရာမွာ ကြၽန္ေတာ္တို႔ database ရွိေနတဲ႔ computer
name ကိုထည့္ေပးရပါမယ္။ ကိုယ့္စက္ကို ခ်ိတ္မယ္ဆိုရင္ (.) ထည့္ေပးလည္းရပါတယ္။ ျပီးရင္
database login username နဲ႔ password ထည့္ေပးရပါမယ္။ မရွိဘူးဆိုရင္ေတာ့ Window
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 88
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 89
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 90
ဒါဆိုရင္ Query ေရးဖို႔ ေနရာေရာက္ပါျပီ။ ကြၽန္ေတာ္က Category table ထဲက record အားလံုး
ထုတ္ျပဖို႔အတြက္ “SELECT * FROM Category” လို႔ေရးလိုက္ပါတယ္။ query ကို ကိုယ္တိုင္မေရးပဲ
design ကိုပဲ ေဆာက္ခိုင္းခ်င္တယ္ဆိုရင္ Query Builder button ကိုႏွိပ္ျပီး ေဆာက္လို႔ ရပါတယ္။
ကဲ ဆက္ျပီး Next လိုက္ပါဦး။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 91
function name ေပးရတာပါ။ function ၂ ခုေဆာက္ေပးပါတယ္။ Fill နဲ႔ Get ပါ။ dataset
စေဆာက္တ႔ဲ ပထမဆံုး query အတြက္ နာမည္မေျပာင္းပါနဲ႔ default အတိုင္း ပဲ ထားျပီး next
လိုက္ပါဦး။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 92
Finish လိုက္ရင္ categoryDataSet ထဲမွာ Category Table ေလးရယ္၊ table ထဲမွာ ပါတဲ႔ column
name ေတြရယ္၊ CategoryTableAdapter ရယ္၊ Fill နဲ႔ GetDate Function ေတြရယ္ကို ေတြ႔ရမွာပါ။
အိုေက… နားလည္မယ္ထင္ပါတယ္။ ဒါဆိုရင္ ကြၽန္ေတာ္တို႔ Dataset ေတြ တည္ေဆာက္တက္ပါျပီ။
ေနာက္ေန႔မွ datagridview နဲ႔ ခ်ိတ္ပါ့မယ္။
ADO.NET in C# (part 2)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 93
ပံု (၁)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 94
ပံု (၂)
ပံု
(၃)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 95
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 96
ပံု (၄)
ပံု (၅)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 97
ဒီ 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)
ပံု(၁)
ပံု(၁)မွာ ျပထားတဲ႔ အတိုင္း အဆင့္ဆင့္သြားလိုက္ပါ။ ကြၽန္ေတာ္တို႔ dataset
ၾကိဳမေဆာက္ထားတဲ႔အတြက္ choose data source ထဲမွာ ဘာမွ ေတြ႔ရမွာ မဟုတ္ပါဘူး။ ကဲ Add
Project Data Source လင့္ေလးကို click လိုက္ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 98
ပံု(၂)
ဒါဆိုရင္ Data Source အမ်ိဳးအစားေရြးခိုင္းတဲ႔ window ေလးေပၚလာပါ့မယ္။ ကြၽန္ေတာ္က
databaseထဲကေန ယူခ်င္တာျဖစ္လို႔ Database ကိုေရြးျပီး Next ပါမယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 99
ပံု(၃)
ဒါဆိုရင္ connection ေရြးခိုင္းတဲ႔ ေနရာကိုေရာက္ပါျပီ။ အရင္က ခ်ိတ္ဖူးတဲ႔ connection ေတြရွိေနရင္
ပံု(၃)မွာ ျပထားသလို combobox ေလးထဲကေနေရြးေပးလိုက္ပါ။ မရွိဘူးဆိုရင္ေတာ့ ဟိုေန႔က
ေျပာခဲ႔သလို New Connection လုပ္ရမွာပါ။ Next ထပ္ႏွိပ္ပါဦး၊ ဒါဆို connection ကိုသိမ္းမလား
ေမးလိမ့္မယ္။ သိမ္းမယ္ေျပာျပီး Next ထပ္ႏွိပ္ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 100
ပံု(၄)
Database object ေရြးခိုင္းတဲ႔ ေနရာေရာက္ရင္ Tables ေအာက္က Category Table
ကိုေရြးရပါမယ္။ DataSet name ေနရာမွာ CategoryDataSet လို႔ ေျပာင္းခ်င္ရင္ ေျပာင္းလို႔
ရပါတယ္။ ဒီတိုင္းထားလည္း ျပႆနာမရွိပါဘူး။ ကဲ Finished လုိက္ပါ။ ဒါဆိုရင္ေတာ့ ကြၽန္ေတာ္တို႔
datagrid နဲ႔ database ခ်ိတ္ဆက္တဲ႔ လုပ္ငန္းစဥ္ ျပီးဆံုးပါျပီ။ dataSet ကိုလည္း
ေဆာက္ေပးသြားမွာပါ။ form load event မွာလည္း data fill လုပ္ေပးသြားပါလိမ့္မယ္။ အခု
ကြၽန္ေ တာ္တို႔က data update လုပ္ဖ႔ို code ၂ ေၾကာင္းပဲ ေရးေပးစရာ လိုအပ္ပါေတာ့တယ္။ ကဲ…
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 101
ဘယ္လိုလဲ…
ပံု(၅)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 102
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.
pic_1
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 103
Note: EmployeeID ကို ကြၽန္ေတာ္တ႔ို ထည့္စရာ မလိုပဲ database မွာ auto တိုးသြားခ်င္လို႔ အဲ့ဒီ
column properties မွာ (Is Identity) ကို Yes လိ႔ု ေပးလိုက္ပါတယ္။ Identity Seed (1) ကေနစျပီး
Identity Increment (1) စီ တိုးသြားမယ္လို႔ ေျပာတာပါ။
ျပီးရင္ အဲ့ဒီ EmployeeTable ထဲကို Sample Data နည္းနည္း ျဖည့္ေပးထားလိုက္ပါမယ္။ ပံု(၂) နဲ႔
ပံု(၃)မွာ ၾကည့္ပါ။
pic_2
pic_3
pic_4
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 104
Database ထဲက data ကို window form မွာ ခ်ိတ္ျပဖို႔အတြက္ ကြၽန္ေတာ္ အခု ပံု(၅)
မွာျပထားသလို အဆင့္ဆင့္ လုပ္သြားလိုက္ပါ။
pic_5
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 105
pic_6
Data Source Configuration Wizard မွာ ‘DataBase’ ကိုေရြးျပီး Next ထပ္ႏွိပ္လိုက္ပါ။ ဒါဆိုရင္
ပံု(၇) မွာ ျပထားသလို database connection ေရြးခိုင္းတဲ႔ ေနရာကိုေရာက္ပါမယ္။ ကြၽန္ေတာ္တ႔က
ို
အခုမွ connection အသစ္ေဆာက္မွာ ျဖစ္လ႔ို New Connection button ကိႏ
ု ွိပ္လိုက္ပါ။ Add
connection wizard ေရာက္ရင္ ပံု(ဂ) မွာ ျပထားသလိုမ်ိဳး connection တစ္ခု ေဆာက္လိုက္ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 106
pic_7
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 107
pic_8
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 108
pic_9
ပံု(၉) မွာ ျပထားတဲ႔ အတိုင္း ကြၽန္ေတာ္တို႔ database connection တစ္ခုရပါျပီ။ အဲ့ဒီ connection
string ထဲမွာ password ထည့္သိမ္းထားမယ္ဆိုရင္ ဒုတိယ radio button ေလးကို ေရြးေပးရပါမယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 109
pic_10
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 110
pic_11
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 111
pic_12
Database ထဲက data ေတြကို ကြၽန္ေတာ္တို႔ program ရဲ႕ memory ေပၚမွာ ယူျပီး သိမ္းေပးထားတဲ႔
အလုပ္ကို DataSet က လုပ္ေပးပါတယ္။ အဲ့ဒီ dataset ထဲကို data ေတြ ပိ႔ေ
ု ဆာင္ေပးတဲ႔
အလုပ္ကိုေတာ့ tableadapter က တာ၀န္ယူပါတယ္။ Form Load event ထဲမွာ ေရးေပးသြားတဲ႔
အလုပ္က အဲ့ဒီ data fill လုပ္ေပးတဲ႔ အလုပ္ပါ။ DataSet ထဲက data ေတြကို UI Controls ေတြမွာ
ျပဖို႔ အတြက္ကိုေတာ့ BindingSource ကိုသံုးရပါတယ္။
pic_13
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 112
pic_14
Chapter 11
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 113
ကိုေက်ာ္စြာရဲ႕ 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 ကိုပဲ ေရြးျပီး ၀င္လိုက္ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 114
CategoryName varchar(50) on
စသည္ျဖင့္ေပါ့။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 115
Database replication မွာ publisher, distributor နဲ႔ subscriber ဆိုျပီး အဓိက ဇာတ္လိုက္ ၃
ေယာက္ရွိတယ္ဗ်။
pic_1
အိုေက အေပၚမွာ ေျပာခဲ႔သလို 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 ေရာ ကို ကြန္ပ်ဴတာ တစ္လံုးထဲမွာ
ထားမွာပါ(ဒီတစ္လံုးပဲရွိတာေလ)
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 116
ဒီေနရာမွာ မွတ္ထားဖို႔ လိုတာက 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
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 117
Pic_3
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 118
Pic_4
ပံု(၄) ကေတာ့ distributor database location ေရြးခိုင္းတာပါ။ distributor ကို publisher စက္မွာ
ထားမွာလား။ ဒါမွမဟုတ္ တျခားစက္တစ္လံုးလံုးမွာ ထားမွာလားဆိုတာကို ဒီအဆင့္မွာ
ေရြးနိုင္ပါတယ္။ အခုကြၽန္ေတာ္ကေတာ့ publisher စက္မွာပဲ distributor ကိုထားမွာ
ျဖစ္တဲ႔အတြက္ေၾကာင့္ default အတိုင္းပဲ ထားျပီး Next ဆက္ႏွိပ္ပါမယ္။ replication လုပ္ဖ႔အ
ို တြက္
ကြၽန္ေ တာ္တို႔ computer မွာ SQL Server Agent Run ေနဖို႔လိုတယ္ဗ်။ အဲ့ဒီ agent မrun
ရေသးဘူးဆိုရင္ ပံု(၅) မွာျပထားတဲ႔အတိုင္း ေပၚလာလိမ့္မယ္။ run ထားျပီးသာဆိုရင္ေတ့ ေပၚမွာ
မဟုတ္ပါဘူး။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 119
Pic_5
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 120
Pic_6
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 121
Pic_7
ပံု(၇)-ဒီအဆင့္မွာ ကြၽန္ေတာ္တ႔ို distribution database ရဲ႕ name နဲ႔ ူlocation ကို ရိုက္ေပးရမွာပါ။
default ဒီအတိုင္းေလးပဲ ထားလိုက္ျပီး Next ပါမယ္။ ပံု(ဂ)- ပံု(၉)- ပံု(၁၀)-မွာ Next ေတြနွိပ္ျပီး
Finished လိုက္ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 122
Pic_8
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 123
Pic_9
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 124
Pic_10
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 125
Pic_11
ဒါဆို ကြၽန္ေတာ္တို႔ ပံု(၁၁) မွာ ျပထားတဲ႔အတိုင္း Distributor ကို configure လုပ္တာ ေအာင္ျမင္စြာ
ျပီးဆံုးသြားပါျပီ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 126
Pic_12
Pic_13
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 127
Pic_14
- Snapshot publication
- Transactional publication
- Merge publication
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 128
Pic_15
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 129
Pic_16
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 130
Pic_17
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 131
Pic_18
ပံု(၁၈)-အဆင့္မွာ ကြၽန္ေတာ္တို႔ article ေတြအတြက္ row filter ေပးလို႔ရပါတယ္။ table ထဲမွာ ရွိသမွ်
row ေတြအားလံုးကို publish မလုပ္ပဲ condition စစ္ျပီးမွ လုပ္ခ်င္ရင္ ဒီေနရာမွာ Add button ႏွိပ္ျပီး
filter ထည့္လ႔ို ရပါတယ္။ အခုကြၽန္ေတာ္ကေတာ့ မထည့္ေတာ့ပါဘူး။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 132
Pic_19
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 133
Pic_20
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 134
Pic_21
ပံု(၂၁)-မွာ ျပထားတဲ႔အတိုင္း SQL Server Agent service account နဲ႔ run မယ္လို႔
ေျပာလိုက္ပါတယ္။ ေနာက္ျပီး Publisher database ကို ၀င္ဖို႔အတြက္ SQL Server login account
ထည့္ေပးရပါတယ္။ ကြၽန္ေတာ္တို႔ SQL Server install လုပ္တုန္းက password
မေပးခဲ႔ဘူးဆိုရင္ေတာ့၊ By impersonation the process account ဆိုတာကို ေရြးလိုက္ပါ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 135
Pic_22
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 136
Pic_23
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 137
Pic_24
ပံု(၂၂)- မွာ Next ႏွိပ္၊ ပံု(၂၃)- မွာ နံမည္ေပးျပီး Finished လိုက္ပါ။ ဒါဆို ပံု(၂၄)-မွာ ျပထားသလိုမ်ိဳး
publisher ေဆာက္တ႔ဲ ကိစၥ အဆင္ေျပသြားပါျပီ။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 138
Pic_25
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 139
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
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 140
Pic_28
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 141
Pic_29
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 142
Pic_30
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 143
Pic_31
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 144
Pic_32
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 145
Pic_33
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 146
Pic_34
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 147
Pic_35
Pic_36
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 148
Pic_37
Chapter 12
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 149
Insert Statement
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 150
အေပၚက example query ေလးအတိုင္း ေရးမယ္ဆိုရင္ category table ထဲမွာ ရွိတဲ႔ field
ေတြအားလံုးအတြက္ data ထည့္ကိုထည့္ေပးရမယ္။ အစဥ္လိုက္လည္း ျဖစ္ရပါမယ္။ တခါတေလမွာ
ကြၽန္ေတာ္တို႔က column ေတြအားလံုးကို data ထည့္မေပးခ်င္တာတို႔၊ အစဥ္လိုက္မျဖစ္တာတို႔ဆိုရင္
query ေရးတဲ႔အခါ table name ရဲ့ ေနာက္မွာ ကိုယ္ထည့္ခ်င္တဲ႔ column name
ကိုပါထည့္ေရးေပးရမွာပါ။ ဥပမာ…
တခါတေလမွာ ကြၽန္ေတာ္တို႔ table တစ္ခုထဲက data ေတြကို တျခား table တစ္ခုထဲကို copy
ကူးထည့္ခ်င္တဲ႔ အခါမ်ိဳးမွာ Insert command ကို Select command နဲ႔လည္း
တြဲသံုးနိုင္ပါေသးတယ္။ ဒီလိုမ်ိဳးပါ…
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 151
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
Delete Statement
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 152
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
1 Computer Active
2 Stationary Active
3 Electronic Active
4 Clothes Inactive
Item Table
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 153
Select Statement
SQL Statement ၄ မ်ိဳးမွာျဖင့္ ဒီ select က အရွဳပ္ဆံုးပါပဲဗ ်ာ။ user ၾကည့္ခ်င္တဲ႔ result ရဖိ႔အ
ု တြက္
ကြၽန္ေတာ္တို႔ select command ကို နည္းလမ္းမ်ိဳးစံုနဲ႔ သံုးရမွာပါ။ အရႈပ္ဆံုးဆိုလို႔လည္း
လန္႔မသြားနဲ႔ဦးေနာ္၊ ဘယ္အရာမဆို မသိရင္ခက္ျပီး သိသြားရင္ေတာ့ လြယ္ပါတယ္။ ကဲ..
အလြယ္ဆံုးကေန စလိုက္ရေအာင္။ ပထမဆံုး ကြၽန္ေတာ္က Category Table ထဲက record
ေတြအားလံုးကို user ကို ထုတ္ျပခ်င္တယ္ ဆိုပါေတာ့။ ဒါဆိုရင္ ဒီလိုေရးရမွာပါ။
Result :
1 Computer Active
2 Stationary Active
3 Electronic Active
4 Clothes Inactive
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 154
Result :
CategoryID CategoryName
1 Computer
2 Stationary
3 Electronic
4 Clothes
5 Kitchen wares
Result :
1 Computer Active
2 Stationary Active
3 Electronic Active
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 155
Result :
Result :
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 156
Result :
ထြက္လာတဲ႔ result ရဲ့ ဆန္က်င္ဘက္ ေျပာင္းျပန္ကို လိုခ်င္တယ္ ဆိုရင္ေတာ့ NOT ကို တြဲသံုးလို႔
ရပါတယ္။
Result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 157
Result:
Result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 158
Result:
Result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 159
Result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 160
Chapter 13
အခု ကြၽန္ေတာ္တို႔ Select quary ေတြမွာ count တိ႔ု sum တို႔ စသည့္ျဖင့္ function
ေတြထည့္သံုးၾကည္ရေအာင္။ အဲ့ဒီ function ေတြကို aggregate function ေတြလ႔ို ေခၚတယ္။ ဒီလို
aggregate function ေတြပါတဲ႔ query ေတြကိုလည္း aggregate query လိ႔ေ
ု ခၚပါတယ္။
AVG MIN
CHECKSUM SUM
CHECKSUM_AGG STDEV
COUNT STDEVP
COUNT_BIG VAR
GROUPING VARP
MAX
ဒီ function ေတြကို ကြၽန္ေတာ္တို႔ Select ရဲ့ ေနာက္မွာ ျဖစ္ေစ၊ Having ရဲ့ေနာက္မွာ ျဖစ္ေစ၊
သံုးနိုင္ပါတယ္။ ဥပမာ အခုကြၽန္ေတာ္က ItemTable ထဲမွာ ရွိတဲ႔ record အေရအတြက္ကို
သိခ်င္တယ္ဆိုပါစို႔။ ဒါဆိုရင္ Count ဆိုတ႔ဲ aggregate function ကိုသံုးျပီး ခုလိုေရးရမွာပါ။
Result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 161
ItemCount
Result:
TotalBalance
35
Result:
categoryID TotalBalance
1 16
2 15
3 4
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 162
Result:
categoryID TotalBalance
3 4
Having ကို where လိုမ်ိဳးလဲ column ေတြစစ္ဖို႔အတြက္ သံုးလို႔လည္း ရပါတယ္။ category id 1 ရဲ႕
totalbalance ကိုျပဖိ႔အ
ု တြက္
Result:
categoryID TotalBalance
1 16
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 163
၁) cross join
Cross join ကေတာ့ table ၂ ခုကို comer(,) ခံျပီး join တာပါ။ ဒီလိုမ်ိဳးပါ
result
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 164
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 ကို သံုးျပီး
အခုလို ေရးရပါမယ္။
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 165
result
၂) inner join
Inner join က cross join ကို where ထည့္ထားတဲ႔ ပံုစံန႔ဲ တူပါတယ္။ table ၂ ခုကို join ဖိ႔အ
ု တြက္
On keyword ကိုသံုးပါတယ္။ ဒီလိုမ်ိဳးပါ..
result
inner join နဲ႔ေရးထားတဲ႔အတြက္ item table ထဲက categoryID က category table ထဲမွာ
ရွိမေနဘူးဆိုရင္ အဲဒီ record ကို ထုတ္ျပေပးမွာမဟုတ္ပါဘူး။ ဟုတ္ျပီ တစ္ခါတေလမွာ ကြၽန္ေတာ္က
item table ထဲက အားလံုးထုတ္ျပခ်င္တယ္၊ category table ထဲမွာ ရွိရင္ category name ျပျပီး၊
မရွိရင္ေတာ့ null ပဲေပၚလာခ်င္တယ္ဆိုရင္။ တနည္းအားျဖင့္ table တခုခုကို မူတည္ျပီး
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 166
၃) outer join
Outer join ကို ၂ ပိုင္းထပ္ခြဲနိုင္ပါတယ္။ Left outer join နဲ႔ Right outer join ပါ။ join keyword ရဲ႕
ဘယ္ဖက္က table ကို အကုန္ျပမယ္ဆိုရင္ left join နဲ႔ ေရးရျပီး။ join keyword ရဲ႕ ညာဖက္က
table ကို အကုန္ျပခ်င္ရင္ေတာ့ right join နဲ႔ ေရးပါမယ္။
result
result
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 167
result:
result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 168
2 Stationary Active
3 Electronic Active
result:
select *, (
select sum(balance)
from item
where category.categoryid = item.categoryid
group by item.categoryid
) as totalbalance
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 169
from category
result:
ဒီ query ေလးမွာ အဓိက ထုတ္တာကေတာ့ category table ပဲ၊ totalbalance column အတြက္မွ
ေနာက္ထပ္ query ကိုထပ္ေခၚသြားတာ။ ဒီေနရာမွာ သတိထားရမွာက subquery ထဲကေန
ထြက္လာမယ့္ value က only one row ပဲျဖစ္ရမယ္။ ဒါေၾကာင့္ where category.categoryid =
item.categoryid ဒီအပိုင္းေလး ထည့္ေရးေပးရတယ္။ ဟုတ္ျပီ… ဒါဆိုရင္ ကြၽန္ေတာ္တို႔ subquery
ဘယ္လိုေရးရလဲဆိုတာ နည္းနည္း သိေလာက္ပါျပီ။ အခု အေပၚက query ကိုပဲ ၾကည့္ပါ select
ထဲမွာ ေနာက္ထပ္ select ေတြ ထပ္ေရးေတာ့ query ကိုၾကည့္လိုက္ရင္ ရႈပ္ေနသလို ျဖစ္ေနလိမ့္မယ္။
ဒီအခါမ်ိဳးမွာ ပိုျပီး ရွင္းသြားဖို႔အတြက္ ကြၽန္ေတာ္တို႔ ကိုယ္ပိုင္ function ေတြေဆာက္ျပီး
ေရးလို႔ရပါတယ္။ အိုေက.. function ေတြအေၾကာင္းကို ေနာက္မွ ဆက္ေျပာရေအာင္။
ဒီေန႔ ကြၽန္ေတာ္တို႔ 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
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 170
) as totalbalance
from category
result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 171
ဒီ function မွာ CategoryID ကို parameter လက္ခံျပီး item table ထဲမွာ အဲ့ဒီ categoryID ရဲ႕
totalbalance ကို return ျပန္ပါတယ္။ အိုေက အခုကြၽန္ေတာ္တို႔ ဒီ function ကို create
လုပ္ျပီးသြားျပီဆိုရင္ ကြၽန္ေတာ္တို႔ ရဲ႕ query ေတြမွာ ျပန္ေခၚသံုးလို႔ ရပါျပီ။
result:
Written By SevenLamp
Basic OF C#.Net(Our Notes For Our Youngers) 172
GROUP BY categoryname
)
result:
ခင္မင္စြာျဖင္႔….
Written By SevenLamp