C# คำสั่งเช็คข้อมูลในฐานข้อมูลโดยใช้ Entity Framework (ADO.NET Entity Data Model)
เอาโค้ด มาโพส ด้วยครับ
Date :
2013-05-20 11:12:22
By :
tee
Code (C#)
public bool CheckData(Customer t)
{
bool isSuccess = false;
using (PetStoreEntities entities = new PetStoreEntities())
{
var SelectData = from a in entities.Customers
where a.Name.Contains("")
select a;
foreach (var a in SelectData)
{
entities.AddToCustomers(t);
entities.SaveChanges();
}
isSuccess = true;
return isSuccess;
}
}
โค้ดตอนนี้คะ เขียนไว้ที่ wcf แต่พอเรียกใช้แล้วมันเออเร่อทันที
เราก็ว่ามันไม่น่าจะใช่แบบนี้แน่ๆ แต่ก็จนปัญญาไม่รู้จะทำแบบไหนดี
ยังไงช่วยหน่อยนะคะ ขอบคุณค่ะ
ประวัติการแก้ไข 2013-05-20 11:54:18
Date :
2013-05-20 11:49:35
By :
thisaom
อยากรู้ว่าถ้าเราจะ select ข้อมูลจากฐานข้อมูล มาตรวจสอบ
แต่ใช้คำสั่ง linq จะเขียนยังไงดีคะ
Date :
2013-05-20 14:08:19
By :
thisaom
Code (C#)
bool isExist = (from c in entities.Customers
where c.Name.Equal(t.Name)
select c).Count > 0 ? true : false;
Date :
2013-05-20 14:43:22
By :
ห้ามตอบเกินวันละ 2 กระทู้
ง่า ใช้คำสั่งselect แล้วต่อไปใส่เงื่อนไขได้เลยหรอคะ
ตรง .Count > 0 ? true : false; หมายถึงอะไรหรอคะ
พอใส่เข้าไปแล้วเออเร่อเลย T-T
ขอบคุณที่ตอบนะคะ ^^ เริ่มมีความหวังนิดๆ ล่ะคะ
Date :
2013-05-20 15:12:11
By :
thisaom
ลองดู แบบนี้ดูครับ
1.โค้ด ฝั่ง WCF ครับ
Code (C#)
#region IService Members
public bool GetCustomerById(string customerid)
{
using (var entity = new NorthwindEntities())
{
List<Customers> cust = (from c in entity.Customers where c.CustomerID == customerid select c).ToList();
if (cust.Count ==0 )
{
return true;
}
}
return false;
}
public bool SaveCustomers(Customers cust)
{
using (var entity = new NorthwindEntities())
{
try
{
entity.AddToCustomers(cust);
entity.SaveChanges();
}
catch (Exception ex)
{
string error = ex.ToString();
return true;
}
}
return false;
}
#endregion
2.โค้ดฝั่ง Client ครับ
Code (C#)
private void Form1_Load(object sender, EventArgs e)
{
NortwindWCFService.Customers oCustomer = new WCFUsingEF.NortwindWCFService.Customers();
oCustomer.CustomerID = "C001";
oCustomer.CompanyName = "MyCompanyName";
oCustomer.ContactName = "MyContactName";
oCustomer.ContactTitle = "MyContactTitle";
oCustomer.Address = "MyAddress";
oCustomer.City = "MyCity";
oCustomer.PostalCode = "MyPostal";
oCustomer.Country = "MyCountry";
oCustomer.Phone = "MyPhone";
oCustomer.Fax = "MyFax";
NortwindWCFService.ServiceClient nortwindService = new WCFUsingEF.NortwindWCFService.ServiceClient();
if (!nortwindService.GetCustomerById(oCustomer.CustomerID))//ไม่มี C001 ใน DB
{
try
{
if (nortwindService.SaveCustomers(oCustomer))
MessageBox.Show("Save Data Complete");
else
MessageBox.Show("Cannot Save Data");
}
catch (Exception)
{
throw;
}
}
else//มี C001 ใน DB
{
MessageBox.Show("CustomerID ซ้ำ !!");
}
}
Date :
2013-05-20 15:17:46
By :
tee
ขอบคุณมากๆ ค่ะ
ลองทำตามแล้ว แต่ติด ตรง
NortwindWCFService.Customers oCustomer = new WCFUsingEF.NortwindWCFService.Customers();
น่ะ คะ ถ้าไม่รบกวนเกินไป ช่วยอธิบายคำสั่งบรรทัดนี้ให้หน่อยได้ไหมคะ
เข้าใจว่าเรียกใช้ wcf แต่ทำไมเวลาเขียนโค้ดแล้วเกิดเออเร่อก็ไม่ทราบ
ขอบคุณล่วงหน้านะคะ
อ้อ อีกอย่าง ถ้าสมมติว่า เราใส่ค่า id อื่น
นอนจาก c001 แล้วมันซ้ำกับค่าที่เราใส่ไปแล้ว
มันจะขึ้นเออเร่อเหมือนกันใหมคะ
สมมตว่า มี c002 แล้วน่ะคะ ถ้าใส่อีกจะฟ้องเออเร่ออีกใหม
ขอบคุณอีกครั้งคะ รบกวนหลายอย่างเลย
Date :
2013-05-20 16:10:29
By :
thisaom
ผมใช้ vs2008 + sql2008 นะครับ
1.สร้างโปรเจ๊ก เป็น windows app (c#) ชื่อว่า WCFUsingEF
2. คลิกขวาที่ solution --> new project--> visual c# -->web -->Wcf Service application ตั้งชื่อว่า NorthwindWcfService
3.ที่โปรเจ็ก NorthwindWcfService คลิกขวา เลือก add->new item->ADO.NET Entity Data Model ตามรูป
4. กด new connection เพื่อ connection data base
5.เลือก yes และตั้งชื่อ ด้งรูป
6.เลือก เทเบิล และตั้งชื่อ ดังรูป
7. ที่หน้า IService.cs เขียนโค้ด ตามนี้ครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace NorthwindWcfService
{
// NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
[ServiceContract]
public interface IService
{
#region "ส่วนที่ เขียนโค้ด เพิ่ม"
[OperationContract]
bool GetCustomerById(string customerid);
[OperationContract]
bool SaveCustomers(Customers cust);
#endregion
}
}
8. ที่หน้า Service.svc.cs เขียนโค้ด ตามนี้ครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace NorthwindWcfService
{
// NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
public class Service1 : IService
{
#region IService Members
public bool GetCustomerById(string customerid)
{
using (var entity = new NorthwindEntities())
{
List<Customers> cust = (from c in entity.Customers where c.CustomerID == customerid select c).ToList();
if (cust.Count ==0 )
{
return false ;
}
}
return true ;
}
public bool SaveCustomers(Customers cust)
{
using (var entity = new NorthwindEntities())
{
try
{
entity.AddToCustomers(cust);
entity.SaveChanges();
}
catch (Exception ex)
{
string error = ex.ToString();
return false;
}
}
return true;
}
#endregion
}
}
9. คลิดขวาโปรเจ๊ก NorthwindWcfService ->Build
10. ที่โปรเจ๊ก WCFUsingEF คลิก add service reference และ ตั้งชื่อ ดังรูปครับ
11. ที่ Form1.cs เขียนโค้ด ตามนี้ครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WCFUsingEF
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
NortwindWCFService.Customers oCustomer = new WCFUsingEF.NortwindWCFService.Customers();
oCustomer.CustomerID = "C001";
oCustomer.CompanyName = "MyCompanyName";
oCustomer.ContactName = "MyContactName";
oCustomer.ContactTitle = "MyContactTitle";
oCustomer.Address = "MyAddress";
oCustomer.City = "MyCity";
oCustomer.PostalCode = "MyPostal";
oCustomer.Country = "MyCountry";
oCustomer.Phone = "MyPhone";
oCustomer.Fax = "MyFax";
NortwindWCFService.ServiceClient nortwindService = new WCFUsingEF.NortwindWCFService.ServiceClient();
if (!nortwindService.GetCustomerById(oCustomer.CustomerID))//ไม่มี C001 ใน DB
{
try
{
if (nortwindService.SaveCustomers(oCustomer))
MessageBox.Show("Save Data Complete");
else
MessageBox.Show("Cannot Save Data");
}
catch (Exception)
{
throw;
}
}
else//มี C001 ใน DB
{
MessageBox.Show("CustomerID ซ้ำ !!");
}
}
}
}
เสร็จแล้วครับ ลองรัน โปรแกรมดู
ประวัติการแก้ไข 2013-05-20 18:01:29
Date :
2013-05-20 17:59:26
By :
tee
ขอบคุณค่ะ ตอนนี้แจ้งเออเร่อแล้ว
แต่ปัญหาคือ ต่อให้เป็น ID ที่ไม่มีอยู่
มันก็ไม่ยอมเซฟอ่ะค่ะ
คือเราเอาไปใส่ไว้ในปุ่มอ่าค่ะ ไม่ได้ใส่ไว้ที่Form1_Load
ไม่รู้ว่าเกี่ยวกันหรือป่าว เดี๋ยวยังไงจะลองพยายามอีกทีค่ะ
ขอบคุณมากๆ นะคะ
Date :
2013-05-21 09:54:08
By :
thisaom
ตอนนี้ได้แล้วค่ะ ขอบคุณมากๆ นะคะ ^^
ช่วยชีวิตเราไว้เลย
Date :
2013-05-21 11:12:19
By :
thisaom
ถามอีกหน่อยนะคะ อย่าเพิ่งรำคาญนะ
คือถ้าเราจะเช็คค่าว่างด้วย เราทำโค้ดคล้ายๆ แบบนี้เลยได้ใช่ไหมคะ
Date :
2013-05-21 11:42:50
By :
thisaom
เช็คค่าว่าง ในส่วนไหนครับ !!
ถ้าเป็นการเช็ค ใน Object : oCustomer ใช้ IF ได้เลยครับ เช่น
Code (C#)
//ตรวจสอบค่า ว่าง oCustomer.CompanyName
if (oCustomer.CompanyName == string.Empty)
{
MessageBox.Show(" กรุณากรอก ข้อมูล Company Name !!");
}
** ถ้าไม่ใช่ ลองเอาโค้ด มาดูครับ
Date :
2013-05-21 11:56:27
By :
tee
ลองใช้แล้วค่ะ ก็ขึ้นข้อความแจ้งเตือน
แต่โปรแกรมก็ยังเซฟค่าว่างอยู่อ่ะคะ
คืออยากให้ถ้าเป็นค่าว่างแล้วโปรแกรมจะไม่ยอมให้เซฟเลย
เลยคิดว่าจะเอาไปดักไว้ใน wcf ได้เลยไหม
ขอบคุณค่ะ ^^
Date :
2013-05-21 14:11:44
By :
thisaom
ตอนนี้ได้แล้วค่ะ ใช้โค้ดนี้อ่ะคะ
Code (C#)
if (!PetStoreServics.GetCustomerById(oCustomer.Name))
{
try
{
if (oCustomer.Name == string.Empty)
{
MessageBox.Show(" กรุณากรอกข้อมูลด้วยค่ะ!!");
}
else if
(PetStoreServics.SaveCustomers(oCustomer))
{
MessageBox.Show("Save Data Complete");
}
}
catch (Exception)
{
throw;
}
}
else
{
MessageBox.Show("ชื่อนี้มีอยู่ในระบบแล้ว");
}
showdata();
}
แต่ถ้ามีอะไรแนะนำ แนะนำได้เลยนะคะ
ความรู้เรายังน้อยกำลังค่อยๆ ศึกษาค่ะ
ขอบคุณมากๆ นะคะ
Date :
2013-05-21 14:43:23
By :
thisaom
เยี่ยม ครับ
Date :
2013-05-21 16:29:34
By :
tee
ถามอีกนิดนะคะ คือจะทำให้เช็คทั้งเทเบิ้ลอ่าคะ
คือจะเช็คทั้ง ไอดี ชื่อ เบอร์โทร อ่าคะ
ที่นี้เจ้านายบอกว่า ให้สร้างคลาสเออเร่อขึ้นมาอีกตัวนึง
ที่winfrom แล้วค่อยโยนให้ wcf ????
แล้วพอwcf เช็คเสร็จก็ส่งกลับให้winfrom อ่าคะ
ถ้ามีข้อมูลซ้ำก็แสดงเออเร่อ ถ้าไม่ซ้ำก็ให้ save
ปัญหาคือเราจะสร้างคลาสแล้วโยนไปที่ wcf ยังไงอ่าคะ
เอาตรงๆ เรานึกโค้ดไม่ออกเลย นึกภาพยังไม่ค่อยออกเลยอ่าคะ
แล้วเราเขียนคำสั่งเช็คค่าลงในคลาสที่จะสร้างใหม่ได้เลยไหมคะ
แล้วค่อยโยนให้ wcf เป็นตัวเช็ค หรือในคลาสเขียนแค่ตัวแสดงเออเร่อ
?????????????
T_T ยังไงช่วยแนะนำด้วยนะ ขอบคุณค่ะ
ประวัติการแก้ไข 2013-05-22 09:26:16
Date :
2013-05-22 09:17:30
By :
thisaom
Load balance : Server 02