วันก่อนผมเขียนเกี่ยวกับการสร้าง app ดึงข้อมูลจากฐานข้อมูล SQL Server 2008 r2 ไปแล้วซึ่งเขียนง่ายไม่ซับซ้อนแล้ว ผมว่ายังมีง่ายกว่านั้น แต่คราวนี้ผมต้องการดึง table จากไฟล์นามสกุล .db ลูกหนึ่งซึ่งค้นพี่ gooไปๆมาๆก็มาลงที่ SQLite {O_O} เอ๊ะนี้มีใช้เฉพาะเว็บไม่ใช่หรือ สรุปผู้พัฒนาเค้าสร้าง libary สำหรับใช้บน Win และ android มาด้วยซึ่งสะดวกเอามากๆ
sqlite เหมาะกับโปรแกรมที่ run แบบ stand alone และที่สำคัญ "ฟรี" โดยสามารถดาว์นโหลดไลบราลี่มาใช้งานได้ โดยการใช้งาน sqlite บน c# ก็ไม่ได้ใช้ code ที่สลับซับซ้อนเพราะ syntax คล้ายๆกับ sqlconnection นั่นแหละ
มาเริ่มกันเลยครับ Download libary .dll ตัวล่าสุดจาก Offical website ของ SQLite เค้าลงมา เลือกให้ถูกด้วยนะครับว่า จะเป็นแบบ 64 bit หรือ 32 bit หรือจะโหลดตัว install มาติดตั้งก็ได้ครับ ง่ายดี
หลังจากนั้น Install เลยครับ แล้ว add reference ให้ project ของเราซะ ตัวที่ต้องใช้งานมี
System.Data.SqlClient;
System.Data.SQLite;
เท่านี้เครื่องเราก็พร้อมใช้งานแล้วครับ ลุยขั้นตอนต่อไปเลย
เรื่อง connect string ศึกษาเพิ่มเติมได้ที่ website นี้ครับ http://www.connectionstrings.com/sqlite/ ซึ่งเค้ารวบรวม connection แบบต่างๆเอาไว้มีออฟชั่นเยอะแยะมากมาย แต่ผมขอเลือกแบบง่ายที่สุดก็เเล้วกัน
*หมายเหตุ เครื่องคอมผม ใช้windows 7 64 bit แต่เจอ error นี้เข้าไปหลังจากพยายามโหลด Libary ชื่อ SQLite.Interop.dll ซึ่งไปค้นหาทางแก้มา ได้ความว่าเราต้อง Prefer เป็น 64bit ถึงจะโหลดได้ >> ซึ่งต้องไป config เพิ่มที่ไฟล์ project (*.csproj) file ซึ่งคลิกขวา edit as EditPlus ได้เลยครับ แล้วเพิ่ม <Prefer32Bit>false</Prefer32Bit> เข้าไป ต่อท้ายใน tag <PropertyGroup>
แต่ถ้าไม่เจอปัญหานี้ก็รอดตัวไปครับ
มาลุยโค๊ดกันเลยครับ >> ลองโค๊ดนี้กับการอ่านไฟล์ .db สักตัวนึง ถ้าใน Console Connect Complete ออกมาก็แสดงว่าเรา Connect ฐานข้อมูลสำเร็จแล้วครับ เพื่อทดลองดึงข้อมูล งั้นก็เอาฐานข้อมูลที่ sqlite แถมมาให้เลยละกัน [code ข้างล่างนี้]
using System.Text; using System.Threading.Tasks; using System.Data.SQLite; namespace sqlite { class MainClass { public static void Main(string[] args) { string dbfile = "C:\\northwindEF.db"; string connStr = "Data Source=" + dbfile + ";Version=3;Synchronous=Off;UTF8Encoding=True;"; SQLiteConnection sqlConn = null; sqlConn = new SQLiteConnection(connStr); try { sqlConn.Open(); Console.WriteLine("Connect Complete, Please Input Product Name : "); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("Error" + ex); Console.ReadLine(); } } } }
หลังจากนั่นก็จัด query บ้านๆ ไปเลยครับ โค๊ด sql select ธรรมดาที่เอาไว้ search หาข้อมูลที่เรากรอกลงไปนั้นก็คือคิวรี่ข้างล่างนี้
string query = "SELECT ProductName, QuantityPerUnit FROM Products WHERE ProductName like '" + strInput+"'";
วันนี้ขอโปรแกรมง่ายๆก่อนละกัน คราวหลังถ้ามีเวลายาวๆ จะเขียนตัวอย่างให้ละเอียดมากกว่านี้นะครับ เอาพอเป็นแนวละกัน SQLite เป็นไลบราลี่ฟรีสามารดาว์นโหลดผ่านหน้าเว็บเค้า แล้วยังมีการออกอัพเดตใหม่ๆตลอดเวลา บายครับ
[Complete Code Example] สรุปตัวอย่างโค๊ดที่ใช้ในโปรแกรม C# sqlite Connect
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SQLite; namespace sqlite { class MainClass { public static void Main(string[] args) { string dbfile = "C:\\northwindEF.db"; string connStr = "Data Source=" + dbfile + ";Version=3;Synchronous=Off;UTF8Encoding=True;"; SQLiteConnection sqlConn = null; sqlConn = new SQLiteConnection(connStr); try { sqlConn.Open(); Console.WriteLine("Connect Complete"); do { Console.WriteLine("\nPlease Input Products Name : "); string strInput = Console.ReadLine(); string query = "SELECT ProductName, QuantityPerUnit FROM Products WHERE ProductName like '" + strInput+"'"; SQLiteCommand command = new SQLiteCommand(query, sqlConn); SQLiteDataReader reader = command.ExecuteReader(); if (reader != null) { while (reader.Read()) { Console.WriteLine("Product Name : " + reader[0] + "\t ProductPrice : " + reader[1]); } } else { Console.WriteLine("No Product"); } } while (true); sqlConn.Close(); } catch (Exception ex) { Console.WriteLine("Error" + ex); Console.ReadLine(); } } } }
เป็น Console Application นะครับแต่ก็สามารถดัดแปลงให้เสดงเป็น UI สวยๆ ได้แค่เอาข้อมูลไปใสในกริดวิวของ Winform ที่เราเตรียมเอาไว้แสดงผล
1 ความคิดเห็น:
ผม ADD Interop ไม่ได้อ่ะครับ แล้วลองแก้ที่บอกแล้วก็ยังไม่ได้ออ่ะครับ พอจะมีวิธีแก้ไหมครับ
แสดงความคิดเห็น