[C#] SQL Server 將資料表換成物件
用一個簡單的示範做個筆記。
SQL 中的資料
首先如果 SQL Server 本機「 . 」中有 mydb 資料庫,還有 DrinkData 資料表,欄位有 int Id、nvarchar(20) Name 和 int Price,語法與結果如下:
類別
希望將這些資料轉成 C# 中的物件,物件 Drink 有 int Id、string Name 和 int Price,類別中還有靜態的 List<Drink> drinkList 之後要用來存放從 SQL 中讀取資料轉成的 Drink 物件:
namespace SqlToCSharpDemo { class Drink { public static List<Drink> drinkList = new List<Drink>(); // 靜態 List public int Id { get; set; } // 對應 SQL 中的 Id public string Name { get; set; } // 對應 SQL 中的 Name public int Price { get; set; } // 對應 SQL 中的 Price public Drink(int id, string name, int price) { this.Id = id; this.Name = name; this.Price = price; } } }
將資料表轉換成物件
有了類別定義就可以在 Form 中實體化物件,將 SQL Server 查詢出來的資料存放供之後使用:
using System.Data.SqlClient; // SQL CRUD 需使用此命名空間 namespace SqlToCSharpDemo { public partial class Form1 : Form { string connectionString; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder(); scsb.DataSource = "."; // server 位置 scsb.InitialCatalog = "mydb"; // 資料庫名 scsb.IntegratedSecurity = true; // Windows登入驗證時 //scsb.IntegratedSecurity = false; //scsb.UserID = "user"; // 用帳號密碼驗證時 //scsb.Password = "passwd"; connectionString = scsb.ToString(); SqlConnection connection = new SqlConnection(connectionString); connection.Open(); // 開啓連線 string statement = "select * from DrinkData"; SqlCommand cmd = new SqlCommand(statement, connection); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { // 將讀出資料用實體化物件接各個欄位 Drink data = new Drink(Convert.ToInt32(reader["Id"]), Convert.ToString(reader["Name"]), Convert.ToInt32(reader["Price"])); Drink.drinkList.Add(data); // 將每個物件存放在 List 中供之後使用 } reader.Close(); connection.Close(); // 關閉連線釋放資源 } } }
如何利用
有了 static 的 drinkList ,就可以在專案中使用這些資料,例如讓 ListBox 的項目是這些飲料品項名 Name:
foreach(Drink data in Drink.drinkList) { listBox1.Items.Add(data.Name); }
結果如下:
或是將這些物件用一個字典來對應,之後可以用 Id 等 primary key 的存在來查找:
Dictionary<int, Drink> findDrink = new Dictionary<int, Drink>(); foreach(Drink data in Drink.drinkList) { findDrink[data.Id] = data; // data.Id 為 key,data 為 value }
之後就能用 findDrink[4] 得到拿鐵咖啡的物件,以及 findDrink[4].Price 得到拿鐵咖啡的價錢 45
作者已經移除這則留言。
回覆刪除