一步步写自己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 语句,返回值为该命令所影响的行数。对于所有其
他类型的语句,返回值为 -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/p/2475742.html