上一篇文章讲了简易版的SqlHelper类的编写,我们在这里就上一篇文章末尾提出的问题写出解决方案.

  sql语句注入攻击已经是众所周知的了.我们如何在C#中保护自己的数据库不被这样的方式攻击呢?

  不用担心,c#中已经提供了很好的解决方案,那就是 SqlParameter类.

  如何使用它呢?

  

class SqlHelper{

public object ExecuteScalar(string sql,Parameter [] parameters)//这一这里增加了一个参数,是个Parameter类型的数组.
  using(SqlConnection conn = new SqlConnection(connStr))
   {
    conn.Open();
    using(SqlCommand cmd = conn.CreateCommand())
    {
      cmd.CommandText = sql;
      foreach( Parameter param in parameters)//遍历传进来的数组,把元素一一添加到查询中
      {
        cmd.Parameters.add(param);
      }
      SqlDataAdapter adapter = new SqlDataAdapter(cmd);//数据适配器把查询作为自己的一个属性
      DataSet dataset = new DataSet();//建立缓存
      adapter.Fill(dataset);//把数据存放到缓存中.
      return dataset;//返回数据集合
    }
   }
}

  上面的例子使用了Parameter类的方法,完成对SQL语句的保护.防止了SQL注入.

  但是还有一点,在方法中我们定义了一个数组作为参数,那如果用户传进来的不只是一个数组呢?

  这时候就要用到可变长度参数这个概念的东西了.

  可变长度参数的定义方式:

static int sum(int[] arr)//这是一个简单的固定参数长度的函数定义.
{
  int sum = 0;
  foreach(int i in arr)
  {
    result += i;
  }
  return result;
}
static int sum1(param int[] arr)//这是一个简单的可变参数长度的函数定义
{
  int result = 0;
  foreach(int i in arr)
  {
    result += i;
  }
  return result;
}
static void Main(string[],args)
{
  int[] array1 = new int[]{1,2,3,4,5};
  sum(array1);//我们用固定参数长度方法,必须传一个数组进去
  sum1(2,4,6,8,10);//我们用可变参数长度方法,可以随便传数字进去,函数会自动把他们加入到自己的数组参数中.
}

  今天先写到这里.可变长度参数在SqlHelper里的具体使用,我会在下一篇文章里讲解.

  

c#中sqlhelper类的编写(二)的更多相关文章

  1. c#中sqlhelper类的编写(一)

    在.net平台的项目开发中,凡是用到数据库交互的,都有必要了解SqlHelper类的原理. 步骤一: 我就拿WPF项目开发作为例子.首先要新建一个App.config(应用程序配置文件).注意,在VS ...

  2. c#中SqlHelper类的编写(三)

    下面我们直接用可变长度参数的方式写一个完整的SqlHelper增删改public static int ExecuteNonQuery(string sql,params Parameter[] pa ...

  3. C++中的类和对象(二)

    一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内 ...

  4. Mybatis 中实体类的编写

    一个实体类对应一个数据表 一个属性对应一个字段 默认情况下类名和属性名都采用 “下划线转驼峰” 的命名方式.但具体采用什么样的命名方式并不重要(方式一致即可),在后面使用这些对象的时候,可以通过 re ...

  5. SqlHelper类的编写

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  6. ADO.NET复习——自己编写SqlHelper类

    今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...

  7. 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form

    使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...

  8. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

  9. 使用虚幻引擎中的C++导论(二-UE4基类)

    使用虚幻引擎中的C++导论(二) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...

随机推荐

  1. web压力测试的轻量级具体做法

    一:压力测试中需要掌握的几个基本概念 1:吞吐率(Requests per second) 服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数.某个并发用户 ...

  2. [Angular2 Form] Create Radio Buttons for Angular 2 Forms

    Using Radio Buttons in Angular 2 requires a basic understanding of forms as well as how their labels ...

  3. [AngularJS] Using the Angular scope $destroy event and method

    With Angular scopes, you have access to a $destroy event that can be used to watch $scope events. Th ...

  4. C++11 之for 新解

     前言     C++11这次的更新带来了令非常多C++程序猿期待已久的for range循环,每次看到javascript. lua里的for range.心想要是C++能有多好,心里别提多酸了.这 ...

  5. Java HttpClient使用小结

    httpclient是apache的一个项目:http://hc.apache.org/ 文档比較完好:http://hc.apache.org/httpcomponents-client-ga/tu ...

  6. 林子雨老师团队《Architecture of a Database System》 中文版

    http://dblab.xmu.edu.cn/post/architecture-of-a-database-system/

  7. 第三方Push服务:Urban Airship

    转自:http://blog.csdn.net/kmyhy/article/details/7355756 关于推送通知,除了苹果的APNs之外,我们还有其它选择. Urban Airship就是其中 ...

  8. 获取div相对文档的位置

    获取div相对文档的位置,两个方法 经测试 document.getElementById("btn").getBoundingClientRect() 在IE6下有2像素的bug ...

  9. 实现一个不停发包的Android应用(类似于电脑上的Ping命令)

    代码如下: package com.example.ping; import java.io.BufferedReader; import java.io.IOException; import ja ...

  10. Steps to Install Hadoop on CentOS/RHEL 6---reference

    http://tecadmin.net/steps-to-install-hadoop-on-centosrhel-6/# The Apache Hadoop software library is ...