เรียกใช้ Class อย่างไร เพื่อให้ง่ายต่อการทำ CRUD (C#,EF,SQL)
สวัสดีครับพี่ๆ ทุกท่าน วันนี้มีเรื่องมาขอไอเดีย ขอคำปรึกษาดังนี้ครับ
1. ต้องการทำ Insert , Update , Delete , Filter ให้ง่ายต่อการเขียนโค้ด เพราะคิดว่าจะมีหลาย Table แน่ๆ ซึ่งได้ทำการซึ่งมาจากอินเตอร์เน็ทพบว่าส่วนใหญ่จะเขียนเป็น ASP แต่ตัวผมต้องการทำเป็น Windows Application หรือ Windows Form นั่นเอง พอไล่หาโค้ดไป ก็เจอ Code ตัวอย่างนึง แต่ผมนำมาใช้ไม่เป็น จะขอให้พี่ๆ แนะนำ, อธิบาย หรือยกตัวอย่างให้หน่อยครับ
ผมมี Model ดังรูปด้านล่างนี้ครับ
Class ที่ต้องการเรียกและนำไปใช้ทุกๆ การทำ Insert, Read, Update, Delete
Code (C#)
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace OreoJam
{
/// <summary>
///
/// </summary>
/// <typeparam name="T">Represents Name of The Table you want to query</typeparam>
/// <typeparam name="TEntity">Represents Name of The Database.</typeparam>
public class DevRepo<TEntity> where TEntity : DbContext, new()
{
#region Properties
private readonly TEntity db;
#endregion
#region Constructor
public DevRepo(TEntity _db)
{
db = _db;
}
#endregion
#region Methods
public List<T> GetItems<T>(Expression<Func<T, bool>> predicate) where T : class
{
return db.Set<T>().Where(predicate).ToList();
}
public async Task<List<T>> Get_Items<T>(Expression<Func<T, bool>> predicate) where T : class
{
return await db.Set<T>().Where(predicate).ToListAsync();
}
public IQueryable<T> Query<T>() where T : class
{
return db.Set<T>();
}
public T GetItem<T>(Expression<Func<T, bool>> predicate) where T : class
{
return db.Set<T>().FirstOrDefault(predicate);
}
public async Task<T> Get_Item<T>(Expression<Func<T, bool>> predicate) where T : class
{
return await db.Set<T>().FirstOrDefaultAsync(predicate);
}
public void UpdateItem<T>(T data) where T:class
{
db.Entry(data).State = EntityState.Modified;
db.SaveChanges();
}
public async Task Update_Item<T>(T data) where T : class
{
db.Entry(data).State = EntityState.Modified;
await db.SaveChangesAsync();
}
public void UpdateItems<T>(List<T> data) where T : class
{
foreach (var item in data)
{
db.Entry(item).State = EntityState.Modified;
}
db.SaveChanges();
}
public async Task Update_Items<T>(List<T> data) where T : class
{
foreach (var item in data)
{
db.Entry(item).State = EntityState.Modified;
}
await db.SaveChangesAsync();
}
public void DeleteItem<T>(T data) where T : class
{
db.Entry(data).State = EntityState.Deleted;
db.SaveChanges();
}
public async Task Delete_Item<T>(T data) where T : class
{
db.Entry(data).State = EntityState.Deleted;
await db.SaveChangesAsync();
}
public void DeleteItems<T>(List<T> data) where T : class
{
foreach (var item in data)
{
db.Entry(item).State = EntityState.Deleted;
}
db.SaveChanges();
}
public async Task Delete_Items<T>(List<T> data) where T : class
{
foreach (var item in data)
{
db.Entry(item).State = EntityState.Deleted;
}
await db.SaveChangesAsync();
}
public T AddItem<T>(T data) where T : class
{
db.Entry(data).State = EntityState.Added;
db.SaveChanges();
return db.Set<T>().LastOrDefault();
}
public async Task<T> Add_Item<T>(T data) where T : class
{
db.Entry(data).State = EntityState.Added;
await db.SaveChangesAsync();
return db.Set<T>().LastOrDefault();
}
public void AddItems<T>(List<T> data) where T : class
{
db.Set<T>().AddRange(data);
db.SaveChanges();
}
public async Task Add_Items<T>(List<T> data) where T : class
{
db.Set<T>().AddRange(data);
await db.SaveChangesAsync();
}
#endregion
}
}
หากผมต้องการทำ Insert , Update , Delete , Fileter เพียงแค่ส่ง Table , Columns หรือ parameter ที่ยืดหยุดกับทุกๆ Table จะสามารถทำได้มั้ยครับ
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.Threading.Tasks;
using System.Windows.Forms;
namespace Training_Management
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSubmit_Click(object sender, EventArgs e)
{
using (var db = new Model.TEST_AppEntities())
{
}
}
private void txtDelete_Click(object sender, EventArgs e)
{
using (var db = new Model.TEST_AppEntities())
{
}
}
}
}
-------------------------------------------------
อันนี้ Code เก่าที่เคยเขียน รู้สึกว่าจะมีเขียน Insert update delete หลายๆ table ไม่ไหวครับ
Code (C#)
private void fnDelete(string pEmpId)
{
using (var dbEmpMst = new DatabaseConnection.IT_AppEntities())
{
var dsEmpMst = (from c in dbEmpMst.HR_EMP_MST where c.empId == pEmpId select c).SingleOrDefault();
if (dsEmpMst != null)
{
DialogResult dialogResult = MessageBox.Show("Do you want to delete " + tbEmpId.Text + " ( " + tbFirstName.Text + " " + tbLastName.Text + " )", "Delete ?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
dbEmpMst.HR_EMP_MST.Remove(dsEmpMst);
MessageBox.Show("DELETE SUCCESS !!!!", "Information...", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (dialogResult == DialogResult.No)
{
return;
}
}
dbEmpMst.SaveChanges();
}
fnClearTextBox();
fnLoaddvgEmpMst();
}
private void fnInsertUpdate()
{
if (fnValidate() == false) return;
using (var dbEmpMst = new DatabaseConnection.IT_AppEntities())
{
var dsEmpMst = (from c in dbEmpMst.HR_EMP_MST
where c.empId == tbEmpId.Text
select c).FirstOrDefault();
if (dsEmpMst != null)
{
//MessageBox.Show(cbTH_AMPHURES.SelectedValue.ToString());
//MessageBox.Show(cbTH_AMPHURES.Text.ToString());
try
{
dsEmpMst.empId = (tbEmpId.Text == "" ? null : tbEmpId.Text);
dsEmpMst.deptCode = cbDeptCode.SelectedValue == null ? null : cbDeptCode.SelectedValue.ToString();
dsEmpMst.divCode = cbDivCode.SelectedValue == null ? null : cbDivCode.SelectedValue.ToString();
dsEmpMst.labor = cbLabor.SelectedValue == null ? null : cbLabor.SelectedValue.ToString();
dsEmpMst.namePrefix = cbNamePrefix.SelectedValue == null ? null : cbNamePrefix.SelectedValue.ToString();
dsEmpMst.namePrefixEng = cbNamePrefixEng.SelectedValue == null ? null : cbNamePrefixEng.SelectedValue.ToString();
dsEmpMst.positionCode = cbPositionCode.SelectedValue == null ? null : cbPositionCode.SelectedValue.ToString();
dsEmpMst.sex = cbSex.SelectedValue == null ? null : cbSex.SelectedValue.ToString();
dsEmpMst.state = 1;
dsEmpMst.workState = cbWorkState.SelectedValue.ToString();
dsEmpMst.birthDate = DateTime.Parse(dtBirthDate.Value.ToString("yyyy-MM-dd 00:00:00.000"));
dsEmpMst.startWorkDate = DateTime.Parse(dtStartWorkDate.Value.ToString("yyyy-MM-dd 00:00:00.000"));
dsEmpMst.age = tbAge.Text == "" ? 0 : short.Parse(tbAge.Text);
dsEmpMst.firstName = tbFirstName.Text == "" ? null : tbFirstName.Text;
dsEmpMst.firstNameEng = tbFirstNameEng.Text == "" ? null : tbFirstNameEng.Text;
dsEmpMst.lastName = tbLastName.Text == "" ? null : tbLastName.Text;
dsEmpMst.lastNameEng = tbLastnameEng.Text == "" ? null : tbLastnameEng.Text;
dsEmpMst.nickName = tbNickName.Text == "" ? null : tbNickName.Text;
dsEmpMst.idCardNumber = tbIdCardNumber.Text == "" ? null : tbIdCardNumber.Text;
dsEmpMst.mobilePhone = tbMobilePhone.Text == "" ? null : tbMobilePhone.Text;
if(tbPresentAddress.Text != "บ้านเลขที่ : - หมู่ที่ : - หมู่บ้าน - ถนน - ตำบล อำเภอ จังหวัด")
{dsEmpMst.presentAddress = tbPresentAddress.Text == "" ? null : tbPresentAddress.Text;}
dsEmpMst.presentZipCode = tbPresentZipCode.Text == "" ? null : tbPresentZipCode.Text;
//dsEmpMst.endWorkDate = (tbEndWorkDate.Text == "__/__/____" ? DateTime.Today : DateTime.Parse(tbEndWorkDate.TextMaskFormat.ToString("yyyy-MM-dd 00:00:00.000")));
dsEmpMst.fsScan = (cbFsState.SelectedValue.ToString() == "1" ? true : (cbFsState.SelectedValue.ToString() == "0" ? false : true));
//(short.Parse(tbFsState.SelectedValue == null ? 0 : tbFsState.SelectedValue.ToString()));
dsEmpMst.UpdateDate = DateTime.Now;
dsEmpMst.UpdatedBy = DataAccessObject.FunctionGlobal.UserGet.getUser().ToString();
if (tbEmpImage.Text != "")
{dsEmpMst.empImage = this.pcEmpImage.ImageLocation == null ? null : oFunctionGlobal.fnConvertFileToByte(this.pcEmpImage.ImageLocation);}
dsEmpMst.emailAddress = tbEmail.Text == "" ? null : tbEmail.Text;
dsEmpMst.OjtDate = (tbOjtDate.Text == "__/__/____" ? null : tbOjtDate.Text );
dsEmpMst.tel = tbTel.Text == "" ? null : tbTel.Text;
dsEmpMst.TH_PROVINCES = cbTH_PROVINCES.Text == "" ? 0 : cbTH_PROVINCES.SelectedValue == null ? 0 : int.Parse(cbTH_PROVINCES.SelectedValue.ToString());
dsEmpMst.TH_AMPHURES = cbTH_AMPHURES.Text == "" ? 0 : cbTH_AMPHURES.SelectedValue == null ? 0 : int.Parse(cbTH_AMPHURES.SelectedValue.ToString());
dsEmpMst.TH_DISTRICTS = cbTH_DISTRICTS.Text == "" ? 0 : cbTH_DISTRICTS.SelectedValue == null ? 0 : int.Parse(cbTH_DISTRICTS.SelectedValue.ToString());
dsEmpMst.TH_HouseNumber = tbHomeId.Text == "" ? null : tbHomeId.Text;
dsEmpMst.TH_Moo = tbMoo.Text == "" ? 0 : int.Parse(tbMoo.Text);
dsEmpMst.TH_Village = tbVillage.Text == "" ? null : tbVillage.Text;
dsEmpMst.TH_Road = tbRoad.Text == "" ? null : tbRoad.Text;
dbEmpMst.SaveChanges();
MessageBox.Show("UPDATE SUCCESS !!!!", "Information...", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else if (dsEmpMst == null)
{
//dtStartWorkDate.Format = DateTimePickerFormat.Custom;
try
{
var insert = new HR_EMP_MST();
insert.empId = (tbEmpId.Text == "" ? null : tbEmpId.Text);
insert.deptCode = cbDeptCode.SelectedValue == null ? null : cbDeptCode.SelectedValue.ToString();
insert.divCode = cbDivCode.SelectedValue == null ? null : cbDivCode.SelectedValue.ToString();
insert.labor = cbLabor.SelectedValue == null ? null : cbLabor.SelectedValue.ToString();
insert.namePrefix = cbNamePrefix.SelectedValue == null ? null : cbNamePrefix.SelectedValue.ToString();
insert.namePrefixEng = cbNamePrefixEng.SelectedValue == null ? null : cbNamePrefixEng.SelectedValue.ToString();
insert.positionCode = cbPositionCode.SelectedValue == null ? null : cbPositionCode.SelectedValue.ToString();
insert.sex = cbSex.SelectedValue == null ? null : cbSex.SelectedValue.ToString();
insert.state = 1;
insert.workState = cbWorkState.SelectedValue.ToString();
insert.birthDate = DateTime.Parse(dtBirthDate.Value.ToString("yyyy-MM-dd 00:00:00.000"));
insert.startWorkDate = DateTime.Parse(dtStartWorkDate.Value.ToString("yyyy-MM-dd 00:00:00.000"));
insert.age = (tbAge.Text == "" ? 0 : short.Parse(tbAge.Text));
insert.firstName = (tbFirstName.Text == "" ? null : tbFirstName.Text);
insert.firstNameEng = (tbFirstNameEng.Text == "" ? null : tbFirstNameEng.Text);
insert.lastName = (tbLastName.Text == "" ? null : tbLastName.Text);
insert.lastNameEng = (tbLastnameEng.Text == "" ? null : tbLastnameEng.Text);
insert.nickName = (tbNickName.Text == "" ? null : tbNickName.Text);
insert.idCardNumber = (tbIdCardNumber.Text == "" ? null : tbIdCardNumber.Text);
insert.mobilePhone = (tbMobilePhone.Text == "" ? null : tbMobilePhone.Text);
insert.presentAddress = (tbPresentAddress.Text == "" ? null : tbPresentAddress.Text);
insert.presentZipCode = (tbPresentZipCode.Text == "" ? null : tbPresentZipCode.Text);
//insert.endWorkDate = (tbEndWorkDate.Text == "__/__/____" ? DateTime.Today : DateTime.Parse(tbEndWorkDate.TextMaskFormat.ToString("yyyy-MM-dd 00:00:00.000")));
insert.fsScan = (cbFsState.SelectedValue.ToString() == "1" ? true : (cbFsState.SelectedValue.ToString() == "0" ? false : true));
insert.CreateDate = DateTime.Now;
insert.UpdateDate = DateTime.Now;
insert.CreatedBy = DataAccessObject.FunctionGlobal.UserGet.getUser().ToString();
insert.UpdatedBy = DataAccessObject.FunctionGlobal.UserGet.getUser().ToString();
if (tbEmpImage.Text != "")
{
insert.empImage = oFunctionGlobal.fnConvertFileToByte(this.pcEmpImage.ImageLocation);
}
insert.emailAddress = tbEmail.Text == "" ? null : tbEmail.Text;
insert.OjtDate = (tbOjtDate.Text == "__/__/____" ? null : tbOjtDate.Text);
insert.tel = tbTel.Text == "" ? null : tbTel.Text;
insert.TH_AMPHURES = cbTH_AMPHURES.SelectedValue == null ? 0 : int.Parse(cbTH_AMPHURES.SelectedValue.ToString());
insert.TH_DISTRICTS = cbTH_DISTRICTS.SelectedValue == null ? 0 : int.Parse(cbTH_DISTRICTS.SelectedValue.ToString());
insert.TH_PROVINCES = cbTH_PROVINCES.SelectedValue == null ? 0 : int.Parse(cbTH_PROVINCES.SelectedValue.ToString());
insert.TH_HouseNumber = tbHomeId.Text == "" ? null : tbHomeId.Text;
insert.TH_Moo = tbMoo.Text == "" ? 0 : int.Parse(tbMoo.Text);
insert.TH_Village = tbVillage.Text == "" ? null : tbVillage.Text;
insert.TH_Road = tbRoad.Text == "" ? null : tbRoad.Text;
dbEmpMst.HR_EMP_MST.Add(insert);
dbEmpMst.SaveChanges();
MessageBox.Show("INSERT SUCCESS !!!!", "Information...", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//fnClearTextBox();
fnLoaddvgEmpMst();
}
}
Tag : .NET, Ms SQL Server 2012, LINQ, Entity Framework (EF), MVC, VS 2017 (.NET 4.x)
ประวัติการแก้ไข 2019-04-24 14:48:26 2019-04-25 11:45:57
Date :
2019-04-24 14:43:33
By :
jaypang
View :
2971
Reply :
16
ถ้าไปเน็นที่ฝั่ง sql sever จะเบาลงไม๊ครับ
ลองเขียน sql procedure มาใช้ดูครับ เผื่อจะลดการทำงานลง
Date :
2019-04-25 10:41:16
By :
lamaka.tor
Update : ตอนนี้สามารถทำ Insert ได้แล้ว แต่ยังไม่สามารถเรียกใช้ คลาส อื่นๆ ได้ คงเพราะขาดความเข้าใจ
พี่ๆ คนไหนพอจะอธิบายเป็นตัวอย่างได้บ้างครับ
กำลังจะทำ Delete แต่ยังทำไม่สำเร็จ
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.Threading.Tasks;
using System.Windows.Forms;
using OreoJam;
namespace Training_Management
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Insert
private void btnSubmit_Click(object sender, EventArgs e)
{
var ls = new List<Model.USER_MST>();
ls.Add(new Model.USER_MST
{
username = txtUsername.Text,
user_desc = txtUser_desc.Text,
CreatedBy = "sa",
CreatedDate = DateTime.Now,
UpdatedBy = "sa",
UpdatedDate = DateTime.Now
});
var dataRepo = new DevRepo<Model.TEST_AppEntities>(new Model.TEST_AppEntities());
dataRepo.AddItems(ls);
}
//Delete
private void txtDelete_Click(object sender, EventArgs e)
{
//DeleteItem
//Delete_Item
//DeleteItems
//เขียนแบบนี้ก็ลบได้เหมือนกัน แต่อยากจะใช้ Class ที่มีมากกว่า เพราะคิดว่าน่าจะยืดหยุ่น หากจะทำการลบแบบ 1 รายการ หรือลบแบบหลายรายการ
//var db = new Model.TEST_AppEntities();
//var itemForRemove = db.USER_MST.Find(txtUsername.Text);
//db.USER_MST.Remove(itemForRemove);
//db.SaveChanges();
}
//Class ที่ต้องการเรียกใช้
//public void DeleteItem<T>(T data) where T : class
//{
// db.Entry(data).State = EntityState.Deleted;
// db.SaveChanges();
//}
//public async Task Delete_Item<T>(T data) where T : class
//{
// db.Entry(data).State = EntityState.Deleted;
// await db.SaveChangesAsync();
//}
//public void DeleteItems<T>(List<T> data) where T : class
//{
// foreach (var item in data)
// {
// db.Entry(item).State = EntityState.Deleted;
// }
// db.SaveChanges();
//}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
Date :
2019-04-25 11:29:40
By :
jaypang
ดูแล้วก็ไม่เยอะนะครับ แต่มีการเขียนการตรวจสอบข้อมูลซ้ำเท่านั้น ลองดูดีๆ สามารถลดโค้ดได้ครึ่งเลยครับ
เช่นทำอย่างไงให้เราเขียน ตรวจสอบแค่ครั้งเดียว เพราะเห็นมี 2 ครั้ง เช่น
insert.divCode = cbDivCode.SelectedValue == null ? null : cbDivCode.SelectedValue.ToString();
Date :
2019-04-25 16:44:47
By :
บัญดิษฐ
กลับไปอ่าน #133458
--- นิสัย/สันดาน ถ้าเป็นหมาโปรแกรมเมอร์จริงฯ น่าจะแกะได้ (ทุกฯคำ ที่ผมพูดมั่วฯ อทิเช่น Dapper/Simple)
------ มันมีอีกเยอะเลยย่อยแยกออกไปอีก อทิเช่น Banana/etc...
ปล. ไม่มีใครเขียน SQL Query/Store Procedure ได้ซับซ้อนเท่าผมอีกแล้ว ผมมั่นใจ
Date :
2019-04-25 21:18:47
By :
หน้าฮี
ไอ้เหี้ยโปรแกรมเมอร์ ขี้หี
วันวันกูไม่ได้เขียนแค่ C#/VB/etc.. ภาษา หีหีหี
กูต้องคิดอะไรอีกเยอะแยะ กูต้องหางาน
Date :
2019-04-26 01:10:04
By :
หน้าฮี
@Jaypang ข้อสงสัยของคุณ ผมให้คำตอบคุณไปแล้ว
สิ่งที่ผมคิด กูจะล้ม PLC/SCADA
Date :
2019-04-26 01:28:32
By :
หน้าฮี
ถ้าต้องการให้ client ส่งอะไรมาก็ได้ เพื่อมา insert update delete ใน tool คลาสเดียว
1 ออกแบบ คลาส สำหรับ 1 field ต้องการตัวแปรอะไรบ้าง ตัวอย่าง การกรอกข้อมูลแต่ละฟีลด์สำหรับการสร้างตาราง
2 สร้าง method สำหรับ create object จากคลาสนั้น
3 นำ object ที่ได้เหล่านั้น มารวมในลิสต์ เพื่อกำหนดข้อมูลสำหรับ 1 record
4 สร้าง method สำหรับ รับค่า ลิสต์ มาตำเนินการ insert update delete
Date :
2019-04-26 14:55:34
By :
Chaidhanan
ตอบความคิดเห็นที่ : 11 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-04-26 14:55:34
รายละเอียดของการตอบ ::
ขอบคุณมากครับที่เข้าใจในสิ่งที่ผมถามครับ ผมยังไม่แม่นเรื่อง class object method เลยยังทำตามคำแนะนำพี่ไม่ได้ครับ
ปัจจุบันลอง insert, read, update, delete โดยพยายามให้อ่านง่ายและสั้นที่สุด (ต้องการกำหนด pattern เพื่อนำไปใช้กับทุกๆ Table) ได้ประมาณนี้ครับ หากมีที่ต้องปรับปรุงรบกวนแนะนำด้วยครับ เขียนแบบดิบๆ เลย
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.Threading.Tasks;
using System.Windows.Forms;
namespace TrainingManagement.Forms
{
public partial class frmTestCRUD : Form
{
public frmTestCRUD()
{
InitializeComponent();
}
private void frmTestCRUD_Load(object sender, EventArgs e)
{
FnBindDatagrid();
}
private void btnCreate_Click(object sender, EventArgs e)
{
FnCRUD("Insert");
}
private void btnRead_Click(object sender, EventArgs e)
{
FnCRUD("Read");
}
private void btnUpdate_Click(object sender, EventArgs e)
{
FnCRUD("Update");
}
private void btnDelete_Click(object sender, EventArgs e)
{
FnCRUD("Delete");
}
private void FnCRUD(String pOperation)
{
//int users_id;
string username = txtUsername.Text;
int edit_level = 0;
bool super_user_flag = false;
byte[] user_password = null;
string user_desc = txtUserDesc.Text;
Nullable<System.DateTime> password_set_date = DateTime.Now;
Nullable<System.DateTime> last_active_date = DateTime.Now;
string UpdatedBy = "Admin";
Nullable<System.DateTime> UpdatedDate = DateTime.Now;
string CreatedBy = "Admin";
Nullable<System.DateTime> CreatedDate = DateTime.Now;
using (Model.TrainingManagementEntities entities = new Model.TrainingManagementEntities())
{
try
{
Model.USER_MST uSER_MST = (from c in entities.USER_MST where c.username == username select c).FirstOrDefault();
if (pOperation == "Insert")
{
var insert = new Model.USER_MST();
insert.username = username;
insert.edit_level = edit_level;
insert.super_user_flag = super_user_flag;
insert.user_password = user_password;
insert.user_desc = user_desc;
insert.password_set_date = password_set_date;
insert.last_active_date = last_active_date;
insert.UpdatedBy = UpdatedBy;
insert.UpdatedDate = UpdatedDate;
insert.CreatedBy = CreatedBy;
insert.CreatedDate = CreatedDate;
entities.USER_MST.Add(insert);
entities.SaveChanges();
}//Insert
else if (pOperation == "Read")
{
var ds = uSER_MST;
//Binding
txtUserDesc.Text = ds.user_desc.ToString();
}//Read
else if (pOperation == "Update")
{
uSER_MST.username = username;
uSER_MST.edit_level = edit_level;
uSER_MST.super_user_flag = super_user_flag;
uSER_MST.user_password = user_password;
uSER_MST.user_desc = user_desc;
uSER_MST.password_set_date = password_set_date;
uSER_MST.last_active_date = last_active_date;
uSER_MST.UpdatedBy = UpdatedBy;
uSER_MST.UpdatedDate = UpdatedDate;
entities.SaveChanges();
}//Update
else if (pOperation == "Delete")//Delete
{
DialogResult dialogResult = MessageBox.Show("Do you want to delete " + uSER_MST.username.ToString() , "Delete ?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
entities.USER_MST.Remove(uSER_MST);
entities.SaveChanges();
}
else if (dialogResult == DialogResult.No)
{
return;
}
}//Delete
else
{
return;
}
MessageBox.Show(pOperation + " Success !!!!", "Information...", MessageBoxButtons.OK, MessageBoxIcon.Information);
FnBindDatagrid();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " ( " + pOperation + " )", " Information...", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
private void FnBindDatagrid()
{
using (Model.TrainingManagementEntities entities = new Model.TrainingManagementEntities())
{
dataGridView1.DataSource = (from c in entities.USER_MST select new { c.username, c.user_desc , c.super_user_flag}).ToList();
}
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
txtUsername.Text = dataGridView1.CurrentRow.Cells["Username"].Value.ToString();
txtUserDesc.Text = dataGridView1.CurrentRow.Cells["User_Desc"].Value.ToString();
}
}
}
ประวัติการแก้ไข 2019-04-27 11:54:01
Date :
2019-04-27 11:53:15
By :
jaypang
ปัจจุบันลอง insert, read, update, delete โดยพยายามให้อ่านง่ายและสั้นที่สุด
ไม่ใช่เรื่องสั้นหรือไม่ แต่มันเป็นเรื่อง ครอบคลุมมากที่สุด
ต้องเข้าใจรูปแบบ ของฟีลด์ให้มากที่สุด
ลองหาคำสั่ง คิวรี่ เพื่อแสดง property ของ field ทุกๆ field มาดู มาวิเคราะห์ดูก่อนครับ ว่ามีอะไรบ้าง
เพ่อที่จะได้ทำเลียนแบบได้ถูก
คือตอนนี้คุณจะทำ tool เสมือน ssms (Sql Server manager service) ก็ต้องรู้เรื่อง รายละเอียดต่างๆ ให้มากที่สุด
เท่าที่ต้องการ
ผมยังไม่แม่นเรื่อง class object method เลยยังทำตามคำแนะนำพี่ไม่ได้ครับ
ก็ที่คุณกำลังเขียนอยู่นี้ มันเป็น class object method ทั้งนั้นเลย มันเป็น base ของ C# นะครับ 555555
Date :
2019-04-27 12:51:46
By :
Chaidhanan
Windows Form Application มันไม่ตายแต่มันก็ไม่โต
Web Forms Application มันไม่ตายแต่ก็ไม่โต (ผมพึ่งเข้าใจว่าทำไม Microsoft ถึงถอดออกจาก .NET Core)
...
...
...
อีกเยอะเลย ไม่ตายแต่ไม่โต (อทิเช่น งานที่เขียนขึ้นมาและใช้ได้ในวงจำกัด)
--- เก่งแต่ในบ้าน/เห่าไม่เป็นเมื่อออกมานอกรั้ว (หมา)
+55555
ปล. ผมก็เห่าเก่งเหมือนกัน/เลียเก่งด้วย ลิ้นยาวพอพอกับเปรต
Date :
2019-05-01 10:52:16
By :
หน้าฮี
@Jaypang
คุณไม่จำเป็นต้อง คิดทันผม
--- SQL Query เดียวกันมัน Insert/Update/Delete/Select ต้องใช้ได้กับทุกฯ DataBase/ทุกฯ OS/ทุกฯ plateform/ทุกฯ ภาษาโปรแกรมมิ่ง
ไม่มีสองในความต้องการเดียวกัน (Partial)
Date :
2019-05-01 11:09:00
By :
หน้าฮี
Load balance : Server 04