Thursday, May 10, 2012

C# for access database with ADO.NET

บทความนี้จะเตรียมความพร้อมก่อนการใช้งานลินคิวเต็มรูปแบบ โดยเป็นส่วนอยู่เบื้องหลัง เชื่อมต่อระหว่าง Business Layer กับ Database Layer เรามาเริ่มด้วยการสร้างดาต้า โมเดลกันก่อนครับตามตัวอย่างนี้


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Company.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PlanningManagement2.Models
{
[Serializable]
public class Company
{
//Company ID
private int _companyId;
public int CompanyID
{
get { return _companyId; }
set { _companyId = value; }
}
//Company Name
private string _companyName;
public string CompanyName
{
get { return _companyName; }
set { _companyName = value; }
}
}
}
หลังจากนั้นเราก็มาสร้างไฟล์ที่เป็น Business Layer ดังนี้



//CompanyBAL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using PlanningManagement2.Models;</code></code>
namespace PlanningManagement2.BAL
public class CompanyBAL
{
private string connectionString;
public CompanyBAL()
{
connectionString = ConfigurationManager.ConnectionStrings"PlanningConnection"].ConnectionString;
}
public CompanyBAL(string connectionString)
{
this.connectionString = connectionString;
}
public void Insert(Company company)
{
string sql="Insert Into Company(Company_ID, Company_Name) Values(@CompanyID, @CompanyName)";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
//Add Parameter...
cmd.Parameters.Add("@CompanyID", SqlDbType.Int).Value = company.CompanyID;
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar).Value = company.CompanyName;
//Execute Command...
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException err)
{
throw new ApplicationException("Insert command has error..." + err.ToString());
}
finally
{
conn.Close();
}
}
public void Update(Company company)
{
string sql = "Update Company SET Company_Name=@CompanyName Where Company_ID=@CompanyID";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
//Add Parameter...
cmd.Parameters.Add("@CompanyID", SqlDbType.Int).Value = company.CompanyID;
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar).Value = company.CompanyName;
//Execute Command...
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException err)
{
throw new ApplicationException("Update command has error..." + err.ToString());
}
finally
{
conn.Close();
}
}
public void Delete(Company company)
{
string sql = "Delte From Company Where Company_ID=@CompanyID";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
//Add Parameter
cmd.Parameters.Add("@CompanyID", SqlDbType.Int).Value = company.CompanyID;
try
{
//Execute Delete Command
conn.Open();
cmd.ExecuteNonQuery();
}
catch
{
//Has Error
throw new ApplicationException("Delete command has error...");
}
finally
{
conn.Close();
}
}
public List Select()
{
string sql = "Select * From Company Order By Company_ID";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = CommandType.Text;
List companys = new List();
try
{
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
companys.Add(
new Company()
{
CompanyID = (int)reader["Company_ID"],
CompanyName = (string)reader["Company_Name"]
}
);
}
return companys;
}
catch (SqlException err)
{
throw new ApplicationException("Search command has error..." + err.ToString());
}
finally
{
conn.Close();
}
}
}
}


จากโค้ดด้านบนรับรองได้ว่า เหมาะกับการใช้งานลินคิวเบื้องต้น และใช้งานได้จริงแน่นอนครับ ปกติตามที่เขามีตัวอย่างและสอนจะใช้ การสร้างแบบอัตโนมัตินะครับ แต่สำหรับผม การเขียนโค้ดทั้งหมดนั้นยืดหยุ่นกว่ามาก และเข้าใจง่ายด้วย
หลังจากนี้เราก็เตรียมพร้อมสำหรับ การใช้งานจริงใน Windows Application กันแล้วในบทต่อๆ ไปจะยกตัวอย่างการใช้โค้ดบน Windows Form เพื่อเรียกใช้เมธอร์ดที่เราเขียนไว้นี้
ref : http://www.codemarts.com/2010/05/c-for-access-database-with-ado-net/

No comments:

Post a Comment