環境準備
- 啟動 SQL Server 服務(SQL Server Configuration Manager)。
- 以 Windows 驗證登入,啟用
sa 帳號並設定密碼。
- 建立資料庫
booksystem。
連接字串與表單程式碼
public partial class Form1 : Form
{
SqlConnection conn;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 建議從設定檔讀取,避免硬編碼
conn = new SqlConnection("server=.;database=booksystem;uid=sa;pwd=sa");
}
private void btnLogin_Click(object sender, EventArgs e)
{
try
{
conn.Open();
MessageBox.Show(conn.State.ToString()); // 應顯示 Open
}
catch (Exception ex)
{
MessageBox.Show(ex.Message); // 友善錯誤提示
}
finally
{
conn.Close();
MessageBox.Show(conn.State.ToString()); // 應顯示 Closed
}
}
}
參數化查詢防止 SQL Injection
string sqlStr = @"SELECT COUNT(*) FROM admin
WHERE admName = @name AND admPwd = @pwd";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
cmd.Parameters.AddWithValue("@name", txtName.Text.Trim());
cmd.Parameters.AddWithValue("@pwd", txtPwd.Text.Trim());
conn.Open();
try
{
int count = (int)cmd.ExecuteScalar();
if (count > 0) MessageBox.Show("登入成功");
else MessageBox.Show("帳號密碼錯誤");
}
catch (Exception ex)
{
MessageBox.Show("查詢發生錯誤:" + ex.Message);
}
finally
{
conn.Close();
}
最佳實務重點
- 使用參數化查詢:杜絕字串拼接,防止 SQL 注入。
- 連接物件生命週期:建議在 `using` 區塊中建立/關閉連接,確保資源釋放。
- 密碼安全:生產環境請勿明文儲存密碼,應使用雜湊加鹽(如 BCrypt)驗證。
- 連接池:ADO.NET 預設啟用連接池,正確關閉連接即可重用,無需手動管理。