zoukankan      html  css  js  c++  java
  • 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数据的方法, 通过这种方法比为每一个需求写一个方法来得封装性更好一些。

  • 相关阅读:
    linux下启动和关闭网卡命令及DHCP上网
    python 编码问题
    paddlepaddle
    Convolutional Neural Network Architectures for Matching Natural Language Sentences
    deep learning RNN
    Learning Structured Representation for Text Classification via Reinforcement Learning 学习笔记
    Python IO密集型任务、计算密集型任务,以及多线程、多进程
    EM 算法最好的解释
    tensorflow 调参过程
    tensorflow 学习纪录(持续更新)
  • 原文地址:https://www.cnblogs.com/Phoenix-blog/p/7895516.html
Copyright © 2011-2022 走看看