上一篇文章讲了简易版的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. 【JavaScript】Registering JavaScript object methods as callbacks

    The registration of callback functions is very common in JavaScript web programming, for example to ...

  2. Java对证书的操作

    1 Java程序从证书文件读取证书 import java.io.*; import java.security.cert.*; public class PrintCert{ public stat ...

  3. ios开发——实用技术篇Swift篇&拍照

    拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...

  4. 直接对寄存器操作,实现usart的串口输出寄存器的配置

    就像前面提到的,我用的板子是一款stm32f107系列的板子,在这块板子上,已经开发出了一套比较成熟的库函数,这也就意味着你可以不用直接去操作存储器来实现某些功能.比方说对于USART来说可以直接通过 ...

  5. 解决ajax.net 1.0中文乱码问题!

      在使用ajax.net的UpdatePanel的时候,当requestEncoding编码为GB2312的时候,出现乱码.如果要解决这个问题最简单的就是改用utf-8了,但是原来使用GB2312, ...

  6. Linux上安装使用boost入门指导

    Data Mining Linux上安装使用boost入门指导 获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到bo ...

  7. 一个对称加密、解密的方法C#工具类

    封装了一个对称加解密的类,用私钥和密钥加解密 using System; using System.Collections.Generic; using System.Text; using Syst ...

  8. VirtualBox 导入.vdi文件时报“uuid is exists”错误

    解决办法: 1.要安装的.vdi文件所在目录:D:\developTools\vm\RedHatLinux1.vdi 2.找到VirtualBox的安装目录,这里是D:\Program Files\O ...

  9. 自定义uitableviewcell通过加上滑动手势进行删除对应的行。PS:用代理来实现

    #import <UIKit/UIKit.h> @class ZSDCustomCell; //协议 @protocol ZSDCustomCellDelegate <NSObjec ...

  10. Autel MaxiDAS DS708 Fatal Application Error illegal operation

    I get one Original Autel MaxiDAS® DS708 Update Service, after complete update, I got a message " ...