SqlCommand

SqlCommand 介紹

SqlCommand 用來封裝要執行的SQL陳述式,透過已經建立完成的資料庫連線,向資料庫送出指令並取得執行結果。
建構子可以傳入兩個參數:SQL文字(cmdText)資料庫連線物件(SqlConnection)

簡單範例

請先安裝好 SQL Server 並建立對應資料表,本範例使用 Article 資料表,並已預先新增一筆測試資料。

private void button1_Click(object sender, EventArgs e)
{
    // 1. 定義連線字串
    string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";

    // 2. 建立連線物件
    SqlConnection conn = new SqlConnection(connectionString);

    // 3. 準備要執行的SQL敘述
    string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";

    // 4. 建立命令物件,綁定SQL與資料庫連線
    SqlCommand command = new SqlCommand(cmdText, conn);

    conn.Open();    // 開啟資料庫連線
    // ExecuteScalar():執行SQL,回傳結果集【第一行第一欄】的資料,型別為object

    object res = command.ExecuteScalar();

    MessageBox.Show(res.ToString());

    conn.Close();   // 關閉連線
}Code language: C# (cs)

SQL Server 資料表

CREATE TABLE Article(
    id INT PRIMARY KEY IDENTITY(1,1),
    Title NCHAR(10) NULL,
    AddTime NCHAR(10) NULL
);Code language: SQL (Structured Query Language) (sql)

核心方法:ExecuteScalar()

  • 查詢聚合運算結果:COUNT()MAX()MIN()SUM()
  • 取得單一數值,例如資料庫目前時間、自動遞增主鍵ID

注意事項:

  1. 回傳型別是 object,必須手動做型別轉換;
  2. 如果SQL查詢回傳多列多行,只會拿到第一行第一欄,其餘資料直接捨棄;
  3. 呼叫方法前務必先執行 conn.Open() 開啟連線。

標準寫法

建議使用 using 自動釋放連線資源,避免忘記關閉連線而造成連線洩漏:

string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(cmdText, conn);
    conn.Open();
    object res = command.ExecuteScalar();
    MessageBox.Show(res.ToString());
}
// 離開using區塊就會自動釋放連線,不需要手動呼叫 conn.Close()Code language: JavaScript (javascript)

補充說明

SqlCommand 另外還有三個常用執行方法:

  1. ExecuteNonQuery():執行新增、修改、刪除(INSERT/UPDATE/DELETE),回傳受影響的資料列數
  2. ExecuteReader():回傳DataReader資料流,逐行讀取多筆查詢結果
  3. ExecuteXmlReader():讀取XML格式資料(實務較少使用)

後續課程會再介紹這些函式的用法。

SqlCommand

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *