ตัวอย่าง จะ Join ตาราง 3 ตาราง
ได้แก่ MANU_USER,MANU_DETAIL,MANU_ACTION
แบบที่ 1 SQL
Select u.MANU_USER,d.MANU_NAME,a.MANU_ACTNAME
from MANU_DETAIL d join MANU_USER u
on u.MANU_ID = d.MANU_ID
join MANU_ACTION a
on u.MANU_ACTID = a.MANU_ACTID
แบบที่ 2 LINQ
using(var db = new MANUContext())
{
var query = (
from d in db.MANU_DETAIL
join u in db.MANU_USER
on d.MANU_ID equals u.MANU_ID
join a in db.MANU_ACTION
on d.MANU_ACTID equals a.MANU_ACTID
select new
{
u.MANU_USER,
d.MANU_NAME,
a.MANU_ACTNAME
}
).ToList();
}
แบบที่ 3 LAMPDA
using(var db = new MANUContext()
{
var query = db.MANU_DETAIL.JOIN
(
db.MANU_USER, d => d.MANU_ID , u => u.MANU_ID,(d,u) => new
{
u.MANU_USER,
d.MANU_ACTID,
d.MANU_NAME
}
)
.join
(
db.MANU_ACTION,o => o.MANU_ACTID , a => a.MANU_ACTID,(o,a) =new
{
o.MANU_USER,
o.MANU_NAME,
a.MANU_ACTNAME
}
).ToList();
}
Programming Tip By Nut
Tip Development
วันพฤหัสบดีที่ 24 เมษายน พ.ศ. 2557
วันพุธที่ 23 เมษายน พ.ศ. 2557
การเขียน Windows Application โดยใช้ C# โดยใช้เครื่องมือ Entity Framework ทางลัด ครั้งที่ 2(เปรียบเทียบ Query โดย SQL Command,LinQ,Lambda)
-เมือทำการ เชื่อต่อ ฐานข้อมูลแล้ว จะทดสอบดึงข้อมูลจากฐานข้อมูลออกมาแสดง
- ขั้นแรกสร้าง DataGridView ขึ้นมา 3 อัน
สำหรับ LINQ,Lambda,SQL Command
- จากนั้นเขียนคำสั่ง ลงไป ถึงข้อมูลจาก Database 3 แบบ ด้วยกัน
- ขั้นแรกสร้าง DataGridView ขึ้นมา 3 อัน
สำหรับ LINQ,Lambda,SQL Command
- ผลลัพธ์ ทีไ่ด้
- ผลลัพธ์ที่ได้จะคล้ายกัน แต่จุดต่งที่มองเห็น เป็นต้น คือ
1.SQL Command จะรู้ได้ว่าคำสั่ง SQL ถูกต้องเปล่า ต้องไป Run ใน SQL Server ก่อน
2.LINQ สามารถ Debug รันผล และตรวจผลลัพท์ได้เลย ใน Visual Studio 2013 และสามารถปรับแต่งได้มากขึ้น
3. Lambda จะเขียนคำสั่งที่สั้นที่สุด และสะดวกที่สุด แต่ต้องมีความชำนาญ จะสะดวกมาก
ในรูปแบบทั้ง 3 จะมีความแตกต่างกันมากกว่านี้
การเขียน Windows Application โดยใช้ C# โดยใช้เครื่องมือ Entity Framework ทางลัด ครั้งที่ 1
เครื่องมือที่ใช้
Visual Studio 2013
SQL Server
Database First
- ขั้นแรกให้ออกแบบ ฐานข้อมูล จากนั้น เชื่อมความสัมพันธ์ ให้ครบ ก่อน ใน SQL Server 2008
- เริ่มต้น สร้าง Project
- ทำการเชื่อมต่อฐานข้อมูล โดยใช้ ADO.NET Entity Framework > Right Click Project > Add > New Item > Data > ADO.NET Entity Data Model ระบุชื่อ Name กด ADD
-- เลือก Generate From Database
- กดปุ่ม New Connection > เลือก Data source เป้น Database ที่ใช้งาน เลือก Server name ระบุการเข้าถึง โดย Sql Server Authentication หรือ Windows Authentication ก็ได้ จากนั้นเลือก ฐานมูลที่ใช้
จากนั้น เลือก Yes, Include the sensitive data in the connection string เลือกการเชื่อมต่อ ซึ่งการเชื่อมต่อจะใช้ Connection String จะอยู่ใน Web.config ระบุชื่อ Entity ซะ
- จากนั้นระบบจะให้เลือก ฐานข้อมูลที่จะใช้งาน ซึ่งความสัมพัมธ์จะได้ตาม Diagram ที่สร้างขั้นต้น และระบุชื่อ Model ซะ
-โปรแกรมจะ สร้าง Model ให้เราตามฐานข้อมูล ซึ่งเป็นลักษณะของ Database Object
วันอังคารที่ 22 เมษายน พ.ศ. 2557
การเขียนเว็บ โดยใช้ C# โดยใช้เครื่องมือ Entity Framework ทางลัด ครั้งที่ 2(สร้าง Insert Update Delete View) ต่อ
-จากครั้งที่ 1 เราสามารถเชื่อมต่อกับฐานข้อมูลได้แล้ว ต่อไป จะเป็นการสร้าง Insert Update Delete View
โดยจะสร้างโดยใช้เครื่องมือของ Visual studio 2013
-ทำการคลิกขวาที่ Controllers > Add > Controller เพื่อสร้าง Controller ตาม Database ที่ดึงเข้ามาในโปรแกรม นั้นคือ Object Database นั้นเอง
-เลือก MVC 5 Controller with views,Using Entity Framework คือให้สร้าง Controller และ สร้าง View โดยให้โปรแกรมสร้าง Insert Update Delete view ให้ด้วย จากนั้นเราค่อยมาแก้ไข เอง Class ที่ได้จะเป็น Class ที่สะอาด ที่เรียกว่า POCO
- ในหน้า AddController ให้ระบุชื่อ Controller Name ระบุ Model Class คือ ฐานข้อมูลที่จะสร้าง Insert Update Delete View ต่อมาให้ระบุ Data Context Class นั้นเอง กด Add
โดยจะสร้างโดยใช้เครื่องมือของ Visual studio 2013
-ทำการคลิกขวาที่ Controllers > Add > Controller เพื่อสร้าง Controller ตาม Database ที่ดึงเข้ามาในโปรแกรม นั้นคือ Object Database นั้นเอง
-เลือก MVC 5 Controller with views,Using Entity Framework คือให้สร้าง Controller และ สร้าง View โดยให้โปรแกรมสร้าง Insert Update Delete view ให้ด้วย จากนั้นเราค่อยมาแก้ไข เอง Class ที่ได้จะเป็น Class ที่สะอาด ที่เรียกว่า POCO
- ในหน้า AddController ให้ระบุชื่อ Controller Name ระบุ Model Class คือ ฐานข้อมูลที่จะสร้าง Insert Update Delete View ต่อมาให้ระบุ Data Context Class นั้นเอง กด Add
- ระบบจะสร้าง Controller และ View ขึ้นมาให้ตามที่เราระบุ นั้นเอง และยังสร้าง หน้า HTML สำหรับ Create Delete Details Edit Index ให้ด้วย โปรแกรมจะสร้าง Code ให้ทั้งหมด โดยให้เราเลือกปรับแต่งตามแต่ถนัดได้ทันที
- เราลองมาปรับ Link ในหน้าแรก ให้สามารถเรียกดู HTML ที่ระบบสร้างให้ โดยเว็บจะทำงานแรกสุดที่ _ViewStart.cshtml จากนั้น จะทำงานที่ _Layout.cshtml ซึ่งเป็นหน้าแรกที่ต้องมาแก้ไข ข้อมูลกัน
-ซึ่งในตัวอย่างจะเป็นการแสดงตาราง Menu จากฐานข้อมูลที่ชื่อ Manu Detail เมื่อกด Link เข้าไปยัง Homepage Index จะแสดง รายละเอียด ออกมาจากฐานข้อมูลทั้งหมด โดยสามารถ กด เลือก Create,Edit,Details,Delete ได้ทันที โดยเราสามารถปรับแต่ง Code ให้เป็นไปตามที่เราต้องการได้ทันที
- เมื่อเรากด Create New เราจะพบว่า ใน Combo Box ที่มีความสัมพัมธ์ กับตารางอื่น ระบบ จะสร้างความสัมพันธ์ให้ทันที เมื่อกดดูจะแสดง รายละเอียดในตารางที่มีความสัมพันธ์ด้วย
-แสดงตัวอย่าง Edit,Details,Delete
จบ ครั้งที่ 2
การเขียนเว็บ โดยใช้ C# โดยใช้เครื่องมือ Entity Framework ทางลัด ครั้งที่ 1
- ใช้เครื่องมือ Visual Studio 2003
- SQL Server 2008 R2
- จากนั้นเปิดโปรแกรม Visual Studio 2013
- SQL Server 2008 R2
บทความชุดที่ 1 จะพูดถึง เขียนเว็บโดยใช้ Entity Framework
1.Database First
- ขั้นแรกให้ออกแบบ ฐานข้อมูล จากนั้น เชื่อมความสัมพันธ์ ให้ครบ ก่อน ใน SQL Server 2008 R2
- จากนั้นเปิดโปรแกรม Visual Studio 2013
-จากนั้นจะมีตัวเลือก New ASP.Net Project โดยเราจะเลือก MVC และกดปุ่ม Chang Authentication จะเป็นการสร้าง การ LOGIN โดย ธรรมดา โปรแกรมจะเลือก Individual User Accounts อยู่แล้ว หากไม่ต้องการต้องการสร้างเอก ให้เลือก No Authentication จากนั้นกดปุ่ม OK
// หากเลือก Individual User Accounts ระบบจะจำลอง Database การ Login ซึ่งจะอยู่ภายใน โปรแกรม VS 2013 เอง หากต้องการให้ขึ้น ฐานข้อมูลจริง ต้องทำการเปลี่ยนที่อยู่ ใน Web.config จากนั้น ใช้ Migration สำหรับ ให้โปรแกรม เปลี่ยนที่ Database มาใช้ Database ตัวจริง และให้สร้าง ฐานข้อมูล มาให้ด้วย จะกล่าวใน บทถัดไป
-เมื่อ กด OK จะโปรแกรมจะสร้าง Web เริ่มต้นมาให้ ซึ่งจะมี Controllers Home คือหน้าเริ่มต้นมาให้ โดยอัตโตโนมัติ
-โปรแกรมจะสร้าง เว็บซึ่งมีโครงสร้าง MVC ขึ้นโดยประกอบด้วย
- M = Model คือ ทำหน้าที่เหมือนแม่พิมพ์ แม่แบบ กับ ฐานข้อมูล ซึ่งจะอยู่ในรุปของ Object
- V = View คือ ทำหน้าที่ติดต่อ กับผู้ใช้งาน
- C = Controller คือ ทำหน้าที่จัดการข้อมูล และติดต่อกับ ฐานข้อมุล เช่น เพิ่ม อัพเดต ลบ
ซึ่งสังเกตุใน Controller เช่น HomeController ก็จะมี View Home ทำงานคู่กัน ซึ่งใน View ก็จะมีไฟล์ cshtml คือ Razor Html ติดต่อกันเสมอ
- ต่อไปจะเริ่มต้น ดึงต้นแบบจาก ฐานข้อมุลที่สร้าง มาในโปรแกรมโดยกดAdd ที่โปรเจ็ค > เลือก New Item จากนั้นเลือก Data > ADO.Net Entity Data Model > ใส่ชื่อ กด ADD
- เลือก Generate From Database
- กดปุ่ม New Connection > เลือก Data source เป้น Database ที่ใช้งาน เลือก Server name ระบุการเข้าถึง โดย Sql Server Authentication หรือ Windows Authentication ก็ได้ จากนั้นเลือก ฐานมูลที่ใช้
จากนั้น เลือก Yes, Include the sensitive data in the connection string เลือกการเชื่อมต่อ ซึ่งการเชื่อมต่อจะใช้ Connection String จะอยู่ใน Web.config ระบุชื่อ Entity ซะ
- จากนั้นระบบจะให้เลือก ฐานข้อมูลที่จะใช้งาน ซึ่งความสัมพัมธ์จะได้ตาม Diagram ที่สร้างขั้นต้น และระบุชื่อ Model ซะ
- เมื่อกด Finished ระบบจะทำการสร้าง DBContext มาให้ ตามความสัมพันธ์ที่เราสร้างไว้ตอนแรกสุด โดยเรียกใช้งานผ่านชื่อ Context เชื่อมไปยังฐานข้อมูลต่างๆได้ ที่ได้คือ ฐานข้อมูลที่อยู่ในรูปแบบ ของ Object เรียบร้อย
จบบทที่ 1
วันศุกร์ที่ 18 ตุลาคม พ.ศ. 2556
Method Query Return 1 only MS Access (Access)
Method Query Return 1 only MS Access (Access)
1.Method สำหรับ Return ค่ากลับ เป็น int หรือ String
public int Query1(String is_sql)
{
try
{
cons.Open();
OleDbCommand cmd = cons.CreateCommand();
cmd.CommandText = is_sql;
return (Convert.ToInt32(cmd.ExecuteScalar().ToString()));
}
finally
{
cons.Close();
}
}
_________________
2.Method สำหรับ Return ค่ากลับ เป็น int หรือ String แต่รับ Parameter เป็น CMD
String sql1 = "select count(*) from employee e left join emp_delete d on e.emp_id = d.emp_id ";
sql1 = sql1 + "where d.emp_id is null and e.emp_id like ? ";
Connectdb condb = new Connectdb();
OleDbCommand CMD = new OleDbCommand(sql1, condb.reConnect()); // เรียกหาตัวแปล Con
CMD.Parameters.Add(new OleDbParameter("emp_id", OleDbType.VarChar)).Value = txtCode.Text;
int chk = condb.Query1(CMD); // นำค่าไปตรวจสอบ
__________
public int Query1(OleDbCommand cmd)
{
try
{
cons.Open();
return (Convert.ToInt16(cmd.ExecuteScalar().ToString()));
}
finally
{
cons.Close();
}
}
1.Method สำหรับ Return ค่ากลับ เป็น int หรือ String
public int Query1(String is_sql)
{
try
{
cons.Open();
OleDbCommand cmd = cons.CreateCommand();
cmd.CommandText = is_sql;
return (Convert.ToInt32(cmd.ExecuteScalar().ToString()));
}
finally
{
cons.Close();
}
}
_________________
2.Method สำหรับ Return ค่ากลับ เป็น int หรือ String แต่รับ Parameter เป็น CMD
String sql1 = "select count(*) from employee e left join emp_delete d on e.emp_id = d.emp_id ";
sql1 = sql1 + "where d.emp_id is null and e.emp_id like ? ";
Connectdb condb = new Connectdb();
OleDbCommand CMD = new OleDbCommand(sql1, condb.reConnect()); // เรียกหาตัวแปล Con
CMD.Parameters.Add(new OleDbParameter("emp_id", OleDbType.VarChar)).Value = txtCode.Text;
int chk = condb.Query1(CMD); // นำค่าไปตรวจสอบ
__________
public int Query1(OleDbCommand cmd)
{
try
{
cons.Open();
return (Convert.ToInt16(cmd.ExecuteScalar().ToString()));
}
finally
{
cons.Close();
}
}
_________________________
3. ใช้ OleDbDataReader มาช่วยในการรับข้อมูล แล้ว Return กลับไป 1 ค่า วิธีนี้ไม่แนะนำ เพราะ ExecuteReader ไว้รับค่ามากกว่า 1 ค่า
public int checkdb(String is_sql)
{
int count1 = 0;
cons.Open();
OleDbDataReader reader;
OleDbCommand cmd = cons.CreateCommand();
cmd.CommandText = is_sql;
reader = cmd.ExecuteReader();
while (reader.Read())
{
int count1 = Convert.ToInt32(reader[0].ToString());
}
cons.Close();
return count1;
}
วันพุธที่ 16 ตุลาคม พ.ศ. 2556
Method Query Not Return MS Access (Access)
Method สำหรับ Query ได้แบ่งออกเป็น 2 แบบ คือ
1.รับค่าเป็นตัวแปร ชนิด String แล้วนำไป Query ข้อมูล
OleDbConnection cons;
public void querydb(String issql) //รับค่าเป็นคำสั่ง SQL ชนิด String
{
this.cons.Open();
OleDbCommand cmd = this.cons.CreateCommand();
cmd.CommandText = issql;
cmd.ExecuteReader();
this.cons.Close();
}
____________________________
2. รับค่าเป็นตัวแปร ชนิด OleDbCommand แล้วนำ ไป Query
Public void insert_data()
{
ConnectDB condb = new ConnectDB();
String sql = "insert into employee values(?,?,?,?,?,?,?,?,?,?)";
OleDbCommand CMD = new OleDbCommand(sql, condb .reConnect()); // เรียกหาตัวแปล Con
CMD.Parameters.Add(new OleDbParameter("emp_id",OleDbType.VarChar)).Value = txtCode.Text;
CMD.Parameters.Add(new OleDbParameter("first_name", OleDbType.VarChar)).Value = txtfirstname.Text;
CMD.Parameters.Add(new OleDbParameter("last_name", OleDbType.VarChar)).Value = txtlastname.Text;
CMD.Parameters.Add(new OleDbParameter("sex", OleDbType.VarChar)).Value = txtsex;
CMD.Parameters.Add(new OleDbParameter("id_card", OleDbType.VarChar)).Value = txtidcard.Text;
CMD.Parameters.Add(new OleDbParameter("birth_day", OleDbType.VarChar)).Value = txtbirthday.Text;
CMD.Parameters.Add(new OleDbParameter("date_in", OleDbType.VarChar)).Value = txtwork.Text;
CMD.Parameters.Add(new OleDbParameter("address1", OleDbType.VarChar)).Value = txtadd1.Text;
CMD.Parameters.Add(new OleDbParameter("address2", OleDbType.VarChar)).Value = txtadd2.Text;
CMD.Parameters.Add(new OleDbParameter("company_id", OleDbType.VarChar)).Value = chkCompany();
condb .querydb(CMD);
}
______________ // Class ConnectDB
OleDbConnection cons;
public OleDbConnection reConnect()
{
return this.cons;
}
public void querydb(OleDbCommand cmd)
{
cons.Open();
cmd.ExecuteReader();
cons.Close();
}
1.รับค่าเป็นตัวแปร ชนิด String แล้วนำไป Query ข้อมูล
OleDbConnection cons;
public void querydb(String issql) //รับค่าเป็นคำสั่ง SQL ชนิด String
{
this.cons.Open();
OleDbCommand cmd = this.cons.CreateCommand();
cmd.CommandText = issql;
cmd.ExecuteReader();
this.cons.Close();
}
____________________________
2. รับค่าเป็นตัวแปร ชนิด OleDbCommand แล้วนำ ไป Query
Public void insert_data()
{
ConnectDB condb = new ConnectDB();
String sql = "insert into employee values(?,?,?,?,?,?,?,?,?,?)";
OleDbCommand CMD = new OleDbCommand(sql, condb .reConnect()); // เรียกหาตัวแปล Con
CMD.Parameters.Add(new OleDbParameter("emp_id",OleDbType.VarChar)).Value = txtCode.Text;
CMD.Parameters.Add(new OleDbParameter("first_name", OleDbType.VarChar)).Value = txtfirstname.Text;
CMD.Parameters.Add(new OleDbParameter("last_name", OleDbType.VarChar)).Value = txtlastname.Text;
CMD.Parameters.Add(new OleDbParameter("sex", OleDbType.VarChar)).Value = txtsex;
CMD.Parameters.Add(new OleDbParameter("id_card", OleDbType.VarChar)).Value = txtidcard.Text;
CMD.Parameters.Add(new OleDbParameter("birth_day", OleDbType.VarChar)).Value = txtbirthday.Text;
CMD.Parameters.Add(new OleDbParameter("date_in", OleDbType.VarChar)).Value = txtwork.Text;
CMD.Parameters.Add(new OleDbParameter("address1", OleDbType.VarChar)).Value = txtadd1.Text;
CMD.Parameters.Add(new OleDbParameter("address2", OleDbType.VarChar)).Value = txtadd2.Text;
CMD.Parameters.Add(new OleDbParameter("company_id", OleDbType.VarChar)).Value = chkCompany();
condb .querydb(CMD);
}
______________ // Class ConnectDB
OleDbConnection cons;
public OleDbConnection reConnect()
{
return this.cons;
}
public void querydb(OleDbCommand cmd)
{
cons.Open();
cmd.ExecuteReader();
cons.Close();
}
สมัครสมาชิก:
บทความ (Atom)