改进的sqlhelper学习日志
下面就是详细的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学习日志的更多相关文章
- GRE学习日志
发现开博客园真的很有督促作用,今天也顺便开个GRE学习日志吧 2015-02-09:单词 2015-02-10:单词 2015-02-11:单词 2015-03-02:阅读 2015-03-04:阅读 ...
- Cortex-M3学习日志(六) -- ADC实验
上一次简单的总结了一下DAC方面的知识,好吧,这次再来总结一下ADC方面的东东.ADC即Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器.现实世界是由模 ...
- Cortex-M3学习日志(五) -- DAC实验
终于逮了个忙里偷闲的机会,就再学一下LPC1768的外围功能吧,循序渐进是学习的基本规则,也许LPC1768的DAC与8位单片机16位单片机里面集成的DAC操作类似,但是既然这是懒猫的学习日志,就顺便 ...
- webpack2学习日志
webpack说容易也容易,说难也难,主要还是看个人,想学到什么样的程度,很多公司可能要求仅仅是会用就行,但是也有一些公司要求比较高,要懂一些底层的原理,所以还是要花一些时间的,看个人需求.这篇仅仅是 ...
- javascript学习日志:前言
javascript学习日志系列的所有博客,主要理论依据是<javascript权威指南>(犀牛书第6版)以及<javascript高级程序设计第三版>(红色书),目前js行业 ...
- MobileForm控件的使用方式-用.NET(C#)开发APP的学习日志
今天继续Smobiler开发APP的学习日志,这次是做一个title.toolbar.侧边栏三种效果 样式一 一. Toolbar 1. 目标样式 我们要实现上图中的效果 ...
- 我的游戏学习日志3——三国志GBA
我的游戏学习日志3——三国志GBA 三国志GBA由日本光荣公司1991~1995所推出<三国志>系列游戏,该作是光荣在GBA上推出的<三国志>系列作品的第一款.本游戏登场武将总 ...
- 【转】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新特性
- composer的安装和使用 学习日志
如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...
随机推荐
- PHP金字塔的输出
相信学习语言的最初的时候,学到循环的时候,开始一定有种摸不着头脑,想砸电脑的冲动吧 这里就是记录我当初学习的时候,为了通过这个循环,学习的金字塔的输出 1.首先,要了解一个金字塔的输出就要去看它的表达 ...
- [Cookie] C#CookieHelper--C#操作Cookie的帮助类 (转载)
点击下载 CookieHelper.rar 下面是代码大家看一下 /// <summary> /// 类说明:CookieHelper /// 联系方式:361983679 /// 更新网 ...
- Android 设计随便说说
我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...
- Windows环境下使用Cmake ndk编译fdk-aac
一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让 ...
- WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件
一.安装vmware没有问题,网络设置以NAT方式(VMnet8是vmware专属的虚拟网卡).安装完毕后设置虚拟机的 VirtualNetworkEditor(可以再开始->所有程序VMwar ...
- NodeJS学习笔记—2.AMD规范
CommonJS加载模块是同步的,而AMD模块加在是非同步的,允许指定回调函数.由于Nodejs主要用于服务器编程,模块文件一般都存在于本地,所以加载很快,不需要考虑非同步加载,用CommonJS即可 ...
- iOS 获取URL中的参数
- (NSString *)getParamByName:(NSString *)name URLString:(NSString *)url { NSError *error; NSString * ...
- Java小例子(学习整理)-----学生管理系统-控制台版
1.功能介绍: 首先,这个小案例没有使用数据库,用集合的形式暂时保存数据,做测试! 功能: 增加学生信息 删除学生信息 修改学生信息 查询学生信息: 按照学号(精确查询) 按照姓名(模糊查询) 打 ...
- Codevs 1140 Jam的计数法 2006年NOIP全国联赛普及组
1140 Jam的计数法 2006年NOIP全国联赛普及组 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Jam是个喜欢标 ...
- 简单的GDI+双缓冲的分析与实现
为什么要使用双缓冲绘制 在进行多图元绘制的时候: 因为是要一个一个画上去,所以每画一个图元,系统就要做一次图形的绘制操作,图形的重绘是很占用资源的,特别当需要重绘的图形数量很多的时候,所造成的消耗就特 ...