欲使用數據命令將Transact-SQL語句傳送至SQL Server來執行,請將Transact-SQL語句賦給SqlCommand對象的CommandText屬性,並將SqlCommand對象的CommandType屬性設置成CommandType.Text(此為默認值)。
在此要提醒大家,當您使用CommandType屬性為Text的數據命令時,請先小心檢查客戶端傳送出來的信息,然後才能將這些信息傳遞至您的數據庫。惡意用戶會嘗試發送(插入)修改過或額外的SQL語句,以獲取未經授權的訪問權,甚至是破壞數據庫。在將用戶輸入傳輸到數據庫前,一定要確認信息是有效的。最好的做法是盡可能使用參數型查詢或存儲過程。
程序范例1
圖 6-4所示是CH6_DemoForm003.cs的執行畫面。它示范如何使用SqlCommand對象將Transact-SQL語句傳送至SQL Server來執行,並藉此取得“飛狐工作室”數據表的員工人數。
圖 6-4
相關程序代碼編寫於窗體的Load事件處理函數中,列示如下:
private void CH6_DemoForm003_Load(object sender, EventArgs e)
{
...
try
{
// 建立連接。
using (SqlConnection con =
new SqlConnection(connectStringBuilder.ConnectionString))
{
// 建立數據命令對象(亦即 SqlCommand 對象)。
SqlCommand foxCMD = new SqlCommand();
// 設置 SqlCommand 對象所要使用的連接。
foxCMD.Connection = con;
// 設置賦給 SqlCommand 對象的是 TransactSQL 語句。
foxCMD.CommandType = CommandType.Text;
// 指派所要執行的 TransactSQL 語句。
foxCMD.CommandText = "SELECT COUNT(*) FROM dbo.飛狐工作室";
// 打開連接。
con.Open();
// 執行數據命令並將所返回的單一值賦給變量 total。
Int32 total = (int)(foxCMD.ExecuteScalar());
lblInfo.Text = "飛狐工作室的員工人數是:" +
total.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "請注意",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
程序范例2
圖 6-5所示是CH6_DemoForm004.cs的執行畫面,它示范如何使用SqlCommand對象將TransactSQL語句傳送至SQL Server來執行,並藉此取得“飛狐工作室”數據表的員工平均薪資。
圖 6-5
相關程序代碼編寫於窗體的Load事件處理函數中,列示如下:
private void CH6_DemoForm004_Load(object sender, EventArgs e)
{
...
try
{
// 建立連接。
using (SqlConnection con =
new SqlConnection(connectStringBuilder.ConnectionString))
{
// 建立數據命令對象(亦即 SqlCommand 對象)。
SqlCommand foxCMD =
new SqlCommand("SELECT AVG(目前薪資) FROM dbo.飛狐工作室");
// 設置 SqlCommand 對象所要使用的連接。
foxCMD.Connection = con;
// 打開連接。
con.Open();
// 執行數據命令並將所返回的單一值賦給變量 mAverage。
double mAverage = Convert.ToDouble(foxCMD.ExecuteScalar());
lblInfo.Text = "飛狐工作室的員工平均薪資是:" +
mAverage.ToString("$ NT # #,# #0.0000");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "請注意",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}