C# DBHelper 第二版

1. [代码][C#]代码     跳至 [1] [全屏预览]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

/********************************

 * Produce: DbHelper

 * Version: beta 2

 * Date: 2012.10.11

 ********************************/

using System;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;

using System.Collections.Generic;

namespace DbHelper

{

    public class SqlDbHelper :IDisposable

    {

        protected SqlConnection conn;

        protected SqlCommand cmd;

        protected SqlDataReader reader;

        protected SqlDataAdapter adapter;

        protected string connectionString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        public static SqlDbHelper Instance = null;

        public string ConnectionString

        {

            get { return this.connectionString; }

            set { this.connectionString = value; }

        }

        static SqlDbHelper()

        { SqlDbHelper.Instance = new SqlDbHelper(); }

        /// <summary>

        /// 获取一个未打开连接的SqlConnection对象

        /// </summary>

        /// <returns>SqlConnection对象</returns>

        public SqlConnection GetConnection()

        {

            if (conn != null)

                return this.conn;

            return this.conn = new SqlConnection(connectionString);

        }

        /// <summary>

        /// 使用连接字符串获取未打开连接SqlConnection对象

        /// </summary>

        /// <param name="_connStr">连接字符串</param>

        /// <returns>SqlConnection对象</returns>

        public SqlConnection GetConnection(string _connStr)

        {

            if (this.conn != null)

                this.conn.ConnectionString = _connStr;

            else

                this.conn = new SqlConnection(_connStr);

            return this.conn;

        }

        /// <summary>

        /// 使用指定的Sql语句创建SqlCommand对象

        /// </summary>

        /// <param name="sqlStr">Sql语句</param>

        /// <returns>SqlCommand对象</returns>

        private SqlCommand GetCommand(string sqlStr)

        {

            if (this.conn == null)

                this.conn = GetConnection();

            if (this.cmd == null)

                this.cmd = this.GetCommand(sqlStr, CommandType.Text, null);

            else

            {

                this.cmd.CommandText = sqlStr;

                this.cmd.CommandType = CommandType.Text;

                this.cmd.Parameters.Clear();

            }

            return this.cmd;

        }

        /// <summary>

        /// 使用指定的Sql语句,CommandType,SqlParameter数组创建SqlCommand对象

        /// </summary>

        /// <param name="sqlStr">Sql语句</param>

        /// <param name="type">命令类型</param>

        /// <param name="paras">SqlParameter数组</param>

        /// <returns>SqlCommand对象</returns>

        public SqlCommand GetCommand(string sqlStr, CommandType type, SqlParameter[] paras)

        {

            if (conn == null)

                this.conn = this.GetConnection();

            if (cmd == null)

                this.cmd = conn.CreateCommand();

            this.cmd.CommandType = type;

            this.cmd.CommandText = sqlStr;

            this.cmd.Parameters.Clear();

            if (paras != null)

                this.cmd.Parameters.AddRange(paras);

            return this.cmd;

        }

        /// <summary>

        /// 执行Sql语句返回受影响的行数

        /// </summary>

        /// <param name="sqlStr">Sql语句</param>

        /// <returns>受影响的行数,失败则返回-1</returns>

        public int ExecuteNonQuery(string sqlStr)

        {

            int line = -1;

            try { line = this.ExecuteNonQuery(sqlStr,CommandType.Text,null); }

            catch (SqlException e) { throw e; }

            return line;

        }

        /// <summary>

        /// 使用指定的Sql语句,CommandType,SqlParameter数组执行Sql语句,返回受影响的行数

        /// </summary>

        /// <param name="sqlStr">Sql语句</param>

        /// <param name="type">命令类型</param>

        /// <param name="paras">SqlParameter数组</param>

        /// <returns>受影响的行数</returns>

        public int ExecuteNonQuery(string sqlStr, CommandType type, SqlParameter[] paras)

        {

            int line = -1;

            CheckArgs(sqlStr);

            if (this.cmd == null)

                GetCommand(sqlStr, type, paras);

            this.cmd.Parameters.Clear();

            this.cmd.CommandText = sqlStr;

            this.cmd.CommandType = type;

            if(paras != null)

                this.cmd.Parameters.AddRange(paras);

            try { OpenConn(); line = this.cmd.ExecuteNonQuery(); }

            catch (SqlException e) { throw e; }

            return line;

        }

        /// <summary>

        /// 使用指定Sql语句获取dataTable

        /// </summary>

        /// <param name="sqlStr">Sql语句</param>

        /// <returns>DataTable对象</returns>

        public DataTable GetDataTable(string sqlStr)

        {

            CheckArgs(sqlStr);

            if (this.conn == null)

                this.conn = GetConnection();

            this.adapter = new SqlDataAdapter(sqlStr, this.conn);

            DataTable table = new DataTable();

            try { adapter.Fill(table); }

            catch (SqlException e) { throw e; }

            finally { this.adapter.Dispose(); }

            return table;

        }

        /// <summary>

        /// 使用指定的Sql语句获取SqlDataReader

        /// </summary>

        /// <param name="sqlStr">sql语句</param>

        /// <returns>SqlDataReader对象</returns>

        public SqlDataReader GetSqlDataReader(string sqlStr)

        {

            CheckArgs(sqlStr);

            if (cmd == null)

                GetCommand(sqlStr);

            if(reader != null)

                reader.Dispose();

            try { OpenConn(); this.reader = this.cmd.ExecuteReader(); }

            catch (SqlException e) { throw e; }

            return this.reader;

        }

        /// <summary>

        /// 使用事务执行多条Sql语句

        /// </summary>

        /// <param name="sqlCommands">sql语句数组</param>

        /// <returns>全部成功则返回true否则返回false</returns>

        public bool ExecuteSqls(List<string> sqlCommands)

        {

            if (sqlCommands == null)

                throw new ArgumentNullException();

            if (sqlCommands.Count == 0)

                throw new ArgumentOutOfRangeException();

            if(this.cmd == null)

                GetCommand(null);

            SqlTransaction tran = null;

            try {

                OpenConn();

                tran = this.conn.BeginTransaction();

                this.cmd.Transaction = tran;

                foreach (string sql in sqlCommands)

                {

                    if (ExecuteNonQuery(sql) == 0)

                    { tran.Rollback(); return false; }

                }

            }

            catch { if (tran != null) tran.Rollback(); throw; }

            tran.Commit();

            return true;

        }

        public virtual void Dispose()

        {

            if (this.reader != null)

            { reader.Dispose(); this.reader = null; }

            if (this.cmd != null)

            { this.cmd.Dispose(); this.cmd = null; }

            if (this.conn != null)

            { this.conn.Dispose(); conn = null; }

        }

        protected void OpenConn()

        {

            try {

                if (this.conn.State != ConnectionState.Open)

                    conn.Open();

            }

            catch (SqlException e) { throw e; }

        }

        /// <summary>

        /// 关闭连接

        /// </summary>

        public void CloseConn()

        {

            if (this.conn != null && this.conn.State == ConnectionState.Open)

                this.conn.Close();

        }

        /// <summary>

        /// 检查Sql语句是否合法

        /// </summary>

        /// <param name="sqlStr">Sql语句</param>

        protected virtual void CheckArgs(string sqlStr)

        {

            if (sqlStr == null)

                throw new ArgumentNullException();

            if (sqlStr.Length == 0)

                throw new ArgumentOutOfRangeException();

        }

    }

}

时间: 2024-10-07 02:36:09

C# DBHelper 第二版的相关文章

《Java面向对象编程第二版》今年出版以来获得读者一致好评。

<Java面向对象编程第一版>自2016年出版以来,承蒙读者们的厚爱,至今已经重印了二十多次,成为国内Java领域里的经典Java技术宝典.在当当网上获得了1500多条好评: http://product.dangdang.com/9186890.html?point=comment_point 应广大读者的要求,为第一版进行了升级,第二版融合了最新的Java8的语言特性,它继续为Java开发人员们提供丰富全面的技术支持和帮助.在京东网上读者们对第二版的好评如潮,一致认为这是Java开发人员必

matlab 利用while循环计算平均值和方差(第二版)

第一版中因为公式中含有:分母项:n(n-1),而程序并没有对输入数进行判定,如果仅仅输入一个或者一个都不输入,将会出现除0的情况 基于此,进行第二版改进. 代码: % 脚本文件:states.m % % 目标: % 该程序首先累计输入未知的数(正数或者0),然后计算这个数据集的平均值和方差 % % 版本记录 % 日期 编者 描述 % ===== ========= ================ % 2015-10-4 21:21 泡泡 源码 % 2015-10-4 21:56 泡泡 纠正除0

《算法竞赛入门经典第二版》 P35 习题2-4 子序列的和(subsequence)

/* <算法竞赛入门经典第二版> P35 习题2-4: 输入两个正整数 n < m < 10^6,输出 (1/n)^2 + 1/(n+1)^2 +……+ 1/m^2,保留5位小数. 输入包含多组数据,结束标志为 m=n=0. 有错欢迎指出^_^ */ #include<stdio.h> int main() { int m,n,i,j=1; while(scanf("%d%d",&m,&n) != EOF) { double sum

阅读《代码大全》(第二版)体会小结

这一次阅读了著名的<代码大全>(第二版).全书虽然章节众多,但是主要就是几个大部分,这些部分我大多有一些浅显的了解但还未深入,当然也有一些全新的体验,例如表驱动法.全书内容丰富而详细,我在阅读的其中问题并不是太多,只不过很多的内容都觉得了解的还太浅,需要更多的实践以及阅读去体会.在这里记录下的也就是一些自己的体会,主要是对书中一些论断的不同看法与讨论,大部分是关于面向对象和结构化设计的内容:以及对于全新接触的表驱动法的学习体会. Question 1: “7.1 创建子程序的正当理由”中,提到

《Java面向对象编程第二版》即将出版

<Java面向对象编程第一版>自2016年出版以来,承蒙读者们的厚爱,至今已经重印了二十多次,成为国内Java领域里的经典Java技术宝典.应广大读者的要求,在过去的几个月,为第一版进行了升级,第二版融合了最新的Java8的语言特性,希望它能继续为Java开发人员们提供丰富全面的技术支持和帮助. 本书技术支持网址为:www.javathinker.net

&lt;MySQL管理之道第二版元旦截稿

<MySQL管理之道第二版>元旦截稿,这周即可送往机械工业出版社排版订正,在这里感谢沃趣科技公司高级DBA邱文辉提供"MariaDB 10 Hash Join索引优化"一文.

王爽《汇编语言第二版》读后感。

读了王爽的<汇编语言第二版>已经快两个月了,前几章写的都是些好理解的,所以速度稍快,到了中间,需要运用前面所学知识才能消化,所以有些稍慢.中间章节是汇编的语言核心,所以后面几章是汇编语言组织方式(子程序,中断安装等)和编程技巧,最爽的是有大段大段的完整代码展示.如果认真读过,经过中间章节的彷徨,到最后几章略有大功告成之感,速度稍快,跟心情感觉有很大关系.书中每个章节的题目都认真分析了,在网上下载了<王爽<汇编语言>第二版的习题答案>.不说了,虽然理解了书中代码,但一些编

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo

把妹导论第二版(Hunting-Girls Introduction II)

之所以要写这个东西,因为一些感悟.还有就是对前人的尊重.各位看官随便看看. 1.为何叫Hunting-Girls Introduction第二版? History:在ACM界中有一位大师,人送江湖称号白衣少年.人称白神.大家可以再wiki里看: http://acmdiy.org/wiki/index.php?title=白衣少年; Contents:白神精于把妹,有传说与<算法导论>与之相匹的<把妹导论>,正是<Hunting-Girls Introduction>.