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

  • 相关阅读:
    深入探究Spark -- 了解Executor和参数配置
    深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)
    深入探究Spark -- 最复杂的Shuffle
    深入探究Spark -- 调度器Scheduler
    深入探究Spark -- RDD详解
    深入探究Spark -- 基本组成
    Spark core基础 -- 基本架构和RDD
    Hadoop基础总结(各组件特性)
    Java基础总结
    选做Lintcode分类训练
  • 原文地址:https://www.cnblogs.com/Phoenix-blog/p/7895516.html
Copyright © 2011-2022 走看看