iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Modern Web

從零開始使用Microsoft MVC架構來搭建web server系列 第 21

DAY 21 從SQL Server 抓取資料到網頁上呈現

  • 分享至 

  • xImage
  •  

Model

 public class loginfo
 {
     public string Account { get; set; }
     public string Password { get; set; }
 };

Controller

public ActionResult Seeall()
{
  //用來存放資料使用的容器
    List<loginfo>users = new List<loginfo>();
    //SQL連接字串
    string connstr = "Data Source=CSIE-TEST2;Initial Catalog=Student_data;User ID=TEST03;Password=*****;Encrypt=False";
    SqlConnection conn = new SqlConnection(connstr);
    conn.Open();
    //SQL語法,我們的目的是抓取Login這張資料表中的所有資料
    SqlCommand cmd = new SqlCommand("select * from Login");
    cmd.Connection = conn;
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read()) // 逐行讀取查詢結果
    {
      //創建使用者物件
        loginfo user = new loginfo
        {
            Account = reader["Account"].ToString(),  // 資料表中的欄位名是 Username
            Password = reader["Password"].ToString()   // 資料表中的欄位名是 Password
        };

        users.Add(user);  // 將每一筆資料加入容器
    }
    ViewBag.users = users;
    return View();
}
}

解釋:在上述語法當中前面與資料庫溝通的部分基本不變,只是下SQL語法時必須根據需求來下,中間我們使用的是While迴圈來讀取資料,他會將在資料庫搜尋到的資料一一讀取,每一筆資料都會變成擁有Account、Password兩個屬性的物件並放在list列表當中,ViewBag用於Controller與view的資料傳輸,因此我們就使用ViewBag將資料傳輸至前端
注意事項
1.SQL連接字串中的密碼必須改成自己設置的使用者密碼
2.List在聲明時的語法是List<數值型態> 名稱 = new List<數值型態>(),這邊相當於數值型態是loginfo,如果只想單純放入字串或整數數字也可以這樣寫List<int> num = new List<int>()
3.在While迴圈中創建使用者資料時reader["Account"]裡面的Account必須與資料表中的欄位名稱一模一樣
view

<h2>Seeall</h2>
<!-- 使用我們寫在model資料夾的class -->
@using new_project.Models;
<!-- 接收controller的資料 -->
@{
   List<loginfo> users = ViewBag.users;
}

<h2>Login Information</h2>

<table class="table">
   <thead>
       <tr>
           <th>Username</th>
           <th>Password</th>
       </tr>
   </thead>
   <tbody>
   <!--使用迴圈讀取list中的資料-->
       @foreach (loginfo user in users)
       {
       <tr>
           <td>@user.Account</td>  <!-- 顯示 Username -->
           <td>@user.Password</td>  <!-- 顯示 Password -->
       </tr>
       }
   </tbody>
</table>

解釋:因為我們的資料型態是自定義的,所以我們會先引入model內的class,不然編譯器其實不會知道我們傳過來的資料是甚麼型態,之後就接收從controller收到的資料,然後使用"foreach"類似迴圈,將資料逐行讀出後顯示。

總結:我們在資料庫抓取的資料一般會使用自訂義的資料型態(class)相當於我這次案例的loginfo來存放,再利用list存放多筆資料,會使用ViewBag來完成Conntroller與view的資料傳遞,在View中可以使用foreach將資料顯示出來,就可以完成這次的實作了。


上一篇
DAY 20 從SQL Server抓取資料到網頁上面呈現
下一篇
DAY 22 實作案例_技術總結
系列文
從零開始使用Microsoft MVC架構來搭建web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言