our notes for our youngers

July 31, 2009

basic of SQL Statement (part 4)

Filed under: SQL Commands — Tags: , , , — sevenlamp @ 2:21 PM

ဒီေန႔ 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 :

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 -
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 -
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:

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 -

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

July 30, 2009

basic of SQL Statement (part 3)

Filed under: SQL Commands — Tags: , — sevenlamp @ 6:16 PM

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

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 ၃ ေၾကာင္းပဲ ျပပါေတာ့မယ္။

နက္ဖန္မွဆက္ေရးေတာ့မယ္ဗ်ာ။ ဒီေန႔ ျပန္ရေတာ့မွာမို႔လို႔။

July 29, 2009

basic of SQL Statement (part 2)

Filed under: SQL Commands — Tags: , , — sevenlamp @ 5:14 PM

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 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 -
5 SONY 32” TV 3 900000 1 -
6 Moon 16” Stand Fan 3 20000 3 -

basic of SQL Statement (part 1)

Filed under: SQL Commands — Tags: , — sevenlamp @ 11:10 AM

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 ကိုပဲ သံုးသည္ျဖစ္ေစ 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

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 အတိုင္းေဆာက္လုိက္ေပါ့ ***

July 28, 2009

basic of C# (part 10)

Filed under: Basic of C# — Tags: , , , — sevenlamp @ 5:08 PM

ကြၽန္ေတာ္တို႔ ဒီေန႔ 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 ေတြေရးရင္ေတာ့ ( ) ထဲမွာ ဘာမွ မထည့္ပဲေရးလို႔ ရပါတယ္။
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 အေၾကာင္းကို ေနာက္တပိုစ့္မွာ ေရးေပးမယ္ဗ်ာ။

July 26, 2009

application type in C#

Filed under: C# — Tags: , , , — sevenlamp @ 2:10 PM

ကြၽန္ေတာ္ မေန႔က comment တစ္ခုရတယ္ဗ်။ အဲ့ဒီ comment ထဲမွာ ဒီလိုေရးထားတယ္။

hello ! most of students are not clear about types of application.e.g. window applications , console application , web application , class libiary etc. please could u explain which application is what for and when we should use, and why and how to start ?
Thanks a lot!!!

ကြၽန္ေတာ္တို႔ C# programming language မွာ user ကိုထုတ္ျပတဲ႔ output အမ်ိဳးအစားေပၚမူတည္ျပီး application အမ်ိဳးအစားေတြ ခြဲျခားထားပါတယ္။

user output ကို အရင္တုန္းက C++ နဲ႔ေရးသလိုမ်ိဳး Console screen ( DOS ) ေပၚမွာ ထုတ္ျပမယ္ဆိုရင္ C# console application အမ်ိဳးအစားနဲ႔ ေရးရပါမယ္။ အခုကြၽန္ေတာ္တို႔ ေရးေနတာ အဲ့ဒီ console application ပါ။ Console Application နဲ႔ ေရးမယ္ဆိုရင္ ကြၽန္ေတာ္တို႔ design ဆြဲတဲ႔ေနရာမွာ အနည္းငယ္အခက္အခဲရွိပါတယ္။ C# ရဲ့ basic logic ေတြကို ေျပာခ်င္တာျဖစ္လို႔ ကြၽန္ေတာ္အခု console application နဲ႔ ေျပာေနတာျဖစ္ပါတယ္။
user output ကို အရင္တုန္းက VB6 တို႔ java တို႔နဲ႔ေရးသလိုမ်ိဳး window ေလးေတြနဲ႔ ျပခ်င္တယ္ဆိုရင္ C# window application ကိုေရြးရပါမယ္။ stand-alone computer ေတြအတြက္ project ေတြ ေရးမယ္ဆိုရင္ ကြၽန္ေတာ္တို႔ window application ကို ေရြးခ်ယ္ရပါမယ္။
ဒီလိုမွမဟုတ္ပဲ network application ေတြေရးခ်င္တယ္ဆိုရင္ေတာ့ C# web application ကိုသံုးရမွာပါ။ C# web application ကို ASP.NET လို႔လည္းေခၚပါတယ္။ C# နဲ႔ ေရးတဲ႔ web application ကို ASP.NET with C# ေပါ့။ VB နဲ႔ ေရးရင္ ASP.NET with VB ေပါ့။ နားလည္မွာပါ။

user ကို Output ထုတ္ျပမယ့္ C# application အေနနဲ႔ဆိုရင္ေတာ့ အဲ့ဒီ ( Console, Window & Web ) ဆိုျပီး သံုးမ်ိဳးပဲ ရွိပါတယ္။ ဒါဆိုရင္ Class Library ဆိုတာကေရာ။ ကြၽန္ေတာ္တို႔ C# language နဲ႔ library ေတြ ေရးခ်င္တဲ႔အခါမွာ သံုးပါတယ္။ user ကို output ထုတ္မျပပဲနဲ႔ ေနာင္တခ်ိန္မွာ တျခား program ေတြ မွာ ျပန္သံုးလို႔ ရေအာင္ library အေနနဲ႔ သိမ္းထားခ်င္တယ္ဆိုရင္ Class Library ကိုေရြးရမွာပါ။

ဒါ့အျပင္ ကြၽန္ေတာ္တို႔ C# language ကိုသံုးျပီးေတာ့ Window Service ေတြ Web Service ေတြကိုလည္း ေရးလို႔ ရပါေသးတယ္။ ကြၽန္ေတာ္တို႔ ကြန္ပ်ဴတာထဲမွာ service process တခုအေနနဲ႔ ကြၽန္ေတာ္တို႔ program ကို ရွိေနေစခ်င္တယ္ဆိုရင္ေတာ့ window service အျဖစ္ေရးရမွာ ျဖစ္ပါတယ္။ ကြၽန္ေတာ္တို႔ program ေတြေရးတဲ႔ ေနရာမွာ အသံုးမ်ားတဲ႔ function ေတြကို web server ေပၚမွာ တင္ထားျပီး application ေတြကေန ျပန္ေခၚသံုးခ်င္တယ္ဆိုရင္ေတာ့ Web Service အေနနဲ႔ေရးရမွာပါ။ ဒါ့အျပင္ .NET Framework 3.0 ကေနစျပီး WPF(Window Presentation Foundation) တို႔ WCF(Window Communication Foundation) တို႔ စတဲ႕ application အမ်ိဳးအစားေတြလည္း C# language ကို အသံုးျပဳျပီး ေရးသားနိုင္ျပီျဖစ္ပါတယ္။ .NET Framework 3.5 ကိုသံုးမယ္ဆိုရင္ေတာ့ ကြၽန္ေတာ္တို႔ Office application ေတြ အတြက္ Add-In ေတြကိုပါ C# language ကို အသံုးျပဳေရးသားနိုင္မွာျဖစ္ပါတယ္။ ေနာက္ပိုင္းမွာ C# application တစ္ခုစီကို ရွင္းျပနိုင္ေအာင္ ေလ့လာေနပါတယ္ :D

July 25, 2009

basic of C# (part 9)

Filed under: Basic of C# — Tags: , , , — sevenlamp @ 12:33 PM

အခုကြၽန္ေတာ္တို႔ 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
(T)x
true
false
&
sizeof
Multiplicative *
/
%
Additive +
-
Shift <<
>>
Relational and type testing <
>
<=
>=
is
as
Equality ==
!=
Logical &
|
^
Conditional &&
||
?:
Assignment =
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
??
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

==  !=

&

^

|

&&

||

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 ထြက္တယ္။ မတူဘူးဆိုရင္ေတာ့ ၾကီးတဲ႔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 ၾကည့္လိုက္ရင္ သိသြားမွာပါ။ ဒီေန႔ေတာ့ ဒီေလာက္နဲ႔ပဲ နားလိုက္ရေအာင္ဗ်ာ။ မရွင္းတာေမးခ်င္တာေတြအားလံုး ေကာမန္႔ ေပးခဲ႔ၾကပါေနာ္။

July 24, 2009

basic of C# (part 8)

Filed under: Basic of C# — Tags: , , , , — sevenlamp @ 5:03 PM

မေန႔က Program ေလးနဲ႔ပဲ ဆက္ေျပာရေအာင္ဗ်ာ။ အဲ့ဒီprogram ေလးမွာ user ဆီကေန number value တစ္ခုေတာင္းတယ္။ square တန္ဖိုးကို output ထုတ္ျပတယ္။ အိုေက။ ဒါကို user ကေန သတိမထားမိပဲ 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 အမ်ိဳးအစားျဖစ္တယ္ဗ်။

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{ နဲ႔ } ၾကားမွာ ေရးရပါမယ္။

ဥပမာ…

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;
}
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);
            Console.Write("\npress enter to close...");
            Console.Read();
        }
    }

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

July 23, 2009

basic of C# (part 7)

Filed under: Basic of C# — Tags: , , — sevenlamp @ 5:22 PM

အခု ကြၽန္ေတာ္တို႔ 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 ျဖစ္သြားမယ္။ ဒါဆုိရင္ ကြၽန္ေတာ္တို႔ 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 ၂ ခုကို သံုးထားပါတယ္။ ဒါေၾကာင့္ အေပၚဆံုးမွာ ဒီလိုေလးေရးေပးလိုက္တယ္….

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 6)

Filed under: Basic of C# — Tags: , , — sevenlamp @ 3:49 PM

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 အေၾကာင္းကို သိဖို႔လိုလာပါျပီ။ အဲ့ဒီလို ေျပာင္းတဲ႔ ေနရာမွာ 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();

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

Older Posts »

Theme: Silver is the New Black. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.