[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
作者已經移除這則留言。
回覆刪除