[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

留言

張貼留言