1. 程式人生 > >C# 引數化SQL

C# 引數化SQL

引數化查詢(Parameterized Query 或 Parameterized Statement)是指在設計與資料庫連結並訪問資料時,在需要填入數值或資料的地方,使用引數 (Parameter) 來給值,這個方法目前已被視為最有效可預防SQL注入攻擊 (SQL Injection) 的攻擊手法的防禦方式。

在使用引數化查詢的情況下,資料庫伺服器不會將引數的內容視為SQL指令的一部份來處理,而是在資料庫完成 SQL 指令的編譯後,才套用引數執行,因此就算引數中含有惡意的指令,由於已經編譯完成,就不會被資料庫所執行。(這兩段摘自百度百科,http://baike.baidu.com/view/3061939.htm

 )

----

try
{
    using (var connection = new SqlConnection(PubConstant.ConnectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand("insert into FeedbackData(username, avatar, title, location, content, datetime)" +
            " values(@username, @avatar, @title, @location, @content, @datetime)"
        );
        SqlParameter parameter = null;

        parameter = new SqlParameter("@username", SqlDbType.NVarChar);
        parameter.Value = item.Username;
        command.Parameters.Add(parameter);

        parameter = new SqlParameter("@avatar", SqlDbType.NVarChar);
        parameter.Value = item.Avatar;
        command.Parameters.Add(parameter);

        parameter = new SqlParameter("@title", SqlDbType.NVarChar);
        parameter.Value = item.Title;
        command.Parameters.Add(parameter);

        parameter = new SqlParameter("@location", SqlDbType.NVarChar);
        parameter.Value = item.Location;
        command.Parameters.Add(parameter);

        parameter = new SqlParameter("@content", SqlDbType.NVarChar);
        parameter.Value = item.Content;
        command.Parameters.Add(parameter);

        parameter = new SqlParameter("@datetime", SqlDbType.DateTime);
        parameter.Value = item.Datetime;
        command.Parameters.Add(parameter);

        command.Connection = connection;
        command.ExecuteNonQuery();
        connection.Close();
        return true;
    }
}
catch (Exception ex)
{
    return false;
}