一步步写自己SqlHelper类库(五):Command对象
1.Command对象基础
当我们使用Connection对象里面的方法打开数据库后,要查询自己所需的数据或对数据库的内容进行增删改时,Command对象就派上用场了!
MSDN定义:建立与数据源的连接后,利用Command对象来执行命令并从数据源中返回结果。
.NET Framework 提供的每个 .NET Framework 数据提供程序都具有一个 Command 对象。
名称 | 命名空间 | 描述 |
SqlCommand | System.Data.SqlClient | 表示与SQL Server的操作对象 |
OleDbCommand | System.Data.OleDb | 表示与OleDb数据源的操作对象 |
OdbcCommand | System.Data.Odbc | 表示与ODBC数据源的操作对象 |
OracleCommand | System.Data.OracleClient | 表示与Orale数据库的操作对象 |
2.Command对象属性和方法
2.1属性
CommandText: 获取或设置对数据源执行的文本命令。默认值为空字符串。
CommandType: 命令类型,指示或指定如何解释CommandText属性。CommandType属性的值是一个枚举类型,定义结构如下:
public enum CommandType{// 摘要:// SQL 文本命令。(默认。)Text = 1,//// 摘要:// 存储过程的名称。StoredProcedure = 4,//// 摘要:// 表的名称。TableDirect = 512,}
需要特别注意的是,将CommandType 设置为 StoredProcedure 时,应将 CommandText 属性设置为存储过程的名称。 当调用 Execute 方法之一时,该命令将执行此存储过程。
Connection: 设置或获取与数据源的连接。
Parameters: 绑定SQL语句或存储过程的参数。防止SQL注入,参数化查询中不可或缺的对象,非常重要。
Tranction: 获取或设置在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。
2.2方法
命令 | 返回值 |
ExecuteNonQuery |
对连接执行 Transact-SQL 语句并返回受影响的行数。 对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其 |
ExecuteScalar | 执行查询,并返回查询所返回的结果集中第一行的第一列。 |
ExecuteReader | 执行查询,并返回一个 DataReader 对象 |
ExecuteXMLReader | 返回 XmlReader。 只用于 SqlCommand 对象。 |
3.使用参数化Parameter
3.1 基础知识点
对数据库进行增删改查操作时,如果使用普通的字符串拼接SQL语句,会造成SQL注入,泄露数据库中的信息,所以使用参数化的操作可以防止这一问题。
对于不同的数据源来说,Parameter对象不同,但都派生自DbParameter对象。下表列举了不同数据源对应的Parameter对象。
数据提供程序 | 对应Paramter对象 | 命名空间 |
SQLServer 数据源 | 使用SqlParamter对象 | System.Data.SqlClient.SqlParameter |
Ole DB 数据源 | 使用OleDbParameter对象 | System.Data.OleDb.OleDbParameter |
ODBC 数据源 | 使用OdbcParamter对象 | System.Data.Odbc.OdbcParameter |
Oracle数据源 | 使用OracleParameter对象 | System.Data.OracleClient.OracleParameter |
3.2属性
Paramter对象的属性很多,其中常见而且非常重要的主要有以下几个:
DbType: 获取或设置参数的数据类型。
Direction: 获取或设置一个值,该值指示参数是否只可输入、只可输出、双向还是存储过程返回值参数。
IsNullable: 获取或设置一个值,该值指示参数是否可以为空。
ParamteterName: 获取或设置DbParamter的名称。
Size: 获取或设置列中数据的最大大小。
Value: 获取或设置该参数的值。
3.3方法
Paramter对象Add方法:该方法每次只能添加一个SqlParameter。下面代码的功能是将ID值等于1的字段name更新为Terrychan。
SqlParameter sp = new SqlParameter("@name", "Terrychan"); command.Parameters.Add(sp); sp = new SqlParameter("@ID", "1"); command.Parameters.Add(sp);
Paramter对象Add方法:add方法在添加多个SqlParameter时不方便,此时,可以采用AddRange方法
SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name", "Pudding"), new SqlParameter("@ID", "1") }; cmd.Parameters.AddRange(paras);
4.SqlHelper类
Command对象里面的几个方法很重要,基本上可以实现数据库的增删改查操作,在封装方法时,应该注意方法的重载。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Data; 6 using System.Data.SqlClient; 7 using System.Configuration; 8 9 /// <summary> 10 ///SqlHelper create by TerryChan 2012-04-17 11 /// </summary> 12 public class SqlHelper 13 { 14 #region 全局配置 15 /// <summary> 16 /// 连接字符串 17 /// </summary> 18 public readonly static string connectionString = ConfigurationManager.ConnectionStrings["connstring"].ToString(); 19 20 /// <summary> 21 /// SqlConnection对象 22 /// </summary> 23 private static SqlConnection conn = new SqlConnection(connectionString); 24 25 #endregion 26 27 #region 打开数据库 28 /// <summary> 29 /// 打开数据库 30 /// </summary> 31 public static void OpenConnection() 32 { 33 if (conn.State != ConnectionState.Open) 34 { 35 try 36 { 37 conn.Open(); 38 } 39 catch (Exception ex) 40 { 41 conn.Dispose(); 42 throw new Exception("打开数据库失败!" + ex.Message); 43 } 44 } 45 } 46 #endregion 47 48 #region 关闭数据库 49 /// <summary> 50 /// 关闭数据库 51 /// </summary> 52 public static void CloseConnection() 53 { 54 if (conn.State == ConnectionState.Open) 55 { 56 try 57 { 58 conn.Close(); 59 } 60 catch (Exception ex) 61 { 62 conn.Dispose(); 63 throw new Exception("关闭数据库失败!" + ex.Message); 64 } 65 } 66 } 67 #endregion 68 69 #region ExecuteNoQuery 执行不返回数据行的操作,并返回一个int类型的数据 70 71 /// <summary> 72 /// 执行不返回数据行的操作,返回一个int类型的数据 73 /// </summary> 74 /// <param name="sql">要执行的SQL文本命令</param> 75 /// <returns>返回受影响的行数</returns> 76 public static int ExecuteNoQuery(string sql) 77 { 78 return ExecuteNoQuery(sql, CommandType.Text, null); 79 } 80 81 /// <summary> 82 /// 执行不返回数据行的操作,返回一个int类型的数据 83 /// </summary> 84 /// <param name="sql">要执行的SQL文本命令或存储过程名称</param> 85 /// <param name="type">要执行的查询语句的类型,存储过程或SQL文本命令</param> 86 /// <returns>返回受影响的行数</returns> 87 public static int ExecuteNoQuery(string sql, CommandType type) 88 { 89 return ExecuteNoQuery(sql, type, null); 90 } 91 92 /// <summary> 93 /// 执行不返回数据行的操作,返回一个int类型的数据 94 /// </summary> 95 /// <param name="sql">要查询的SQL文本命令或存储过程名称</param> 96 /// <param name="type">要执行的查询语句的类型,存储过程或SQL文本命令</param> 97 /// <param name="sp">T-SQL语句或存储过程的参数数组</param> 98 /// <returns>返回受影响的行数</returns> 99 public static int ExecuteNoQuery(string sql, CommandType type, SqlParameter[] sp) 100 { 101 try 102 { 103 OpenConnection(); 104 SqlCommand command = new SqlCommand(sql, conn); 105 command.CommandType = type; 106 if (sp != null) 107 { 108 foreach (SqlParameter parameter in sp) 109 { 110 command.Parameters.Add(parameter); 111 } 112 } 113 int result = command.ExecuteNonQuery(); 114 return result; 115 } 116 catch (Exception ex) 117 { 118 throw new Exception("ExecuteNoQuery错误:" + ex); 119 } 120 finally 121 { 122 CloseConnection(); 123 } 124 } 125 126 #endregion 127 128 #region ExecuteScalar 执行查询,并返回查询结果集中第一行的第一列 129 130 /// <summary> 131 /// 执行查询结果,返回第一行的第一列 132 /// </summary> 133 /// <param name="sql">要执行的SQL文本命令</param> 134 /// <returns>返回第一行的第一列</returns> 135 public static object ExecuteScalar(string sql) 136 { 137 return ExecuteScalar(sql, CommandType.Text, null); 138 } 139 140 /// <summary> 141 /// 执行查询结果,返回第一行的第一列 142 /// </summary> 143 /// <param name="sql">要查询的SQL文本命令或存储过程名称</param> 144 /// <param name="type">要执行的查询语句的类型,存储过程或SQL文本命令</param> 145 /// <returns>返回第一行的第一列</returns> 146 public static object ExecuteScalar(string sql, CommandType type) 147 { 148 return ExecuteScalar(sql, type, null); 149 } 150 151 /// <summary> 152 /// 执行查询结果,返回第一行的第一列 153 /// </summary> 154 /// <param name="sql">要查询的SQL文本命令或存储过程名称</param> 155 /// <param name="type">要执行的查询语句的类型,存储过程或SQL文本命令</param> 156 /// <param name="sp">T-SQL语句或存储过程的参数数组</param> 157 /// <returns>返回第一行的第一列</returns> 158 public static object ExecuteScalar(string sql,CommandType type,SqlParameter [] sp) 159 { 160 try 161 { 162 object result = null; 163 OpenConnection(); 164 SqlCommand command = new SqlCommand(sql,conn); 165 command.CommandType = type; 166 if (sp != null) 167 { 168 foreach (SqlParameter parameter in sp) 169 { 170 command.Parameters.Add(parameter); 171 } 172 } 173 result = command.ExecuteScalar(); 174 return result; 175 } 176 catch (Exception ex) 177 { 178 throw new Exception("ExecuteScalar错误:" + ex); 179 } 180 finally 181 { 182 CloseConnection(); 183 } 184 } 185 #endregion 186 187 #region ExecuteReader 执行查询,并返回一个 DataReader 对象 188 189 /// <summary> 190 /// 执行查询,并返回一个 DataReader 对象 191 /// </summary> 192 /// <param name="sql">要执行的SQL文本语句</param> 193 /// <returns>返回DataReader对象实例</returns> 194 public static SqlDataReader ExecuteReader(string sql) 195 { 196 return ExecuteReader(sql, CommandType.Text, null); 197 } 198 199 /// <summary> 200 /// 执行查询,并返回一个 DataReader 对象 201 /// </summary> 202 /// <param name="sql">要查询的SQL文本命令或存储过程名称</param> 203 /// <param name="type">要执行的查询语句的类型,存储过程或SQL文本命令</param> 204 /// <returns>返回DataReader对象实例</returns> 205 public static SqlDataReader ExecuteReader(string sql,CommandType type) 206 { 207 return ExecuteReader(sql, type, null); 208 } 209 210 /// <summary> 211 /// 执行查询,并返回一个 DataReader 对象 212 /// </summary> 213 /// <param name="sql">要查询的SQL文本命令或存储过程名称</param> 214 /// <param name="type">要执行的查询语句的类型,存储过程或SQL文本命令</param> 215 /// <param name="sp">T-SQL语句或存储过程的参数数组</param> 216 /// <returns>返回DataReader对象实例</returns> 217 public static SqlDataReader ExecuteReader(string sql, CommandType type, SqlParameter[] sp) 218 { 219 try 220 { 221 OpenConnection(); 222 SqlCommand command = new SqlCommand(sql, conn); 223 command.Parameters.Clear(); 224 if (sp != null) 225 { 226 foreach (SqlParameter parameter in sp) 227 { 228 command.Parameters.Add(parameter); 229 } 230 } 231 SqlDataReader reader = command.ExecuteReader(); 232 return reader; 233 } 234 catch (Exception ex) 235 { 236 throw new Exception("ExecuteReader错误:" + ex); 237 } 238 finally 239 { 240 CloseConnection(); 241 } 242 } 243 244 #endregion 245 }
出处: http://www.cnblogs.com/ForEvErNoME/
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐 或 关注
转载于:https://www.cnblogs.com/ForEvErNoME/archive/2012/05/23/2475742.html
一步步写自己SqlHelper类库(五):Command对象相关推荐
- 一步一步写自己的SqlHelper类库
前言: 一开始不懂SqlHelper是什么,以为是新东西.第一遍大量的查资料,在csdn上找到很多人写好的SqlHelper类,发现每个人写的很像,但又都不一样,找了一个能用的上的,敲了一遍别人的代码 ...
- 深蓝学院《从零开始手写VIO》作业五
深蓝学院<从零开始手写VIO>作业五 1. 完成Bundle Adjustment求解器 2. 完成测试函数 3. 论文总结 1. 完成Bundle Adjustment求解器 完成单目 ...
- 拆轮子系列之教你一步步写验证码控件
拆轮子系列之教你一步步写验证码控件 前言 先看看效果 怎么样不错吧?别急下面我就一步一步的教你实现. 用到的知识点总结: 1.Canvas和pint的使用,我们用它画点,线,字 2.View的基本用法 ...
- ADO.NET中五个对象
一.五类对象 1.Connection对象: connection对象是开启数据库与程序之间的连接,是一个连接对象,用来创建连接对象,没有这个对象是无法从数据库获取到信息.它在ADO.NET最底层. ...
- 使用command对象操作数据库
1.Command对象查询数据库 protected void Button1_Click(object sender, EventArgs e){//读取web.config节点配置string s ...
- javaweb学习总结二十五(response对象的用法一)
一:Reponse对象的概念 当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象. response对象包括三个部分:响应头.响应状态码以及响应体 二:r ...
- ADO学习(三)Command 对象
Command 对象 ADO Command 对象用于执行面向数据库的一次简单查询.此查询可执行诸如创建.添加.取回.删除或更新记录等动作.如果该查询用于取回数据,此数据将以一个 RecordSet ...
- command对象的三个主要方法 1120
command对象的三个主要方法 1120 >连接对象 连接对象 连接类 连接对象=new 连接类(连接字符串)SqlConnection conn = new SqlConnection(co ...
- command对象的三个主要的方法 1119
增删改查数据 cmd的ExecuteNonQuery方法 格式 command对象.ExecuteNonQuery(); 功能 返回受影响的行数 例子 // 让小乔的战力变为77String sql ...
最新文章
- 介绍下Nginx 反向代理与负载均衡
- LeetCode Palindrome Linked List
- 十、开始进入PowerBI的世界
- java环境安装包出现覆盖,请查收
- 分布式数据流计算系统的数据缓存技术综述
- Spring MVC EL表达式不能显示
- VSTO/Excel: 获取Excel图表中的某个点的数据
- 计算机书籍每周销量排行榜
- oracle 审计 分区表,oracle分区表的分类及测试
- 如何将电脑文件自动备份到u盘?
- mysql论文的摘要格式怎么写_如何撰写论文的摘要
- 小蒋搜搜(xp search) 官网
- svg android动画制作,SVG动画案例的学习_SVG, SVG Animation, Animation, Web动画 教程_W3cplus...
- 矽杰微 X8E1101 单片机
- 用python画爱心表白代码
- DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
- java easing_jQuery animate easing使用实例方法
- Unable to connect to a repository at URL...的错误解决方法
- 三维电子沙盘开发教程 数字沙盘培训教程
- 40个工程造价的难点问题