c#中sqlhelper类的编写(二)
上一篇文章讲了简易版的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类的编写(二)的更多相关文章
- c#中sqlhelper类的编写(一)
在.net平台的项目开发中,凡是用到数据库交互的,都有必要了解SqlHelper类的原理. 步骤一: 我就拿WPF项目开发作为例子.首先要新建一个App.config(应用程序配置文件).注意,在VS ...
- c#中SqlHelper类的编写(三)
下面我们直接用可变长度参数的方式写一个完整的SqlHelper增删改public static int ExecuteNonQuery(string sql,params Parameter[] pa ...
- C++中的类和对象(二)
一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内 ...
- Mybatis 中实体类的编写
一个实体类对应一个数据表 一个属性对应一个字段 默认情况下类名和属性名都采用 “下划线转驼峰” 的命名方式.但具体采用什么样的命名方式并不重要(方式一致即可),在后面使用这些对象的时候,可以通过 re ...
- SqlHelper类的编写
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- ADO.NET复习——自己编写SqlHelper类
今天复习了一次ADO.NET基础,整理一下自己的认为的重点: 编写SqlHelper类,方便我们执行数据库语句,这时可以直接调用封装在SqlHelper类的方法.现在大多数公司面试的时候,给你的面试题 ...
- 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form
使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...
- 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...
- 使用虚幻引擎中的C++导论(二-UE4基类)
使用虚幻引擎中的C++导论(二) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...
随机推荐
- 架构探险——第二章(为web应用添加业务功能)
第二章不使用框架完成了自己的Web应用. 重点: 服务层的完善优化过程,思路 在看这一段的时候引起了无数次的共鸣.相信大家在开始接触Java Web的时候,都做过类似的封装和优化. 第一版 在Serv ...
- HTML5 <script>元素async,defer异步加载
原文地址:HTML5′s async Script Attribute原文日期: 2010年09月22日翻译日期: 2013年08月22日 (译者注: 异步加载,可以理解为无阻塞并发处理.) (译者再 ...
- [Angular 2] Share a Service Across Angular 2 Components and Modules
Services are used to share data between components. They follow a module pattern that allows you to ...
- linux 体系结构知识 博客
http://blog.csdn.net/haiross/article/category/1488205/3
- 如何快速检查js语法学习Javascript
这里给大家推荐一个快速进行语法检查的方法,可以发现绝大多数语法错误,也可以作为在线编辑器,提高编程效率. 地址:http://www.jslint.com/ 同时推荐一个在线学习Javascript的 ...
- kafka 简介
1. 概述 Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据,使用scala编写.活跃的流式数据在web网站应用中非常常见,这些数据包括网站的pv.用户访 ...
- Sql 之 sql中的强制类型转换
1. convert(数据类型, 字段名) convert(datetime, startDate) 2. cast(字段名 as 数据类型) ,))
- The Last Practice
Problem Description Tomorrow is contest day, Are you all ready?We have been training for 45 days, an ...
- bigDecimal 使用小结
关于四舍五入: ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->;2 ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 ->;1 注 ...
- solrj:org.apache.solr.common.util.NamedList.java
package org.apache.solr.common.util; import java.io.Serializable; import java.util.ArrayList; import ...