zoukankan      html  css  js  c++  java
  • 参数化防SQL注入

    private void AddStudent(){

     string strName =txtName.Text.Trim();

     string strPwd = txtPwd.Text.Trim();

    string strSql ="insert into Student (name,pwd)  values(@name,@pwd) ";

    SqlConnection conn = new SqlConnection("  server=.;database=TestDB;uid=sa;pwd=pwd123 ");

    SqlCommand cmd = new SqlCommand(strSql,conn); 

    //参数数组 对应Sql语句中的参数

    SqlParameter [] paras ={

      new SqlParameter("@name",strName),

      new SqlParameter("@pwd",strPwd)

        };

    cmd.Parameters.AddRange(paras);

    conn.Open();

    int result = Convert.ToInt32(cmd.ExecuteScalar());

    conn.Close();

    if(result>0){

    ...

    }eles{

    ...

    }

    }

    上面的代码是访问SQL Server数据库的代码。如果本文中提到的数据分别在Access、MySQL、Oracle数据库,那么对应的参数化SQL语句及参数分别如下:

    数据库 Access MySQL Oracle
     SQL语句 select * from UserInfo where sex=? and age>? select * from UserInfo where sex=?sex and age>?age select * from UserInfo where sex=:sex and age>:age
    参数 OleDbParameter MySqlParameter OracleParameter
    实例化参数 OleDbParameter p=new OleDbParameter(“?”, OleDbType. Boolean); MySqlParameter p=new MySqlParameter(“?sex”, MySqlDbType.Bit); OracleParameter p=new OracleParameter(“:sex”, OracleType.Byte);
    赋值 p.Value=true; p.Value=1; p.Value=1;

          通过上面的实例代码我们可以看出尽管SQL语句大体相似,但是在不同数据库的特点,可能参数化SQL语句不同,例如在Access中参数化SQL语句是在参数直接以“?”作为参数名,在SQL Server中是参数有“@”前缀,在MySQL中是参数有“?”前缀,在Oracle中参数以“:”为前缀。
    注意:因为在Access中参数名都是“?”,所以给参数赋值一定要按照列顺序赋值,否则就有可能执行出错。

    以下是 oracle数据库中:

      public DataTable CheckUser(string userName, string pwd)
            {
    
                OracleConnection conn = new OracleConnection(connStr);
                DataTable dt = new DataTable();
                string sql = string.Format(@"SELECT 
                                                        GUID, USERNAME, PWD, 
                                                           CREATEDATE,NICKNAME
                                                        FROM F_USERS WHERE status =1  and USERNAME =:USERNAME and PWD =:PWD");
                try
                {
    
                    //参数数组 对应Sql语句中的参数
                    OracleParameter[] paras ={
                       new OracleParameter(":USERNAME",userName),
                       new OracleParameter(":PWD",pwd)
                       };
    
                    OracleCommand cmd = new OracleCommand(sql, conn);
                    cmd.Parameters.AddRange(paras);
                    conn.Open();
                    OracleDataAdapter oda = new OracleDataAdapter(cmd);
                    oda.Fill(dt);
                    return dt;
                }
                catch
                {
                    return dt;
                }
                finally
                {
                    conn.Close();
                }
            }
  • 相关阅读:
    [NOI2016]循环之美(杜教筛)
    [CF600E]Dsu on tree
    [POI2015]Myjnie
    [POI2015]Odwiedziny
    [POI2015]Logistyka
    [POI2015]Wilcze doły
    [POI2017]Sabotaż
    [BZOJ3928/4048]Outer space invaders
    [BZOJ5109]大吉大利,晚上吃鸡!
    [AGC016E]Poor Turkeys
  • 原文地址:https://www.cnblogs.com/zhangruiBlog/p/4251678.html
Copyright © 2011-2022 走看看