Thursday, May 15, 2014

C# : มาสร้าง Strongly Typed DataTable กัน


โดยปกติการดึงข้อมูลจากฐานข้อมูล จะต้องกำหนดชื่อ Field ที่ต้องการเป็น Property ให้กับ DataRow Object เช่น row["Name"] ซึ่งการเรียกใช้แบบนี้เป็น Non-Typed DataTable

หากต้องการเรียกใช้แบบนี้ row.Name เราจะต้องทำ DataTable ที่เป็น Strongly Typed แบบเฉพาะเจาะจงขึ้นมาเอง

การสร้าง Strongly Typed DataSet นี้ไม่ยากเลยครับ มีขั้นตอนเพิ่มเติมไม่มาก แต่เราจะได้ประโยชน์ในการเขียนโค้ด และการแก้ไขโค้ดได้อย่างมาก

1. เริ่มจากเปิด Visual Studio Web Developer Express 2014
2. New Project -> Visual C# -> Web -> ASP.NET Web Application
    Name : StronglyDataTable

3. เปิด Database Explore 
    Connect เข้า localhost\sqlexpress    
    สร้าง Database = StronglyDataTable 
    แล้วสร้าง Table "MyTable"

     เพิ่ม record ลงไปใน MyTable สัก 2 records

4. สร้าง Folder ชื่อ DataSet 
    จากนั้น Add New Item -> DataSet ชื่อ "StronglyDataTableDS"
    สร้าง DataTable ชื่อ "MyTable"

5. Add Class ชื่อ "DataAccess.cs" โดยมีโค้ดตามตารางด้านล่าง
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using StronglyDataTable.DataSet;
using System.Data.SqlClient;

namespace StronglyDataTable
{
    public class DataAccess
    {
        public MyDataSet.MyTableDataTable GetMyTable()
        {
            string connectionString = System.Web.Configuration.WebConfigurationManager
                .ConnectionStrings["StronglyDataTableConnectionString"].ToString();

            SqlConnection sqlConnection = new SqlConnection(connectionString);
            SqlCommand sqlCommand = new SqlCommand("SELECT * FROM MyTable", sqlConnection);
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            System.Data.DataTable table = new System.Data.DataTable();
            sqlDataAdapter.Fill(table);

            MyDataSet.MyTableDataTable myTable = new MyDataSet.MyTableDataTable();
            myTable.Merge(table); 

            return myTable;
        }

    }
}

6. เปิด Default.aspx แล้ววาง Label ชื่อ LabelMyTable


7. เปิดโค้ดของ Default.aspx.cs จากนั้นโค้ดใน event Page_Load ตามตาราง
    ** สังเกตุได้ว่า การใช้ Strongly Typed DataTable จะช่วยให้การเขียนโค้ดอ่านเข้าใจง่าย และช่วยลดปัญหาการเกิด Runtime Error ลงไปอย่างมาก **
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace StronglyDataTable
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataAccess da = new DataAccess();
                StronglyDataTable.DataSet.MyDataSet.MyTableDataTable table = da.GetMyTable();

                foreach (StronglyDataTable.DataSet.MyDataSet.MyTableRow row in table.Rows)
                {
                    LabelMyTable.Text += string.Format("
Id: {0}, Name: {1}", row.Id.ToString(), row.Name);
                }
            }
        }
    }
}


8. ทดลองรันดูจะได้ผลลัพท์ ตามรูปด้านล่าง

หากติดขัดอะไร สอบถามผ่าน blog นี้ได้เลยครับ

No comments: