วันศุกร์ที่ 17 กุมภาพันธ์ พ.ศ. 2560

โปรแกรม Linq กับ SQLite DataTable queryใน Visual Studio

วิธีใช้ Linq สำหรับ การ Connect กับ SQLite ใน Visual studio

กระบวนการ
1. ใน SQLite สร้าง Database และ Table ก่อน โดยใช้ SQLiteStudio ต้องใช้ Version 2,1 เท่านั้น

2. จด ชื่อ File กับ Table ใว้

3. ใน Visual studio เปิด Project ที่ต้องการ ต่อ SQLite และให้ ไปที่ Nuget Pakage Manager
 เลือก SQLite

4.  ทำการแก้ App.config

ชื่อ name ต้องตรงกับ File และ ใน Connection String ต้องตรงกับ ที่เก็บใว้
  <connectionStrings>
    <add name="myDb1" connectionString="Data Source=|DataDirectory|c:/temp/FormSQL/FormSQL/myDb1.db" 
         providerName="System.Data.SQLite.EF6" />
  </connectionStrings>

5. สร้าง Class สำหรับ SQLite file
  
using System.Data.SQLite.EF6;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace FormSQL
{
    class myDb1 : DbContext
    { // set database(DbContext) and table (DbSet) <class> of table
        public DbSet<Customer> Customer { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}

6. สร้าง Class สำหรับ Table


namespace FormSQL
{

    public class Customer
    {
        public string Id { get; set; }
        public string NAME { get; set; }
        public string SURNAME { get; set; }
        public string PHONE { get; set; }
        public double SALARY { get; set; }

       
    }
}

7. สร้างโปรแกรม ทดสอบ

 private void  testLinq()
        {
            var db1 = new myDb1();
            var aname = db1.Customer.Single(a => a.NAME == "MyName");
            aname.SALARY = 20000;
            db1.SaveChanges();
        }

แล้วดูผล จะเห็นว่า ใช้ Linq เรียก หา Record ที่ Name เท่ากับ MyName และเมื่อได้ Record Data มา ก็จะทำการแก้ไข โดย ตั้งค่า SALARY ใหม่ เป็น 20000 และ สั่ง SaveChanges() เพื่อ Update
ซึ่งเท่ากับ
การ Select * from Customer where Name='MyName'
และ Update Customer set (SALARY=2000 ) Where Name='MyName'

reference
https://github.com/JVimes/LinqSqLiteExample

// Add

  var db1 = new myDb1();
            Customer myname= new Customer();
            myname.Id="0071";
            myname.NAME = "Hello";
            myname.SURNAME="SSS";
            myname.PHONE="1234";
            myname.SALARY=100;
            db1.Customer.Add(myname);

            db1.Customer.Add(new Customer { 
            Id="009"
            NAME="Hellox"
            SURNAME="VA",
            PHONE="293993",
            SALARY=300
            });
            // commit

            db1.SaveChanges();

// Remove
   var db1 = new myDb1();
             var aname = db1.Customer.Single(a => a.NAME == "Hello");
             db1.Customer.Remove(aname);
             db1.SaveChanges();
//Select where
  var db1 = new myDb1();
            var ar1 = db1.Customer.Where(a => a.SALARY > 200).ToArray();
           
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = ar1;
            dataGridView1.Refresh();


คำสั่งที่น่าสนใจ เช่น การ เปลี่ยน Datatable เป็น Array ด้วย Linq

  var result = dt.Rows.Cast<DataRow>()
                    .Select(row => row["columnname"].ToString())

                    .ToArray();

กรณีเป็น Dictionary
  var result = dt.Rows.Cast<DataRow>()
                    .Select(row => new KeyValuePair<string, string>(row["BomID"].ToString(), row["ChildID"].ToString()))

                    .ToDictionary(x => x.Key, x => x.Value);