Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > เรียกใช้ Class อย่างไร เพื่อให้ง่ายต่อการทำ CRUD (C#,EF,SQL)



 

เรียกใช้ Class อย่างไร เพื่อให้ง่ายต่อการทำ CRUD (C#,EF,SQL)

 



Topic : 133510



โพสกระทู้ ( 46 )
บทความ ( 0 )



สถานะออฟไลน์




สวัสดีครับพี่ๆ ทุกท่าน วันนี้มีเรื่องมาขอไอเดีย ขอคำปรึกษาดังนี้ครับ
1. ต้องการทำ Insert , Update , Delete , Filter ให้ง่ายต่อการเขียนโค้ด เพราะคิดว่าจะมีหลาย Table แน่ๆ ซึ่งได้ทำการซึ่งมาจากอินเตอร์เน็ทพบว่าส่วนใหญ่จะเขียนเป็น ASP แต่ตัวผมต้องการทำเป็น Windows Application หรือ Windows Form นั่นเอง พอไล่หาโค้ดไป ก็เจอ Code ตัวอย่างนึง แต่ผมนำมาใช้ไม่เป็น จะขอให้พี่ๆ แนะนำ, อธิบาย หรือยกตัวอย่างให้หน่อยครับ

ผมมี Model ดังรูปด้านล่างนี้ครับ
1111
1112

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
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-04-24 14:43:33 By : jaypang View : 2971 Reply : 16
 

 

No. 1



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ถ้าไปเน็นที่ฝั่ง sql sever จะเบาลงไม๊ครับ
ลองเขียน sql procedure มาใช้ดูครับ เผื่อจะลดการทำงานลง






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 10:41:16 By : lamaka.tor
 


 

No. 2



โพสกระทู้ ( 46 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : lamaka.tor เมื่อวันที่ 2019-04-25 10:41:16
รายละเอียดของการตอบ ::
ตอนทำ Insert, Read, Update, Delete อยากทำที่ Client ครับ
ผมเห็นตัวอย่างในคลิป เค้าส่ง Parameter ไปที่ Stored Procudure แล้วค่อยดำเนินการ Insert, Update, Delete ซึ่งผมคิดว่ามันจะทำให้ Stored มีมากขึ้นโดยไม่จำเป็นครับ

ปกติแล้วผมจะใช้ Stored เพื่อคำนวณหรือทำชุดคำสั่งที่ใช้ข้อมูลหลายๆ table มากกว่าครับ
และใช้ Stored ดึงข้อมูลสำหรับไปทำรายงานครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 11:23:53 By : jaypang
 

 

No. 3



โพสกระทู้ ( 46 )
บทความ ( 0 )



สถานะออฟไลน์


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
 


 

No. 4



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ถ้าไม่อยากเขียน class เอง ลองใช้ datawizard ดู ครับ

https://www.youtube.com/watch?v=gp6lZAeqpTk
https://www.thaicreate.com/community/csharp-datasource-wizard.html

พอเราลากลง ฟอร์ม มันจะมีให้ทั้ง Insert , Update , Delete , Fileter มาเลย ครับ
สามารถ binding กับ control ต่างๆ ไม่ว่า จะ textboc label combobox datetimepicker และ อื่นๆ ได้อีกโดยที่เราแทบไม่ต้องมานั่ง เขียนโค้ด เลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 11:52:12 By : lamaka.tor
 


 

No. 5

Guest


ดูแล้วก็ไม่เยอะนะครับ แต่มีการเขียนการตรวจสอบข้อมูลซ้ำเท่านั้น ลองดูดีๆ สามารถลดโค้ดได้ครึ่งเลยครับ
เช่นทำอย่างไงให้เราเขียน ตรวจสอบแค่ครั้งเดียว เพราะเห็นมี 2 ครั้ง เช่น
insert.divCode = cbDivCode.SelectedValue == null ? null : cbDivCode.SelectedValue.ToString();
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 16:44:47 By : บัญดิษฐ
 


 

No. 6

Guest


กลับไปอ่าน #133458
--- นิสัย/สันดาน ถ้าเป็นหมาโปรแกรมเมอร์จริงฯ น่าจะแกะได้ (ทุกฯคำ ที่ผมพูดมั่วฯ อทิเช่น Dapper/Simple)
------ มันมีอีกเยอะเลยย่อยแยกออกไปอีก อทิเช่น Banana/etc...


ปล. ไม่มีใครเขียน SQL Query/Store Procedure ได้ซับซ้อนเท่าผมอีกแล้ว ผมมั่นใจ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 21:18:47 By : หน้าฮี
 


 

No. 7

Guest


@TOR_CHEMISTRY

Quote:
ถ้าไม่อยากเขียน class เอง ลองใช้ datawizard ดู ครับ

https://www.youtube.com/watch?v=gp6lZAeqpTk
https://www.thaicreate.com/community/csharp-datasource-wizard.html

พอเราลากลง ฟอร์ม มันจะมีให้ทั้ง Insert , Update , Delete , Fileter มาเลย ครับ
สามารถ binding กับ control ต่างๆ ไม่ว่า จะ textboc label combobox datetimepicker และ อื่นๆ ได้อีกโดยที่เราแทบไม่ต้องมานั่ง เขียนโค้ด เลย



งานเล็กฯ เด็กฯ เป็นอาจารย์ตามมหาวิทยาลัย มูลค่างานสำหรับคนเงินเดือน ไม่เกินแสน/หรือมากกว่านั้น มันทำได้
สำหรับงานสร้างสรรค์ อทิเช่น จีเหอ (10 G) สิ่งที่คุณรู้/มั่นใจ ไม่พอ (ผมไม่กล้าใช้คำว่า พอเพียง)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 21:31:30 By : หน้าฮี
 


 

No. 8

Guest


Quote:
https://www.youtube.com/watch?v=NK4zec2S1CE

ป่านฉะนี้คงคอยหวัง...
...
...
...
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-25 21:35:06 By : หน้าฮี
 


 

No. 9

Guest


ไอ้เหี้ยโปรแกรมเมอร์ ขี้หี
วันวันกูไม่ได้เขียนแค่ C#/VB/etc.. ภาษา หีหีหี

กูต้องคิดอะไรอีกเยอะแยะ กูต้องหางาน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-26 01:10:04 By : หน้าฮี
 


 

No. 10

Guest


@Jaypang ข้อสงสัยของคุณ ผมให้คำตอบคุณไปแล้ว

สิ่งที่ผมคิด กูจะล้ม PLC/SCADA
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-26 01:28:32 By : หน้าฮี
 


 

No. 11



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


ถ้าต้องการให้ 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
 


 

No. 12



โพสกระทู้ ( 46 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 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();
        }
    }
}


5



ประวัติการแก้ไข
2019-04-27 11:54:01
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-04-27 11:53:15 By : jaypang
 


 

No. 13



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


ปัจจุบันลอง 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
 


 

No. 14

Guest


จะดิบหรือว่าจะสุก มันก็ไม่แตกต่างกัน
Quote:
ปัจจุบันลอง insert, read, update, delete โดยพยายามให้อ่านง่ายและสั้นที่สุด (ต้องการกำหนด pattern เพื่อนำไปใช้กับทุกๆ Table) ได้ประมาณนี้ครับ หากมีที่ต้องปรับปรุงรบกวนแนะนำด้วยครับ เขียนแบบดิบๆ เลย


ผมมั่วฯฯฯฯฯ แต่จริงฯแล้วหาเป็นเช่นนั้นไม่ มีจริงอยู่เรื่องเดียวเท่านั้นคือ "ผมเมา/ไอ้ขี้เมา"
--- กินข้าวและขี้ในเวลาเดียวกันได้

Dapper
Quote:
https://dapper-tutorial.net/execute

Quote:
Dapper--> Simple.CRUD


ลองทำความเข้าใจดู และสรุปออกมาเป็นข้อฯ เพื่อเปรียบเทียบกับสิ่งที่คุณกำลังทำอยู่

ผมเข้าใจเจตนาของคุณ มันเป็นสิ่งที่ดี
แต่ถ้าผมมัวยุ่งอยู่กับภาษา C#/VB/etc... ผมคงไม่ต้องทำอย่างอื่นแล้ว
ผมไม่ได้มีส่วนได้ส่วนเสีย กำไร/ขาดทุน ณ.ที่แห่งนี้
--- แต่สิ่งที่ผมอยากได้มากกว่านั้น มันคือคำว่า มิตรภาพ


ดูนี่ดูนี่ดูนี่

Quote:
https://www.prosoftibiz.com/Article/Detail/54927

--- คุณเห็นเหมือนที่ผมเห็นไหม? (มันมีช่องว่างอีกตั้งมากมายที่เราเข้าไปสอดได้)
--- ดูดีดี
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-01 10:40:43 By : หน้าฮี
 


 

No. 15

Guest


Windows Form Application มันไม่ตายแต่มันก็ไม่โต
Web Forms Application มันไม่ตายแต่ก็ไม่โต (ผมพึ่งเข้าใจว่าทำไม Microsoft ถึงถอดออกจาก .NET Core)
...
...
...

อีกเยอะเลย ไม่ตายแต่ไม่โต (อทิเช่น งานที่เขียนขึ้นมาและใช้ได้ในวงจำกัด)
--- เก่งแต่ในบ้าน/เห่าไม่เป็นเมื่อออกมานอกรั้ว (หมา)

+55555


ปล. ผมก็เห่าเก่งเหมือนกัน/เลียเก่งด้วย ลิ้นยาวพอพอกับเปรต
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-01 10:52:16 By : หน้าฮี
 


 

No. 16

Guest


@Jaypang


คุณไม่จำเป็นต้อง คิดทันผม
--- SQL Query เดียวกันมัน Insert/Update/Delete/Select ต้องใช้ได้กับทุกฯ DataBase/ทุกฯ OS/ทุกฯ plateform/ทุกฯ ภาษาโปรแกรมมิ่ง

ไม่มีสองในความต้องการเดียวกัน (Partial)

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-05-01 11:09:00 By : หน้าฮี
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เรียกใช้ Class อย่างไร เพื่อให้ง่ายต่อการทำ CRUD (C#,EF,SQL)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่