自己写了个分页控件,查询条件是根据用户输入动态生成的。
平时使用SqlParameter时只是将列字段的值作为参数,现在我要将整个where后面的条件(包括多个值,以及sql语句。如:string sqlCondition = "id='"+txtID.Text+"' and type='"txtType.Text+"'")作为参数传入。这样的话能不能保证安全,能不能防止sql注入。另外SqlParameter的原理什么,网上很多文章都只是讲SqlParameter的用法,有谁能给篇介绍的文章吗?

解决方案 »

  1.   

    SqlParameter作用就是限制数据类型,保证输入正确的参数,而不是有意构造的有害语句
      

  2.   

    这样是不行的 拼接的SQL。或者直接用存储过程传参。。DEMOset ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[InsertUsers]
    (
        @UserName varchar(255),@Password varchar(255),@UserID int output
    )
    as
    insert into Users(UserName,Password)values(@UserName,@Password)
    set @UserID=@@Identity
    调用
     using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
                conn.Open();
                SqlCommand cmd = new SqlCommand("[InsertUsers]", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@UserName", TextBox1.Text));
                cmd.Parameters.Add(new SqlParameter("@Password", TextBox2.Text));
                cmd.Parameters.Add(new SqlParameter("@UserID", 0)).Direction = ParameterDirection.Output;
                int result = cmd.ExecuteNonQuery();
                Response.Write(result + " UserID:" + cmd.Parameters["@UserID"].Value);
            }
      

  3.   

    我想问下,如果要做成通用的存储过程分页,因为查询的字段名我们并不知道,所以就要把整个 where后的条件作为参数,这样的话该怎么保证安全性呢?