ADO.NET 資料存取--SqlCommand 類別

在做資料資料存取時,會使用到 SqlCommand 這個類別,當中與它互相搭配的其他方法,

像是SqlDataReader、ExecuteReader()、ExecuteNonQuery()等,各自代表著不同意思。

在SqlCommand類別中常使用的執行命令方法有幾個:

  • ExecuteReader()執行傳回(查詢、抓取)資料列(紀錄)的命令
  • ExecuteNonQuery()執行(將異動的資料寫回資料庫)命令。
  • ExecuteScalar()從資料庫中擷取(單一值),如T-SQL指令中的 Count()函數。
  • Cancle()取消Sqlcommand的執行。
  • Dispose()釋放Component 所使用的資源。

當我們要從資料庫(表)中讀取資料,並放置GridView中,如下寫法:

重點在 ExecuteReader()

SqlConnection conn = new SqlConnection
                (WebConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString);

            SqlCommand cmd = new SqlCommand("select [columnname],[columnname1],[columnname2],[columnname3] from Table", conn);

            SqlDataReader sdr = null;

conn.Open();
                sdr = cmd.ExecuteReader();

                GridView1.DataSource = sdr;
                GridView1.DataBind();

if (sdr != null)
                {
                    cmd.Cancel();
                    sdr.Close();
                }
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    conn.Dispose();
                }
                GridView1.Dispose();

當我們要對資料表的內容做新增、刪除、修改時,使用ExecuteNonQery()方法,例如:

(配合使用參數寫法,避免 SQL Injection 攻擊) ----  @符號+參數名稱

例如要增加新值的時候:

 SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString);
            conn.Open();

            SqlCommand cmd = new SqlCommand(@"insert into test([columnname])
                                            values (@name)", conn);
            cmd.Parameters.Add("@name", SqlDbType.插入值的類型).Value = 插入值;

            int count = cmd.ExecuteNonQuery();

            Label3.Text = count ;

            cmd.Cancel();

            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
                conn.Dispose(); 
            }

參考資料:.NET資料存取,ADO.NET+SqlDataSource+LINQ