SqlHelper
2016-05-07 14:19
363 查看
数据库操作的时候,模式很固定。于是把这些操作都封装起来。
达到提供sql语句或参数,得到结果的目的。
我们把这个类库叫SqlHelper
那怎么关掉连接,开始是想从外边关,但从外边关根本无法访问到函数里边的conn对象,没法儿关。
于是就用到了CommandBehavior.CloseConnection,在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
这是比较简单的SqlHelper。
还有比较完善的微软SQLHelper.cs类 中文版
达到提供sql语句或参数,得到结果的目的。
我们把这个类库叫SqlHelper
SqlHelper
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace YZLibrary { class SqlHelper { private static readonly string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; /// <summary> /// 执行非查询语句并返回受影响行数 /// </summary> /// <param name="sql"></param> /// <param name="pms"></param> /// <returns></returns> public static int ExecuteNonQuery(string sql, params SqlParameter[] pms) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddRange(pms); conn.Open(); return cmd.ExecuteNonQuery(); } } } /// <summary> /// 执行查询,并返回查询的结果集中的第一行第一列 /// </summary> /// <param name="sql"></param> /// <param name="pms"></param> /// <returns></returns> public static object ExecuteScalar(string sql, params SqlParameter[] pms) { using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddRange(pms); conn.Open(); return cmd.ExecuteScalar(); } } } /// <summary> /// 执行查询,并返回SqlDataReader。 /// </summary> /// <param name="sql"></param> /// <param name="pms"></param> /// <returns></returns> public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms) { SqlConnection conn = new SqlConnection(connStr); try { using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddRange(pms); conn.Open(); return cmd.ExecuteReader(CommandBehavior.CloseConnection); } } catch (Exception ex) { conn.Dispose(); throw ex; } } /// <summary> /// 执行查询,返回DataTable /// </summary> /// <param name="sql"></param> /// <param name="pms"></param> /// <returns></returns> public static DataTable ExecuteDataTable(string sql,params SqlParameter[] pms) { DataTable dt = new DataTable(); using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connStr)) { adapter.SelectCommand.Parameters.AddRange(pms); adapter.Fill(dt); } return dt; } } }
ExecuteReader
ExecuteScalar只执行一次,执行完后就可以把连接断开,但ExecuteReader要从数据库取好几次,所以连接要一直开着,直到数据取完了。那怎么关掉连接,开始是想从外边关,但从外边关根本无法访问到函数里边的conn对象,没法儿关。
于是就用到了CommandBehavior.CloseConnection,在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
使用SQLHelper
//ExecuteNonQuery 无参的 string sql = "update LoginTest set pwd=1234 where uid='小明';"; int res = SqlHelper.ExecuteNonQuery(sql); Console.WriteLine(res); Console.ReadKey(); //ExecuteNonQuery 有参的 string sql = "update LoginTest set pwd=@pwd where uid=@uid;"; SqlParameter[] ps = { new SqlParameter("@pwd",1),//如果第二个参数为0,要用(object)强转,否则会默认为第二个构造函数。第二个构造函数,是枚举型,和第一个构造函数冲突 new SqlParameter("@uid","小明"), }; int res = SqlHelper.ExecuteNonQuery(sql, ps); Console.WriteLine(res); Console.ReadKey(); //ExecuteScalar 参数化模糊查询 string sql = "select count(*) from LoginTest where uid like @uid"; SqlParameter pUid = new SqlParameter("@uid", "杨%"); int count = (int)SqlHelper.ExecuteScalar(sql, pUid); Console.WriteLine(count); Console.ReadKey(); //ExecuteReader using (SqlDataReader reader = SqlHelper.ExecuteReader("select * from LoginTest")) { while (reader.Read()) { List<string> list = new List<string>(); for (int i = 0; i < reader.FieldCount; i++) { list.Add(reader[i].ToString()); } Console.WriteLine(string.Join(",", list)); } } Console.ReadKey(); //DataAdapter,这个要建winform程序 string sql = "select * from LoginTest"; dataGridView1.DataSource = SqlHelper.ExecuteDataTable(sql);
这是比较简单的SqlHelper。
还有比较完善的微软SQLHelper.cs类 中文版
相关文章推荐
- litePal数据库框架简单使用
- mysql undo日志 redo日志
- 浅谈SQL语句优化经验
- oracle存储过程执行中输出日志文件
- ORACLE在存储过程中记录日志的处理包
- oracle使用存储过程实现日志记录.sql
- SQLite数据库修复教程
- mysql在线ddl操作
- MySql 安装出错
- mysql编译安装
- MySQL函数大全及用法示例
- Mysql 基于 Amoeba 的 读写分离
- 学生管理系统链接数据库问题解决思路
- Redis之数据Set和Get类型不一致问题
- T-SQL优化
- oracle基本概念2
- mysql集群安装
- 关于mysql链接错误的记录
- Error while performing database login with the mysql driver
- mysql单表多timestamp的current_timestamp设置问题