PDA

View Full Version : ADO .NET in C#



green leaf
19-02-2010, 01:47 PM
က်ေနာ္တုိ ့ ADO .NET အေၾကာင္း ဒီေနရာေလးမွာ ေဆြးေႏြးၾကရေအာင္ဗ်ာ.... က်ေနာ္လဲ ၀င္ေဆြးေႏြးမွာပါ.. ဒါေပမဲ့ ေလာေလာဆယ္ ဘယ္ကစရမွန္း မသိဘူး... :confused: အဆင္ေျပသလိုပဲ စၾကတာေပါ့ဗ်ာ.. :1: ခုမွ စေလ့လာမဲ့သူေတြအတြက္ technoloy ကုိ အရင္ေဆြးေႏြးဖို ့မသင့္ဘူးထင္တယ္.. က်ေနာ္ကလဲ ကုိယ္တုိင္သာ နားလည္တာ.. သူတပါးကုိ ရွင္းျပဖုိ ့က အဲေလာက္ထိ အရည္အခ်င္း ရွိတာ မဟုတ္ဘူးရယ္.. က်ေနာ္ေတာ့ က်ေနာ္ေလ့လာဖူးတဲ့ samples ေလးေတြ အရင္ တင္ေပးလုိက္ရင္ ေကာင္းမလားလုိ ့.. အစ္ကုိ အစ္မတုိ ့ေကာ ဘယ္လုိ သေဘာရလဲ.. ဒါဆုိ မသိတဲ့သူေတြလဲ ADO ဒုိးနပ္ ဆုိတာ စားစရာလို ့မျမင္ေလာက္ေတာ့ဘူးေပါ့ :cool: က်ေနာ္ေလ့လာဖူးတဲ့ sample တစ္ခု၊ ႏွစ္ခုကို တတ္နုိင္သေလာက္ အရင္ ရွင္းျပၾကည့္ပါအံုးမယ္.. သိတဲ့ တတ္တဲ့ အစ္ကုိ အစ္မတုိ ့လဲ က်ေနာ့္လုိ တတ္ေယာင္ကားေလးကို ဒီအတုိင္းၾကီး မ်က္ႏွာလြဲ ခဲပစ္ေတာ့ မလုပ္ၾကနဲ ့ အံုးဗ်ေနာ္.. အမွားအယြင္းေလးေတြကုိ ျပင္ေပးၾကပါအံုး.. ၀င္ေဆြးေႏြးၾကပါအံုး... ကဲ စရေအာင္


// ဖုိရမ္ ရံုးအဖြဲ ့သို ့
/* က်ေနာ္ ၾကည့္သေလာက္ေတာ့ ADO.NET နဲ ့ပါတ္သတ္လုိ ့ တင္ထားတဲ့ Thread မေတြ ့လုိ ့ အသစ္လုပ္လုိက္တာပါ။ ဒါေပမဲ့ က်ေနာ္က ဒီေန ့မွ ၀င္လာတဲ့ member အသစ္ဆုိေတာ့ ဘယ္ဟာ ဘယ္ေနရာရွိမွန္း ေသခ်ာ မသိေသးဘူး။ တကယ္လုိ ့ ရွိၿပီးသားဆုိရင္ က်ေနာ့္ ပုိ ့စ္ေတြ ေရႊ ့လုိ ့ရေအာင္ အသိေပးပါခင္ဗ်ာ။ */

green leaf
19-02-2010, 01:49 PM
ADO.NET

ADO.NET ဆုိတာ data and data services ေတြ access လုပ္နုိင္ဖို ့အတြက္ programmers ေတြ အသံုးျပဳၾကတဲ့ technology တစ္ခုပါပဲ။ ADO.NET က Microsoft .NET Framework ထဲက base class library (FCL) ထဲက အစိတ္အပုိင္း တစ္ခုပါပဲ။ သူ ့ကုိ မ်ားေသာအားျဖင့္ DBMS database systems ထဲမွာ storage လုပ္ထားတဲ့ data ေတြကုိ access လုပ္ဖုိ ့၊ modify လုပ္ဖုိ ့အတြက္ programmers ေတြက အသံုးျပဳၾကပါတယ္။ ဥပမာ Microsoft Access လုိ database system လုိမ်ိဳးေပါ့...

ADO.NET ဆုိတာ Microsoft SQL Server လုိမ်ိဳး Oracle လုိမ်ိဳး data sources ေတြကုိ access လုပ္နုိင္တဲ့ technolgy ပါပဲ။ သူ ့မွာ database တစ္ခုကုိ connect လုပ္ဖို ့အတြက္ data provider ေတြပါမယ္၊ execute လုပ္ဖို ့အတြက္ commands ေတြပါမယ္။ ADO.NET ကုိ C# အသံုးျပဳၿပီးေတာ့ Microsoft Access, Microsoft SQL Server, MySQL လုိ open-source ေတြနဲ ့ Oracle တုိ ့နဲ ့ ခ်ိတ္ဆက္ အသံုးျပဳလုိ ့ရပါတယ္။

ဒါက ADO.NET အတြက္ brief ေပါ့ဗ်ာ.. ေနာက္ပိုင္းမွာ သူ ့ရဲ ့ technology ကုိ က်ေနာ္သိသေလာက္ ဆက္လက္ၿပီး ေဆြးေႏြးပါအံုးမယ္။ ေလာေလာဆယ္ code ေလးေတြ ေရးၾကည့္ရေအာင္.....

ADO = ActiveX Data Objects


Thanks for reading my posts!!
see u around, buddy!!
have a nice day!!

green leaf
19-02-2010, 05:03 PM
How to Bind data to Windows Forms DataGridView Control

DataGridView Control
SQL Server မွာ ျဖစ္ျဖစ္၊ Access မွာျဖစ္ျဖစ္ က်ေနာ္တုိ ့ database တစ္ခု ဆြဲလုိက္တယ္ေပါ့။ အဲဒါဆုိ tables ေတြ ပါလာၿပီ။ DataGridView Control ကုိ သံုးလိုက္ျခင္းအားျဖင့္ အဲဒီ့ data sources ေတြက data ေတြကုိ display လုပ္လုိ ့ရမယ္။ modify လုပ္လုိ ့ရပါမယ္ ။ အဲေတာ့ ဘယ္လုိ လုပ္မလဲ။

ConnectionString: ပထမဆံုး connection stirng တစ္ခု အရင္ရွိရမယ္။ ဆုိလုိတာက Database က ဘယ္ကလဲ။ Microsoft Access ကလား၊ SQL Server ကလား၊ Oracle ကလား၊ MySQL ကလား စသျဖင့္ေပါ့။ အဲဒီ့လုိ Data Provider ေတြနဲ ့ပါတ္သတ္တဲ့ string တစ္ခုရွိမယ္။

DataAdapter: သူက ဘာလုပ္ေပးလဲဆုိေတာ့ Database ထဲက data ေတြကုိ DataSet ထဲကုိ ထည့္သြင္းတဲ့ေနရာမွာ သူက ၾကားခံပဲ။ တံတားတစ္ခုလိုေပါ့။ Database နဲ့ DataSet အၾကား data ေတြကို retrieve လုပ္ေပးမယ္၊ save လုပ္ေပးမယ္။ သူ ့မွာ Fill() ဆုိတဲ့ method နဲ ့ data source ထဲက data ေတြနဲ ့ dataSet ထဲက data ေတြကုိ match လုပ္ေပးမယ္။ ၿပီးရင္ DataSet ထဲမွာ data ေတြကုိ အသစ္ထပ္ထည့္တာ၊ ဖ်က္ပစ္တာ စသျဖင့္ လုပ္လုိက္ရင္လဲ သူက Data source မွာ ျပန္ၿပီး အဲလုိျဖစ္ေအာင္ လုပ္ဖုိ ့အတြက္ Update() ဆုိတဲ့ method ရွိတယ္၊ စသျဖင့္ အဲဒါေတြကုိ dataAdapter က လုပ္ေဆာင္ေပးတယ္။ အဲဒီ့မွာ data provider အမ်ိဳးမ်ိဳးအလုိက္ SQL Server ဆုိရင္ SqlDataAdapter ၊ OLEDB ဆုိရင္ OLeDbDataAdapter ၊ Oracle နဲ ့ဆုိရင္ Oracle ဘာညာေပါ့ စသျဖင့္ အဲလုိေတာ့ keywords ေတြ ကြဲမယ္။

DataSet
သူက ADO.NET ရဲ ့ အဓိက အစိတ္အပိုင္းတစ္ခုပဲ။ သူ ့မွာ Data Table Objects ေတြ အမ်ားၾကီးပါတယ္။ database မွာ tables ေတြ အခ်င္းခ်င္း connect လုပ္သလုိ ADO.NET မွာ DataTable ေတြ connect လုပ္လုိ့ ရေအာင္ သူက လုပ္ေပးနုိင္တယ္။ ေအာက္မွာ သူလုပ္ေဆာင္ပံု အခ်ိဳ ့ကုိ ၾကည့္ၾကည့္ပါအံုး ..


Build and fill each DataTable in a DataSet with data from a data source using a DataAdapter.



Change the data in individual DataTable objects by adding, updating, or deleting DataRow objects.



Invoke the GetChanges method to create a second DataSet that features only the changes to the data.



Call the Update method of the DataAdapter, passing the second DataSet as an argument.



Invoke the Merge method to merge the changes from the second DataSet into the first.



Invoke the AcceptChanges on the DataSet. Alternatively, invoke RejectChanges to cancel the changes.



CommandBuilder
ခင္ဗ်ားက SQL သံုးမယ္ဆုိရင္ေတာ့ SqlCommandBuilder ေပါ့၊ OLEDB ဆုိရင္ OleDbCommandBuilder .. data provider အလုိက္ keyword ေတြ ကြဲတာေတာ့ ထပ္မေျပာေတာ့ဘူးဗ်ာ.. သူက ဘာလုပ္ေပးလဲဆုိေတာ့ dataAdapter က DataSet ထဲက SQl commands ေတြကို တုိက္ရိုက္ၾကီး Update မလုပ္ေပးနုိင္ဘူး။ sql သံုးတယ္ပဲ ထားလုိက္ပါေတာ့.. က်ေနာ္တုိ ့ Database ထဲက data တစ္ခုကို SQlCommand သံုးၿပီး ဆြဲထုတ္လုိက္တယ္ ဆုိပါေတာ့ .. ဥပမာ ေက်ာင္းသူ ေက်ာင္းသားနဲ ့သက္ဆိုင္တဲ့ database table ကပဲ ထားလုိက္ပါေတာ့.. အဲကေန က်ေနာ္တုိ့ လုိခ်င္တဲ့ ေက်ာင္းသူကုိ ဆြဲထုတ္မယ္။ အသက္ ၂၀ ျဖစ္ရမယ္၊ ေမာ္လျမိဳင္သူ ျဖစ္ရမယ္၊ အပ်ိဳျဖစ္ရမယ္၊ ဘာညာ သာရေကာ ေပါ့။ အဲဒီ့ selected command ကုိ ျပန္ၿပီး insert, update, delete လုပ္မယ္ဆုိရင္ Command Builder ကုိ အသံုးျပဳရမယ္။

ကဲ အစကေန ရွင္းရွင္းေလး ျပန္ေျပာျပမယ္။
Database ထဲက Data ေတြကို DataSet ထဲထည့္၊ DataSet ထဲကေန Bindingsource နဲ ့ Windows Controls (DataGridView) ေတြေပၚ တင္။ ေနာက္ဆံုး က်ေနာ္တုိ ့ Database ထဲကုိ လွမ္းၿပီး insert, update, delete စသျဖင့္ လွမ္းလုပ္လုိ ့ရသြားၿပီေပါ့ဗ်ာ။

Microsoft Visual Studio ....
Console Application မွာ ေအာက္က code ေလး ေရးၿပီးေတာ့ စမ္းၾကည့္ပါ။



using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Drawing;

public class Form1 : System.Windows.Forms.Form
{
private DataGridView dataGridView1 = new DataGridView();
private BindingSource bindingSource1 = new BindingSource();
private SqlDataAdapter dataAdapter = new SqlDataAdapter();
private Button reloadButton = new Button();
private Button submitButton = new Button();

[STAThreadAttribute()]
public static void Main()
{
Application.Run(new Form1());
}

public Form1()
{
dataGridView1.Dock = DockStyle.Fill;

reloadButton.Text = "reload";
reloadButton.BackColor = Color.Green;
submitButton.Text = "submit";
submitButton.BackColor = Color.Blue;
reloadButton.Click += new System.EventHandler(reloadButton_Click);
submitButton.Click += new System.EventHandler(submitButton_Click);

FlowLayoutPanel panel = new FlowLayoutPanel();
panel.Dock = DockStyle.Top;
panel.AutoSize = true;
panel.Controls.AddRange(new Control[] { reloadButton, submitButton });

this.Controls.AddRange(new Control[] { dataGridView1, panel });
this.Load += new System.EventHandler(Form1_Load);
this.Text = "DataGridView databinding and updating demo";
}

private void Form1_Load(object sender, System.EventArgs e)
{
// Bind the DataGridView to the BindingSource
// and load the data from the database.
dataGridView1.DataSource = bindingSource1;
GetData("select * from Customers");
}

private void GetData(string selectCommand)
{
try
{
String connectionString =
"Integrated Security=SSPI;" +
"server=(local)\\SQLEXPRESS; Database=Northwind;";

dataAdapter = new SqlDataAdapter(selectCommand, connectionString);

// to update the database
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

// Populate a new data table and bind it to the BindingSource.
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
dataAdapter.Fill(table);
bindingSource1.DataSource = table;

// Resize the DataGridView columns to fit the newly loaded content.
dataGridView1.AutoResizeColumns(
DataGridViewAutoSizeColumnsMode.AllCellsExceptHead er);
}
catch (SqlException)
{
MessageBox.Show("To run this example, replace the value of the " +
"connectionString variable with a connection string that is " +
"valid for your system.");
}
}

private void reloadButton_Click(object sender, System.EventArgs e)
{
// Reload the data from the database.
GetData(dataAdapter.SelectCommand.CommandText);
}

private void submitButton_Click(object sender, System.EventArgs e)
{
// Update the database with the user's changes.
dataAdapter.Update((DataTable)bindingSource1.DataS ource);
}
}
Output
http://www.AceLayouts.com/uploads/images/2010-02-19/stE3DSPLpP.jpg
Fig1_1

scroll bar ေအာက္ဆံုးထိ ဆြဲခ်လိုက္ရင္ ဘယ္ဘက္မွာ sterisk ေလးနဲ ့ row တစ္ခုေအာက္ဆံုးမွာ ေပၚေနလိမ့္မယ္။ အဲဒီ့မွာ က်ေနာ္တုိ ့ ထည့္ထပ္ခ်င္တဲ့ data ထပ္ထည့္လို ့၇တယ္။ ၿပီးရင္ submit နဲ ့ reload button ေတြကို click လုိက္ပါ။

Fig1_2 မွာ က်ေနာ္ data အသစ္ သံုးခု ထပ္ထည့္ပါတယ္။
Fig1_3 မွာ က်ေနာ္ ထည့္ထားတဲ့ data ကုိ ျပထားပါတယ္။

http://www.AceLayouts.com/uploads/images/2010-02-19/oc5hjtxZFX.jpg
Fig1_2

http://www.AceLayouts.com/uploads/images/2010-02-19/GuuWENf2IV.jpg
Fig1_3

How To Works
က်ေနာ္တို ့က SQL Server ကုိ အသံုးျပဳမွာျဖစ္တဲ့အတြက္ namespace ကုိ System.Data.SqlClient ေပးဖို ့လုိပါမယ္။


String connectionString =
"Integrated Security=SSPI;" +
"server=(local)\\SQLEXPRESS; Database=Northwind;";
Visual Studio တင္ရင္ Microsoft SQL Server Database Engine ပါပါတယ္။ အဲဒီ့အတြက္ သူ ့ကုိ SSMSEE (Microsoft SQL Server Management Studio Express Edition) တင္ဖို ့လုိပါမယ္။
http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en
အဲဒီ့မွာ SQLServer2005_SSMSEE.msi file ကုိ download လုပ္ၿပီး တင္လုိက္ပါ။

ဒီ sample က Northwind ကို အသံုးျပဳထားတာပါ။ စက္ထဲမွာ Northwind.mdf ရွိေနဖို ့လိုပါမယ္။
http://microsoft-sql-server-2000-sample-databas.software.informer.com/
အဲဒီ့မွာ download လုပ္ၿပီး တင္လုိက္ပါ။ အဲဒါဆုိ run လို ့ရပါၿပီ။



/* ဖတ္ရတဲ့သူေတြေတာ့ နားလည္ရဲ ့လား မသိဘူး။ က်ေနာ္ေတာ့ ဒီပုိ ့စ္ေလးေရးတာ (၃)နာရီေက်ာ္ေက်ာ္ ၾကာသြားတယ္။ ကိုယ္မနုိင္တဲ့ဟာကုိ သြားလုပ္မိသလိုျဖစ္တာ။ ADO.NET ကလဲ technology တစ္ခုသပ္သပ္ဆုိေတာ့ သူကလဲ အက်ယ္ၾကီးပဲ။ ေနာက္ထပ္ သူနဲ ့ ပါတ္သတ္တဲ့ DataReader, Exception, Parameter ေတြ အမ်ားၾကီးပဲ ေျပာဖုိ ့က်န္ေသးတယ္။ အားမရဘူးဗ်ာ။ ေနာက္မွ ေသခ်ာ လိုက္ဖတ္ၿပီး ေရးအံုးမယ္။ ခုေတာ့ sorry ပါဗ်ာ။ ဒီေလာက္ပဲ ရွင္းျပနုိင္လုိ ့။ မွားယြင္းေနတာရွိရင္ ျပင္ေပးသြားၾကပါအံုး။ လုိအပ္ေနတာေတြ ရွိရင္ေကာေပါ့ .. သိတဲ့တတ္တဲ့ အစ္ကုိေတြ အစ္မေတြ ညီေတြ ညီမေတြ ... */

ok!!
Thanks for reading my posts!!
See u around, buddy!!
Have a nice day!!

လူပ်ိဳႀကီး
20-02-2010, 09:08 AM
အေဖာ္မရွိဘူး ျဖစ္ေနမွာစိုးလို႔ ဝင္ေျပာေပးမယ္ ဘယ္ဟာေတြ ေဆြးေႏြးေပးရမလဲေျပာ။ ေျပာမယ္သာေျပာရတယ္ ကၽြန္ေတာ္က အဲဒါေတြကို မဖတ္တာၾကာလို႔ ေမ့ေနတာကိုၾကာပါၿပီ။ ေဆြးေနြးမယ္ ျငင္းခုန္မယ္ဆိုရင္ ကူညီႏိုင္ပါတယ္ :P အျငင္းကေတာ့ အင္မတန္သန္တယ္ခင္ဗ်။ အခုေရးထားေတြ ၾကည့္လိုက္ေတာ့ စာသင္သလိုျဖစ္ေနတယ္ သေဘာတူမယ္ဆိုရင္ အဲဒါေတြကို edu ကိုေရႊ႕ေပးမယ္ ဖိုရမ္ထဲမွာက ေနာက္ဆိုရင္ ဘယ္နားေရးမိမွန္းမသိဘူး ေပ်ာက္သြားလိမ့္မယ္။ ဒီေတာ့ edu မွာ Post ေတြတင္ၿပီးေတာ့ ဖိုရမ္မွာက အဲဒီ့ဘက္က နားမလည္တာကို ေမးမယ္ဆိုရင္ ပိုအဆင္ေျပမယ္ထင္တယ္ သေဘာတူမတူ တစ္ခ်က္ျပန္ေျပာေပးပါ။

green leaf
20-02-2010, 09:53 AM
DataGridView ဆုိတာ database tables ေတြကုိ control ေပၚ data bind ဖုိ ့အတြက္ အသံုးျပဳတာေတာ့ အထက္က post မွာကတည္းက နားလည္ခဲ့ၿပီ ထင္ပါတယ္။ အရင္ post မွာက sql keywords ေတြနဲ ့ အသံုးျပဳခဲ့ပါတယ္။ အခုက အရင္ post မွာ ေသခ်ာ မရွင္းလင္းခဲ့တာကုိ တတ္နုိင္သမွ် နားလည္သေဘာေပါက္ ေအာင္ က်ေနာ္ ၾကိဳးစားေပးပါမယ္။ ဒီတစ္ခါ OleDb က support ေပးတဲ့ keywords ေတြနဲ ့ အသံုးျပဳပါမယ္။ OleDb ဆုိတာ ဘာလဲ ? အၾကမ္းဖ်ဥ္း သိရေအာင္ ေအာက္က Definition ကုိ တစ္ခ်က္ ဖတ္ၾကည့္ပါ။


What is OLE DB ??
(Object Linking and Embedding, Database, sometimes written as OLEDB or OLE-DB)
OLE DB is Microsoft's strategic low-level application program interface API for access to different data sources. OLE DB includes not only the Structured Query Language (SQL) capabilities of the Microsoft-sponsored standard data interface Open Database Connectivity (ODBC) but also includes access to data other than SQL data.

User Interface အတြက္ ေအာက္ကပံုအတုိင္း က်ေနာ္ ဖန္တီးလိုက္ပါတယ္။

http://img3.imageshack.us/img3/3118/oledb3.jpg

က်ေနာ္ကေတာ့ Windows Forms Application ကုိ သံုးၿပီး ဆြဲထားတာ မဟုတ္ပါဘူး။ Console Application နဲ ့ပဲ ဆြဲထားတာပါ။ Windows Forms က လြယ္ကူျမန္ဆန္ေပမဲ့ ေလ့လာေနဆဲသူေတြအတြက္ Windows Controls ေတြရ ဲ့ သေဘာတရားေတြ၊ property ေတြကုိ သိေနဖို ့အတြက္ Console Application နဲ ့ UI ဆြဲတာဟာ အေကာင္းဆံုးျဖစ္မယ္လုိ ့က်ေနာ္ထင္ပါတယ္။ ခင္ဗ်ားတုိ့လဲ အဲလုိလိုက္လုပ္ဖို ့ က်ေနာ္ တုိက္တြန္းပါတယ္။ ေနာက္ ကြ်မ္းက်င္သြားေတာ့မွ Windows Forms န ဲ့ ဆြဲေပ့ါဗ်ာ။

TextBox property : Mutiline -> true
btnQuery property : Text -> Query, Name -> btnQuery
btnUpdate property : Text -> Update, Name -> btnUpdate


က်ေနာ္တုိ ့က OleDb ကုိ Microsoft Access database နဲ ့ ခ်ိတ္ဆက္ဖို ့ အသံုးျပဳတာ ျဖစ္ပါတယ္။ ဒီေတာ့ Microsoft Access database ကုိ ခ်ိတ္ဆက္ဖို ့အတြက္ OleDb classes ေတြကုိ အသံုးျပဳရမယ္ဆုိတဲ့ သေဘာတရားေပါ့။ ဟုတ္ရဲ ့လား။ OleDb အတြက္ namespace က System.Data.OleDb ျဖစ္ပါတယ္။

program က Microsoft Access database နဲ ့ ခ်ိတ္ဆက္ေပးထားတယ္။ data ေတြကုိ ရွာဖို ့ရယ္၊ ျပင္ခ်င္တဲ့ data ေတြရွိရင္ ျပင္နုိင္ေအာင္ရယ္ Query Button တစ္ခု၊ Update Button တစ္ခု၊ Button ႏွစ္ခု ထည့္ထားပါတယ္။ TextBox မွာက user အေနနဲ ့ သူလုိခ်င္တဲ့ data ကုိ သူ ့ဘာသာ Command ရုိက္ၿပီး ရွာနုိင္ေအာင္ စီစဥ္ေပးထားတယ္။ Microsoft Access Database ကုိ ကုိယ့္ဘာသာ ေရးခ်င္လဲ ေရး။ .mdb extension ျဖစ္ဖို ့လုိပါမယ္။ ဒါမွမဟုတ္ Northwind က support ေပးထားတဲ့ Northwind.mdb database ကုိ သံုးခ်င္သံုး။ program မွာေတာ့ Northwind ကုိ သံုးၿပီး စမ္းျပထားပါတယ္။ Northwind.mdb အတြက္ ဒီမွာ (http://www.megaupload.com/?d=JGN4UC6S) ေဒါင္းပါ။

ကဲ program ကုိ ၾကည့္္ရေအာင္။ user က သူလုိခ်င္တဲ့ Command ကုိ TextBox မွာ ရိုက္လုိက္ၿပီးရင္ သူက ရွာဖို ့အတြက္ဆုိရင္ Query Button ကုိ click မယ္။ ျပင္ဖို ့အတြက္ဆုိရင္ Update Button ကုိ click မယ္။ အဲေတာ့ ဒီ Button ႏွစ္ခုရဲ ့အလုပ္တြ ၾကည့္ရေအာင္။ ပထမဆံုး Query Button ကုိ ၾကည့္မယ္။

ပထမဆံုး connectionString တစ္ခု ေဆာက္ပါမယ္။ ဒီတစ္ခါ provider က Access database ျဖစ္တဲ့အတြက္ Microsoft ျဖစ္ပါတယ္။ data source က Northwind database ကုိ အသံုးျပဳထားပါတယ္။ ကိုယ့္ဘာသာ ေရးလဲရပါတယ္။ .mdb extension ျဖစ္ရပါမယ္။ ဒါေပမဲ့ ျပည့္ျပည့္စံုစံု လုိခ်င္ရင္ေတာ့ Northwind.mdb ကုိ ဒီမွာ (http://www.megaupload.com/?d=JGN4UC6S) ေဒါင္းၿပီး အသံုးျပဳပါ။ Northwind.mdb ကုိ က်ေနာ္က E (drive letter) ထဲမွာ ထည့္ထားလုိ ့E:\Northwind.mdb ျဖစ္ေနတာပါ။ ခင္ဗ်ားအေနနဲ ့ Northwind ရွိတဲ့ path ကုိ ေျပာငး္ေပးပါ။ OleDbConnection class နဲ ့ connection ေဆာက္လုိက္ပါတယ္။ ၿပီးရင္ user အေနနဲ ့ သူ လုိခ်င္တဲ့ Command ရုိက္မွာျဖစ္တဲ့အတြက္ OleDbCommand class ထဲက CreateCommand() method ကုိ အသံုးျပဳ ရပါမယ္။

user အေနနဲ ့ Command မရုိက္ခင္၊ ဒါမွမဟုတ္ တစ္ခုရိုက္ၿပီးလုိ ့ ေနာက္တစ္ခု မရိုက္ခင္မွာ အဆင္သင့္ျဖစ္ေန ေအာင္ dataGridView ကုိ clean ျဖစ္ေနဖို ့လုိပါမယ္။ DatSet ကုိ fresh ေပးဖို ့ လိုပါမယ္။ ဒီအတြက္ dataGridView1.DataSource ကုိ null ေပးထားပါတယ္။ DataSet ကုိ DataSet() method သံုးၿပီး refresh ေပးထားပါတယ္။ ၿပီးရင္ connection ကုိ ဖြင့္ပါၿပီ။ user က Command ကုိ textBox မွာ ရုိက္မွာျဖစ္တဲ့အတြက္ အဲထဲက string ကုိ ခုန ဖန္တီးထားတဲ့ OleDbCommand class ထဲက Createcommand() method ထဲက CommandText ထဲကုိ ထည့္လုိက္ပါၿပီ။ ၿပီးရင္ DataAdapter တစ္ခုေဆာက္ၿပီး Fill() method အသံုးျပဳၿပီး DataSet ထဲကုိ data ေတြ ထည့္လုိက္ပါတယ္။ ေနာက္ဆံုး DataSet ထဲက data ေတြကုိ dataGridView ထဲကုိ ထည့္လုိက္ပါတယ္။

အဲဒီမွာ တစ္ခု သတိထားမိဖို ့ လုိတာက ds.Tables[0] ဆုိတာ က်ေနာ္တုိ ့လက္ရွိ data table တစ္ခုတည္းကုိ အသံုးျပဳတယ္လုိ ့ဆုိလိုတာပါ။ zero က index no ကုိ ျပတာျဖစ္ပါတယ္။ ဆုိေတာ့ table ႏွစ္ခုဆုိရင္ tables[1] လုိ ့ျဖစ္ပါမယ္။ ၿပီးရင္ ေနာက္ထပ္ သတိထားရမွာက connection တစ္ခုကို ဖြင့္ၿပီးရင္ ျပန္ပိတ္ဖုိ ့မေမ့ပါနဲ ့။ အကယ္၍ မပိတ္ခဲ့ဘူးဆုိရင္ တျခားတစ္ေနရာမွာ ဒီ data source ကုိပဲ ျပန္အသံုးျပဳဖုိ ့ရွိမယ္ဆုိ conflict ျဖစ္ပါတယ္။ ဒီေတာ့ သံုးၿပီးရင္ Close() method နဲ ့ ျပန္ပိတ္ဖုိ ့မေမ့ပါနဲ ့။



private void btnQuery_Click(object sender, EventArgs e)
{
String connString =
@"Provider=Microsoft.JET.OLEDB.4.0; data source=E:\Northwind.mdb";
OleDbConnection conn = new OleDbConnection(connString);
OleDbCommand cmd = conn.CreateCommand();

dataGridView1.DataSource = null;
DataSet ds = new DataSet();
conn.Open();
cmd.CommandText = textBox1.Text;
OleDbDataAdapter oleDbda = new OleDbDataAdapter(cmd);
oleDbda.Fill(ds);
conn.Close();
dataGridView1.DataSource = ds.Tables[0];
}
Update Button အတြက္ေတာ့ တစ္ခုပဲ ေျပာစရာ ရွိပါတယ္။ သူက Command class ထဲက ExecuteNonQuery() method ကုိ အသံုးျပဳထားပါတယ္။ ExecuteNonQuery() method က records ေတြကုိ update and delete လုပ္ေပးနုိင္ပါတယ္။ ၿပီးေတာ့ အဲဒီ့ modify လုပ္လိုက္တဲ့ rows အေရအတြက္ ဘယ္ႏွခု ရွိလဲဆုိတာလဲ return လုပ္ေပးနုိင္ပါတယ္။ ဒီအတြက္ affected ဆုိတဲ့ variable ကုိ int data type ထားၿပီး ေအာက္မွာ row ဘယ္ႏွခု update လုပ္သြားလဲဆုိတာ MessageBox နဲ ့ display လုပ္ထားပါတယ္။



private void btnUpdate_Click(object sender, EventArgs e)
{
String connString =
@"Provider=Microsoft.JET.OLEDB.4.0; data source=E:\Northwind.mdb";
OleDbConnection conn = new OleDbConnection(connString);
OleDbCommand cmd = conn.CreateCommand();

dataGridView1.DataSource = null;
conn.Open();
cmd.CommandText = textBox1.Text;

int affected = cmd.ExecuteNonQuery();
MessageBox.Show("There were " + affected + " rows affected");
conn.Close();
Output
ပံုေတြကုိ ေသခ်ာ ေလ့လာၾကည့္ပါ။

http://img705.imageshack.us/img705/1536/oledb4.jpg

http://img230.imageshack.us/img230/2945/oledb5.jpg

http://img186.imageshack.us/img186/5425/oledb6.jpg

ဒီေလာက္ဆုိ ျပည့္စံုၿပီ ထင္ပါတယ္။ ကုိယ့္ဘာသာ စမ္းၾကည့္လုိက္ပါ။ လုိအပ္တာရွိရင္လဲ ေျပာေပါ့။
မူရင္းလင့္ခ္ -- http://en.csharp-online.net/Working_with_Data%E2%80%94Using_the_DataGridView





ok!!
Thanks for reading my posts!!
See u around, buddy!!
Have a nice day !

green leaf
20-02-2010, 10:02 AM
အေဖာ္မရွိဘူး ျဖစ္ေနမွာစိုးလို႔ ဝင္ေျပာေပးမယ္ ဘယ္ဟာေတြ ေဆြးေႏြးေပးရမလဲေျပာ။ ေျပာမယ္သာေျပာရတယ္ ကၽြန္ေတာ္က အဲဒါေတြကို မဖတ္တာၾကာလို႔ ေမ့ေနတာကိုၾကာပါၿပီ။ ေဆြးေနြးမယ္ ျငင္းခုန္မယ္ဆိုရင္ ကူညီႏိုင္ပါတယ္ :P အျငင္းကေတာ့ အင္မတန္သန္တယ္ခင္ဗ်။ အခုေရးထားေတြ ၾကည့္လိုက္ေတာ့ စာသင္သလိုျဖစ္ေနတယ္ သေဘာတူမယ္ဆိုရင္ အဲဒါေတြကို edu ကိုေရႊ႕ေပးမယ္ ဖိုရမ္ထဲမွာက ေနာက္ဆိုရင္ ဘယ္နားေရးမိမွန္းမသိဘူး ေပ်ာက္သြားလိမ့္မယ္။ ဒီေတာ့ edu မွာ Post ေတြတင္ၿပီးေတာ့ ဖိုရမ္မွာက အဲဒီ့ဘက္က နားမလည္တာကို ေမးမယ္ဆိုရင္ ပိုအဆင္ေျပမယ္ထင္တယ္ သေဘာတူမတူ တစ္ခ်က္ျပန္ေျပာေပးပါ။


ဟုတ္ကဲ့ခင္ဗ်ာ.. ဖိုိရမ္အုပ္ခ်ဴပ္သူေတြ ျဖစ္သင့္တယ္ထင္လို ့ စီစဥ္ေပးတာကို က်ေနာ့္အေနနဲ ့ ျငင္းစရာ မရွိပါဘူးခင္ဗ်ာ... အားေပးတဲ့အတြက္လဲ ၀မ္းသာပါတယ္။ ေက်းဇူးပါပဲခင္ဗ်ာ။ က်ေနာ့္အေနနဲ ့ေတာ့ ဘယ္ေနရာမွာပဲ ေရးရ၊ ေရးရ အေရးမၾကီးပါဘူး။ လို္အပ္တဲ့ တစ္ေယာက္ေယာက္ ရသြားမယ္ဆုိ ေက်နပ္တာပါပဲ။ စာသင္သလုိ ျဖစ္ေနတယ္ဆုိတဲ့အတြက္ေတာ့ :P .. က်ေနာ္လဲ မသိဘူး။ ေဘးလူေတြကေတာ့ ျမင္မွာေပါ့။ က်ေနာ္ကေတာ့ က်ေနာ္ ေရးတတ္သလို ေရးလုိက္တာပါပဲဗ်ာ။ စာေရးတာဆုိလုိ ့ ဒီလုိမ်ိဳး ေရးဖူးတာပဲ ရွိတယ္။ တျခားဟာေတြ ေရးဖူးတာ မရွိေတာ့ စာအသြားအလာ သိပ္မတတ္ဘူး ျဖစ္ေနမယ္ထင္တယ္။ က်ေနာ္က မသိေသးတဲ့သူေတြ အေသးစိတ္ ရေစခ်င္တာပါ။ ၀မ္းသာရမွာလား၊ ၀မ္းနည္းရမွာလား ေတာ့ ေသခ်ာမသိဘူး။ ဆရာေလသံေပါက္ေနရင္ေတာ့ ေနာက္ေသခ်ာေလ့လာၿပီး ကေလးေတြကုိ သင္ေပးအံုးမွပါ။ :D ဘာပဲေျပာေျပာ ဂရုတစိုက္ ၾကည့္ေပးေဖာ္ရတဲ့အတြက္ ၀မ္းသာပါတယ္။ member ၀င္ထားတာကလဲ ၂ ရက္လားပဲ ဖုိရမ္အေၾကာင္းေတာ့ သိပ္မသိေသးဘူး။ ေက်းဇူးပါပဲ ကုိလူပ်ိဳၾကီး .. ဒါနဲ ့ အပ်ိဳၾကီး ေကာ ရွိေသးလား ဒီမွာ.. :D ..

လူပ်ိဳႀကီး
20-02-2010, 10:33 AM
ဟုတ္ကဲ့ခင္ဗ်ာ.. ဖိုိရမ္အုပ္ခ်ဴပ္သူေတြ ျဖစ္သင့္တယ္ထင္လို ့ စီစဥ္ေပးတာကို က်ေနာ့္အေနနဲ ့ ျငင္းစရာ မရွိပါဘူးခင္ဗ်ာ... အားေပးတဲ့အတြက္လဲ ၀မ္းသာပါတယ္။ ေက်းဇူးပါပဲခင္ဗ်ာ။ က်ေနာ့္အေနနဲ ့ေတာ့ ဘယ္ေနရာမွာပဲ ေရးရ၊ ေရးရ အေရးမၾကီးပါဘူး။ လို္အပ္တဲ့ တစ္ေယာက္ေယာက္ ရသြားမယ္ဆုိ ေက်နပ္တာပါပဲ။ စာသင္သလုိ ျဖစ္ေနတယ္ဆုိတဲ့အတြက္ေတာ့ :P .. က်ေနာ္လဲ မသိဘူး။ ေဘးလူေတြကေတာ့ ျမင္မွာေပါ့။ က်ေနာ္ကေတာ့ က်ေနာ္ ေရးတတ္သလို ေရးလုိက္တာပါပဲဗ်ာ။ စာေရးတာဆုိလုိ ့ ဒီလုိမ်ိဳး ေရးဖူးတာပဲ ရွိတယ္။ တျခားဟာေတြ ေရးဖူးတာ မရွိေတာ့ စာအသြားအလာ သိပ္မတတ္ဘူး ျဖစ္ေနမယ္ထင္တယ္။ က်ေနာ္က မသိေသးတဲ့သူေတြ အေသးစိတ္ ရေစခ်င္တာပါ။ ၀မ္းသာရမွာလား၊ ၀မ္းနည္းရမွာလား ေတာ့ ေသခ်ာမသိဘူး။ ဆရာေလသံေပါက္ေနရင္ေတာ့ ေနာက္ေသခ်ာေလ့လာၿပီး ကေလးေတြကုိ သင္ေပးအံုးမွပါ။ :D ဘာပဲေျပာေျပာ ဂရုတစိုက္ ၾကည့္ေပးေဖာ္ရတဲ့အတြက္ ၀မ္းသာပါတယ္။ member ၀င္ထားတာကလဲ ၂ ရက္လားပဲ ဖုိရမ္အေၾကာင္းေတာ့ သိပ္မသိေသးဘူး။ ေက်းဇူးပါပဲ ကုိလူပ်ိဳၾကီး .. ဒါနဲ ့ အပ်ိဳၾကီး ေကာ ရွိေသးလား ဒီမွာ.. :D ..

အဲဒါဆိုရင္ edu မွာထည့္ဖို႔ ေျပာလိုက္ဦးမယ္ C# ရယ္ အခု ADO ရယ္ကိုတစ္ခါတည္း ပို႔လိုက္မယ္။ အပ်ိဳႀကီးကလိုက္ေျပးသြားလို႔ လူပ်ိဳႀကီးျဖစ္ အဲအဲ ဟုတ္ေသးပါဘူး မဆိုင္တာေတြ ေရာက္ကုန္ပါၿပီ :P