iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Software Development

ASP.NET MVC基礎修練:從菜開始系列 第 8

Day-08 ASP.NET MVC 之 ADO.NET 資料庫

  • 分享至 

  • xImage
  •  

簡述

當使用ADO.NET技術操作資料庫時,首先必須建立與資料庫的連接。
無論資料庫位於何處,都必須有一個地址或識別符來找到它,
這個地址可以是IP地址,也可以是本地或區域網路中的路徑。
我們使用連接字串來表示這個地址或主機名稱

配置資料庫連線字串

通常,我們會將資料庫連接字串配置在Web.config文件中,這樣做的好處是以後可以輕鬆修改連接字串。
首先,打開Web.config文件,找到
...部分。
然後,在此部分下添加
...部分,
並配置資料庫連接字串,如下所示:

<connectionStrings> <add name="MyConnectionString" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=MvcDb;uid=myUsername;pwd=myPassword;" /> </connectionStrings>

在上述,我們使用標籤添加資料庫連接字串,
其中屬性的含義如下:
name:用於識別資料庫連接字串的名稱。
providerName:指定提供程序的名稱,通常為System.Data.SqlClient。
connectionString:指定實際的資料庫連接字串。
連接字串的具體配置如下:
Data Source:用於指定資料庫的連接地址,如果是本地資料庫,可以使用圓點(.)表示,如果是遠程服務器,可以使用IP地址,例如:192.168.1.101等。
Initial Catalog:指定要操作的資料庫的名稱,這裡使用的是MVC30Db。
uid:表示用於連接資料庫的用戶名。
pwd:表示用於連接資料庫的密碼。
這樣配置連接字串可以使我們輕鬆管理資料庫連接信息。

https://ithelp.ithome.com.tw/upload/images/20230923/20106640rfaHen27bE.jpg

建立 DBHelper 類別庫

在專案的「Models」資料夾中建立一個名稱為 DBHelper.cs 的類別庫
https://ithelp.ithome.com.tw/upload/images/20230923/20106640yTLWAUGf4B.jpg

現在,我們將運用 ADO.NET 技術,來將通常用於項目的新增、刪除、修改、查詢、顯示等操作封裝成方法。
建立 DBHelper 類別庫的目的是將所有與資料庫有關的操作都集中處理在這個類別中。
這樣做有助於封裝和提高代碼的重用性。

取得資料庫連接字串

DBHelper.cs 類別庫中引用如下命名空間

using System.Data;
using System.Data.SqlClient;
using System.Configuration;

System.Data.SqlClient 命名空間主要處理 ADO.NET 的相關操作。
System.Configuration 命名空間主要處理 Web.config 配置文件的相關操作。
System.Data 命名空間處理與內存資料(如 DataTable/DataSet)相關的操作。


在 DBHelper.cs 類別庫中,我們可以建立一個建構函式,並在這個建構函式中獲取資料庫連接字串:

public class DBHelper
    {
        string str = ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString;
    }

https://ithelp.ithome.com.tw/upload/images/20230923/20106640EGIc9nGV5m.jpg

建立 SqlConnection 物件

在 ADO.NET 技術中,SqlConnection 物件用於建立與資料庫的連接。
SqlConnection 類別位於 System.Data.SqlClient 命名空間中
。由於這個物件在任何與資料庫操作有關的動作之前都需要使用,
因此我們會將它建立在類別層級的範圍中,並在建構函式內實例化這個類別。
以下是程式碼

https://ithelp.ithome.com.tw/upload/images/20230923/201066402FDBqYDtwI.jpg

ExecuteNonQuery() 方法

在 DBHelper.cs 類庫中,我們將封裝一個 ExecuteNonQuery(string sql) 方法,
該方法接受一個 string 型別的參數,用於傳遞需要執行的 SQL 語句,
並透過 ADO.NET 技術在資料庫表中執行相應的操作。

ExecuteNonQuery() 方法主要用於表格數據的新增、刪除和修改操作。
它會返回影響的記錄行數。以下是程式碼

https://ithelp.ithome.com.tw/upload/images/20230923/20106640DrTISeI2xH.jpg

public int ExecuteNonQuery(string sql)
        {
            // 打開資料庫連接
            conn.Open();
            // 實例化 SqlCommand 物件,並將 SQL 語句和 SqlConnection 參數傳入
            SqlCommand sqlCommand = new SqlCommand(sql, conn);
            // 執行 SQL 語句,並返回增/刪/修改後的記錄行數
            int count = sqlCommand.ExecuteNonQuery();
            // 關閉資料庫連接
            conn.Close();
            // 返回增/刪/修改後的記錄行數給使用者
            return count;
        }

GetSqlDataReader()方法

在 ADO.NET 中,SqlDataReader 物件表示提供一種從 SQL Server
資料庫中讀取由上而下方式。 使用 SqlDataReader 物件從數據
庫中讀取數據速度比較快,是一種最佳的從資料庫中獲取大量數據
的方法。
這裡使用 SqlDataReader 物件封裝 GetSqlDataReader()方法,主要
用於從 SQL Server 資料庫中取得數據,包括查詢的資料。
GetSqlDataReader()方法的
程式碼如下

https://ithelp.ithome.com.tw/upload/images/20230923/20106640YIGlDwLDcn.jpg

   public SqlDataReader GetSqlDataReader(string sql)
        {
            SqlDataReader dataReader = null;

            // 打開資料庫連接
            conn.Open();

            // 創建命令物件
            SqlCommand sqlCommand = new SqlCommand(sql, conn);

            // 獲取唯讀資料流
            dataReader = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);

            return dataReader;
        }

最關鍵的程式碼位於 SqlCommand 物件的 ExecuteReader() 方法中。
使用此方法,我們可以執行查詢的 SQL 語句並返回 SqlDataReader 型別的物件,
代表一個資料流。
值得注意的是,在 ExecuteReader() 方法中,
我們使用了 CommandBehavior.CloseConnection 參數。
這個參數的作用是確保當 SqlDataReader 物件被關閉時,
它所依賴的 SqlConnection 連線也會被自動關閉。
對於讀取 SqlDataReader 資料流的操作,通常需要使用 while 迴圈來進行。

GetExecuteScalar()方法

在資料庫的表格中,有時需要取得表格中的第一行第一列的值,
這是一個單一的值,由於第一行第一列的值的資料型態可能各不相同,
因此可以使用 object 型別來表示。
在 ADO.NET 技術中,我們可以使用 SqlCommand 物件的 ExecuteScalar() 方法來取得表格中的第一行第一列的值。
GetExecuteScalar() 方法的
程式碼如下:

https://ithelp.ithome.com.tw/upload/images/20230923/201066408XbpSvXqIp.jpg

public object GetExecuteScalar(string sql)
        {
            conn.Open();

            SqlCommand sqlCommand = new SqlCommand(sql, conn);

            object result = sqlCommand.ExecuteScalar();

            conn.Close();

            return result;
        }

當您將一個 SQL 語句傳遞給這個方法後,返回的值就是表格中的第一行第一列的數值,而這個數值的資料型態是 object 型別。


上一篇
Day-07 ASP.NET MVC 之 資料表設計
下一篇
Day-09 ASP.NET MVC 之 ADO.NET--使用新聞模組為範例
系列文
ASP.NET MVC基礎修練:從菜開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言