首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ASP.NET 連接 SQL Server 兩種寫法:DataAdapter 快速版 vs Command 參數化安全版

     編輯:關於SqlServer

方法一:SqlDataAdapter 簡潔版(教學/原型適用)

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 易遭注入,生產環境勿用。

方法二:參數化 Command 企業級寫法

1. Web.config 連線字串

<configuration>
  <appSettings>
    <add key="connect" value="server=.;database=NorthWind;uid=sa;pwd=sa;"/>
  </appSettings>
</configuration>

2. 通用資料存取類

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;
}

3. 呼叫查詢

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);

關鍵差異對比

特性DataAdapterCommand + Parameter
程式碼量少多
SQL 注入防護無完整
執行計畫重用差好
適用場景快速原型、內部工具正式專案、對外系統
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved