public void Page_Load(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection(
"Data Source=.;uid=sa;pwd=sa;Database=NorthWind"))
{
string username = "forever";
string strSQL = "SELECT * FROM [table] WHERE name = '" + username + "'";
SqlDataAdapter adapter = new SqlDataAdapter(strSQL, con);
DataSet ds = new DataSet();
adapter.Fill(ds);
foreach (DataRowView drv in ds.Tables[0].DefaultView)
{
Response.Write(drv["欄位1"] + "|" + drv["欄位2"]);
}
}
}
⚠️ 風險:字串拼接 SQL 易遭注入,生產環境勿用。
<configuration>
<appSettings>
<add key="connect" value="server=.;database=NorthWind;uid=sa;pwd=sa;"/>
</appSettings>
</configuration>
string sCon = ConfigurationManager.AppSettings["connect"];
if (string.IsNullOrEmpty(sCon))
Response.Write("連線字串為空!");
SqlConnection con = new SqlConnection(sCon);
if (con.State == ConnectionState.Closed) con.Open();
public SqlDataReader ExecuteDataReader(string sql, CommandType cmdType, SqlParameter[] parameters)
{
if (con.State == ConnectionState.Closed)
{
Response.Write("資料庫連線未開啟!");
return null;
}
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = cmdType;
if (parameters != null)
foreach (var p in parameters) if (p != null) cmd.Parameters.Add(p);
try
{
if (cmd.ExecuteScalar() != null)
return cmd.ExecuteReader();
}
catch (SqlException se)
{
// 記錄錯誤
return null;
}
finally { cmd.Dispose(); }
return null;
}
string sql = "SELECT * FROM [table] WHERE id = N'" + id + "'"; // N 前綴支援中文
SqlParameter[] parameters = null;
SqlDataReader reader = ExecuteDataReader(sql, CommandType.Text, parameters);
string output = "";
while (reader.Read())
{
output += "欄位1:" + reader[0] + ", 欄位2:" + reader[1] + "; ";
}
Response.Write(output);
| 特性 | DataAdapter | Command + Parameter |
|---|---|---|
| 程式碼量 | 少 | 多 |
| SQL 注入防護 | 無 | 完整 |
| 執行計畫重用 | 差 | 好 |
| 適用場景 | 快速原型、內部工具 | 正式專案、對外系統 |