sql 參數化查詢


 

 

  在初次接觸sql時,筆者使用的是通過字符串拼接的方法來進行sql查詢,但這種方法有很多弊端

其中最為明顯的便是導致了sql注入。

  通過特殊字符的書寫,可以使得原本正常的語句在sql數據庫里可編譯,而輸入者可以達到某些非法企圖甚至能夠破壞數據庫。

  而參數化查詢有效解決了這個問題,參數化查詢是通過將傳入的sql語句其他部分進行編譯后再將其需要查詢的數據插入其中然后查詢,防止了在被查詢信息中出現語句的情況。

  具體代碼例子如下:

   /// <summary>
    /// 通用sql獲得語句,在第一個參數傳入sql語句,接下來以此寫入在sql中參數化的位置與需要用於替代的字符
    /// </summary>
    /// <param name="sqlstring"></param>
    /// <param name="items"></param>以數組方式傳入可同時對sql語句多個位置進行賦值
    /// <returns></returns>
    public DataTable Sql_Get_Datatable(string sqlstring, params string[] items)
    {
        string database = database_global;
        string str = @"server=DESKTOP-8ROVJ5G;Integrated Security=SSPI;database=" + database;
        //Integrated Security 綜合安全,集成安全
        try
        {
            string ConnectionString = @"server=DESKTOP-8ROVJ5G;Integrated Security=SSPI;database=" + database;
            SqlConnection conn = new SqlConnection(ConnectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand();     //生成新的連接            
            cmd.Connection = conn;

            int i;
            for (i = 0; i < items.Length; i += 2)          //循環替換字符串中相應位置的參數,一個@something 對應一個 somenting
            {
                cmd.Parameters.Add("@"+items[i], SqlDbType.VarChar);
                cmd.Parameters["@" + items[i]].Value = items[i+1];              
            }         
            
            SqlDataAdapter da = new SqlDataAdapter(cmd); //注意,此處參數應為設置完成的cmd
            DataTable dt = new DataTable();
            da.Fill(dt);
            conn.Close();
            conn.Dispose();
            return dt;
        }
        catch
        {
            return null;
        }
    }

    這是筆者自己寫的一個簡單的通過傳入sql語句與相關參數獲取相應DataTable數據的方法, 通過這種方法比為每一個需求寫一個方法來得封裝性更好一些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM