下面就是详细的sqlhelper的代码了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using System.Data; namespace hr_DAL
{
public class SqlHelper
{
//连接对象和命令对象
private static SqlConnection conn;
private static SqlCommand cmd;
private static string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
/// <summary>
/// 构造函数,实例化一个空的SqlHelper对象
/// </summary>
public SqlHelper()
{
}
#region 共有方法
/// <summary>
///方法:实例化连接对象
/// </summary>
private static void con()
{
conn = new SqlConnection(constr);
}
/// <summary>
/// 方法:打开连接,实例化命令对象
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
private static SqlCommand ExtCommand(string sql)
{
con();
//创建一个connection对象打开时,
//就会创建一个连接池,连接池和连接字符串完全匹配.
//如果一个连接对象的连接字符串和连接池完全匹配,就会把该连接对象放到匹配的池中,
//如果不完全匹配,则再创建一个连接池
conn.Open(); cmd = conn.CreateCommand();//将连接给命令对象
cmd.CommandText = sql;
return cmd; }
/// <summary>
/// 方法:关闭连接,释放资源
/// </summary>
private static void CloseConn()
{
if(conn!=null)//连接池是否为null,是否占用连接
{
if (conn.State == ConnectionState.Open)
{
conn.Close();//关闭了连接,
cmd.Dispose();//清空了连接字符串,即连接池
conn.Dispose();
}
} }
#endregion
/// <summary>
/// 方法:得到执行结果的首行首列
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static string GetOne(string sql)
{
ExtCommand(sql);
string result= (string) cmd.ExecuteScalar();
CloseConn();
return result;
} /// <summary>
/// 方法:用SqlDataAdapter得到一个表
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static DataTable GetTable(string sql)
{
ExtCommand(sql);
SqlDataAdapter sda = new SqlDataAdapter();
//将cmd命令对象交给适配器对象
sda.SelectCommand = ExtCommand(sql);
DataSet ds = new DataSet();
sda.Fill(ds,"table");
CloseConn();
return ds.Tables["table"]; #region SqlDataAdapter的使用方法
//SqlConnection conn = new SqlConnection(constr);
//SqlCommand cmd = new SqlCommand("select * from product", conn); //SqlDataAdapter sdat = new SqlDataAdapter(cmd);
//DataSet ds = new DataSet(); //sdat.Fill(ds, "p");
//dataGridView1.DataSource = ds.Tables["p"];
#endregion }/// <summary>
/// 方法:根据条件返回一个数据流
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static SqlDataReader GetReader(string sql)
{
ExtCommand(sql);
//CommandBehavior.CloseConnection表示数据流关闭,连接也关闭
SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return sdr; }
}
}

改进的sqlhelper学习日志的更多相关文章

  1. GRE学习日志

    发现开博客园真的很有督促作用,今天也顺便开个GRE学习日志吧 2015-02-09:单词 2015-02-10:单词 2015-02-11:单词 2015-03-02:阅读 2015-03-04:阅读 ...

  2. Cortex-M3学习日志(六) -- ADC实验

    上一次简单的总结了一下DAC方面的知识,好吧,这次再来总结一下ADC方面的东东.ADC即Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器.现实世界是由模 ...

  3. Cortex-M3学习日志(五) -- DAC实验

    终于逮了个忙里偷闲的机会,就再学一下LPC1768的外围功能吧,循序渐进是学习的基本规则,也许LPC1768的DAC与8位单片机16位单片机里面集成的DAC操作类似,但是既然这是懒猫的学习日志,就顺便 ...

  4. webpack2学习日志

    webpack说容易也容易,说难也难,主要还是看个人,想学到什么样的程度,很多公司可能要求仅仅是会用就行,但是也有一些公司要求比较高,要懂一些底层的原理,所以还是要花一些时间的,看个人需求.这篇仅仅是 ...

  5. javascript学习日志:前言

    javascript学习日志系列的所有博客,主要理论依据是<javascript权威指南>(犀牛书第6版)以及<javascript高级程序设计第三版>(红色书),目前js行业 ...

  6. MobileForm控件的使用方式-用.NET(C#)开发APP的学习日志

    今天继续Smobiler开发APP的学习日志,这次是做一个title.toolbar.侧边栏三种效果 样式一 一.          Toolbar 1.       目标样式 我们要实现上图中的效果 ...

  7. 我的游戏学习日志3——三国志GBA

    我的游戏学习日志3——三国志GBA 三国志GBA由日本光荣公司1991~1995所推出<三国志>系列游戏,该作是光荣在GBA上推出的<三国志>系列作品的第一款.本游戏登场武将总 ...

  8. 【转】Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性

    [转]Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性 Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性

  9. composer的安装和使用 学习日志

    如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...

随机推荐

  1. oracle redo日志维护

    环境 OS:Red Hat Linux As 5 DB:10.2.0.1 1.添加日志组 alter database add logfile group 4 ('/u01/app/oracle/or ...

  2. jquery和js cookie的使用解析

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 在这里分别通过 ...

  3. ZOJ 1733 Common Subsequence(LCS)

    Common Subsequence Time Limit: 2 Seconds      Memory Limit: 65536 KB A subsequence of a given sequen ...

  4. SGU 246. Black & White(数论)

    题意: 有2*n-1个黑色和白色的珠子组成的环形项链,求至少需要多少颗黑色珠子才能使任意排列的项链中都存在两个黑珠间有n个珠子. (2*n-1<=2^31-1); Solution: 先分析n= ...

  5. 读书笔记之 - javascript 设计模式 - 适配器模式

    适配器模式可以用来在现在接口和不兼容的类之间进行适配. 使用这种模式的对象又叫包装器,因为他们是在用一个新接口包装另一个对象. 在设计类的时候往往遇到有些接口不能与现有api一同使用的情况,借助于适配 ...

  6. printf 输出格式

    printf 输出格式C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数据的类型,其格式符 ...

  7. [CSS]float&clear浮动

    CSS float 属性 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样.  可取的值 ...

  8. 一些static_cast const_cast

    static_cast:干杂活的,那三个都有各自的专有用途,那三个不做的都由这个转型符来做,只要它能做的,用C语法的强制类型转换运算符也一定能够完成:但话又说回来了,C强制类型转换能做的,它可不一定都 ...

  9. Android Binder机制简单了解

    Binder -- 一种进程间通信(IPC)机制, 基于OpenBinder来实现 毫无疑问, 老罗的文章是不得不看的 Android进程间通信(IPC)机制Binder简要介绍和学习计划 浅谈Ser ...

  10. ERROR 2003 (HY000): Can't connect to MySQL server

    http://blog.csdn.net/longxibendi/article/details/6363934 一.问题的提出 /usr/local/webserver/mysql/bin/mysq ...