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 语句,返回值为该命令所影响的行数。对于所有其
他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

 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对象里面的几个方法很重要,基本上可以实现数据库的增删改查操作,在封装方法时,应该注意方法的重载。  

View Code

  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 }

 

作者: ForEvErNoME
出处: http://www.cnblogs.com/ForEvErNoME/
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐 或 关注

转载于:https://www.cnblogs.com/ForEvErNoME/archive/2012/05/23/2475742.html

一步步写自己SqlHelper类库(五):Command对象相关推荐

  1. 一步一步写自己的SqlHelper类库

    前言: 一开始不懂SqlHelper是什么,以为是新东西.第一遍大量的查资料,在csdn上找到很多人写好的SqlHelper类,发现每个人写的很像,但又都不一样,找了一个能用的上的,敲了一遍别人的代码 ...

  2. 深蓝学院《从零开始手写VIO》作业五

    深蓝学院<从零开始手写VIO>作业五 1. 完成Bundle Adjustment求解器 2. 完成测试函数 3. 论文总结 1. 完成Bundle Adjustment求解器 完成单目 ...

  3. 拆轮子系列之教你一步步写验证码控件

    拆轮子系列之教你一步步写验证码控件 前言 先看看效果 怎么样不错吧?别急下面我就一步一步的教你实现. 用到的知识点总结: 1.Canvas和pint的使用,我们用它画点,线,字 2.View的基本用法 ...

  4. ADO.NET中五个对象

    一.五类对象 1.Connection对象: connection对象是开启数据库与程序之间的连接,是一个连接对象,用来创建连接对象,没有这个对象是无法从数据库获取到信息.它在ADO.NET最底层. ...

  5. 使用command对象操作数据库

    1.Command对象查询数据库 protected void Button1_Click(object sender, EventArgs e){//读取web.config节点配置string s ...

  6. javaweb学习总结二十五(response对象的用法一)

    一:Reponse对象的概念 当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象. response对象包括三个部分:响应头.响应状态码以及响应体 二:r ...

  7. ADO学习(三)Command 对象

    Command 对象 ADO Command 对象用于执行面向数据库的一次简单查询.此查询可执行诸如创建.添加.取回.删除或更新记录等动作.如果该查询用于取回数据,此数据将以一个 RecordSet  ...

  8. command对象的三个主要方法 1120

    command对象的三个主要方法 1120 >连接对象 连接对象 连接类 连接对象=new 连接类(连接字符串)SqlConnection conn = new SqlConnection(co ...

  9. command对象的三个主要的方法 1119

    增删改查数据 cmd的ExecuteNonQuery方法 格式 command对象.ExecuteNonQuery(); 功能 返回受影响的行数 例子 // 让小乔的战力变为77String sql ...

最新文章

  1. 介绍下Nginx 反向代理与负载均衡
  2. LeetCode Palindrome Linked List
  3. 十、开始进入PowerBI的世界
  4. java环境安装包出现覆盖,请查收
  5. 分布式数据流计算系统的数据缓存技术综述
  6. Spring MVC EL表达式不能显示
  7. VSTO/Excel: 获取Excel图表中的某个点的数据
  8. 计算机书籍每周销量排行榜
  9. oracle 审计 分区表,oracle分区表的分类及测试
  10. 如何将电脑文件自动备份到u盘?
  11. mysql论文的摘要格式怎么写_如何撰写论文的摘要
  12. 小蒋搜搜(xp search) 官网
  13. svg android动画制作,SVG动画案例的学习_SVG, SVG Animation, Animation, Web动画 教程_W3cplus...
  14. 矽杰微 X8E1101 单片机
  15. 用python画爱心表白代码
  16. DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  17. java easing_jQuery animate easing使用实例方法
  18. Unable to connect to a repository at URL...的错误解决方法
  19. 三维电子沙盘开发教程 数字沙盘培训教程
  20. 40个工程造价的难点问题

热门文章

  1. 编程术语_伟大的编程术语烘烤
  2. Apache服务器部署(1)
  3. java实现线性表的顺序存储
  4. Golang微服务开发实践
  5. mysql 数据库乱码
  6. 『流畅的Python』第14章:可迭代的对象、迭代器和生成器
  7. 深入理解javascript函数系列第二篇——函数参数
  8. python依赖包exe文件安装问题
  9. HTML5学习之二:HTML5中的表单2
  10. 经典树型表结构之SORT_NO