parameterized sql query - asp.net / c#

前端 未结 6 577
孤独总比滥情好
孤独总比滥情好 2021-01-18 20:03

So I recently learned that I should absolutely be using parametrized query\'s to avoid security issues such as SQL injection. That\'s all fine and all, I got it working.

6条回答
  •  一向
    一向 (楼主)
    2021-01-18 20:49

    Use my SqlBuilder class. It lets you write paramaterized queries without ever creating a parameter, or having to worry about what its called. Your code will look like this...

    var bldr = new SqlBuilder( myCommand );
    bldr.Append("SELECT * FROM CUSTOMERS WHERE ID = ").Value(myId);
    //or
    bldr.Append("SELECT * FROM CUSTOMERS NAME LIKE ").FuzzyValue(myName);
    myCommand.CommandText = bldr.ToString();
    

    Your code will be shorter and much more readable. Compared to concatenated queries, you don't even need extra lines. The class you need is here...

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    
    public class SqlBuilder
    {
    private StringBuilder _rq;
    private SqlCommand _cmd;
    private int _seq;
    public SqlBuilder(SqlCommand cmd)
    {
        _rq = new StringBuilder();
        _cmd = cmd;
        _seq = 0;
    }
    public SqlBuilder Append(String str)
    {
        _rq.Append(str);
        return this;
    }
    public SqlBuilder Value(Object value)
    {
        string paramName = "@SqlBuilderParam" + _seq++;
        _rq.Append(paramName);
        _cmd.Parameters.AddWithValue(paramName, value);
        return this;
    }
    public SqlBuilder FuzzyValue(Object value)
    {
        string paramName = "@SqlBuilderParam" + _seq++;
        _rq.Append("'%' + " + paramName + " + '%'");
        _cmd.Parameters.AddWithValue(paramName, value);
        return this;
    }
    public override string ToString()
    {
        return _rq.ToString();
    }
    }
    

提交回复
热议问题