// 假設: CREATE PROC SelectAll AS SELECT * FROM StudentInf
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand("SelectAll", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
// 直接執行 (無回傳結果集)
cmd.ExecuteNonQuery();
// 或填充 DataSet/DataTable
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
da.Fill(dt); // dt 現在包含結果集
}
}
// 假設: CREATE PROC AndSelect @StudentId VARCHAR(10), @StudentName VARCHAR(10) AS ...
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand("AndSelect", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@StudentId", SqlDbType.NVarChar, 10).Value = "S001";
cmd.Parameters.Add("@StudentName", SqlDbType.NVarChar, 10).Value = "John";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
Console.WriteLine(dr["StudentId"] + " - " + dr["StudentName"]);
}
}
}
SqlParameter p = cmd.Parameters.Add("@StudentId", SqlDbType.NVarChar, 10);
p.Value = "S001";
SqlDbType、大小、值;Direction 預設 Input,輸出參數需設 ParameterDirection.Output。DataSet/DataTable,適合離線資料操作。Dispose() 被呼叫,釋放非受控資源 (連線、控制代碼)。SqlParameter ret = cmd.Parameters.Add("RETURN_VALUE", SqlDbType.Int);
ret.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int returnCode = (int)ret.Value;
掌握 SqlCommand 參數化呼叫模式,是 .NET 開發 SQL Server 應用的基石技能。