分享一个SQLHelper类

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

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

using System;

using System.Collections.Generic;

using System.Text;

using System.Configuration;

using System.Data;

using System.Data.SqlClient;

using System.Reflection;

 

namespace {namespace}.DBUtility

{

    public abstract class SqlHelper

    {

        /// <summary>

        /// 数据库连接字符串

        /// </summary>

        public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["SqlConnectionString"].ToString();

        #region 批量数据插入数据库

        /// <summary>

        /// 批量数据插入数据库

        /// </summary>

        /// <param name="dt">DataTable</param>

        public static void DataTableToSQLServer(DataTable dt, string TabName) {

            using (SqlConnection destinationConnection = new SqlConnection(ConnectionString)) {

                destinationConnection.Open();

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection)) {

                    //将DataTable表名作为待导入库中的目标表名

                    bulkCopy.DestinationTableName = TabName;

                    foreach (DataColumn item in dt.Columns) {

                        bulkCopy.ColumnMappings.Add(item.ColumnName, item.ColumnName);

                    }

                    bulkCopy.WriteToServer(dt);

                }

            }

        }

        #endregion

 

        #region 执行操作,返回表  +static DataTable ExcuteTable(string sql, CommandType type, params SqlParameter[] ps)

        /// <summary>

        /// 执行操作,返回表

        /// </summary>

        /// <param name="sql"></param>

        /// <returns></returns>

        public static DataTable ExcuteTable(string sql, CommandType type, params SqlParameter[] ps) {

            DataTable dt = new DataTable();

            SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);

            da.SelectCommand.CommandType = type;

            da.SelectCommand.Parameters.AddRange(ps);

            da.Fill(dt);

            return dt;

        }

        #endregion

 

        #region 执行操作,返回DataSet表集合  +static DataSet ExcuteTable(string sql, CommandType type, params SqlParameter[] ps)

        /// <summary>

        /// 执行操作,返回表

        /// </summary>

        /// <param name="sql"></param>

        /// <returns></returns>

        public static DataSet ExcuteDataSet(string sql, CommandType type, params SqlParameter[] ps) {

            DataSet ds = new DataSet();

            SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);

            da.SelectCommand.CommandType = type;

            da.SelectCommand.Parameters.AddRange(ps);

            da.Fill(ds);

            return ds;

        }

        #endregion

 

        #region 返回单个值的泛型版本  -static T ExcuteScalar<T>(string sql, params SqlParameter[] ps)

        /// <summary>

        /// 返回单个值的泛型版本

        /// </summary>

        /// <typeparam name="T"></typeparam>

        /// <param name="sql"></param>

        /// <param name="ps"></param>

        /// <returns></returns>

        public static T ExcuteScalar<T>(string sql, params SqlParameter[] ps) {

            using (SqlConnection conn = new SqlConnection(ConnectionString)) {

                conn.Open();

                SqlCommand comm = new SqlCommand(sql, conn);

                comm.Parameters.AddRange(ps);

                object obj = comm.ExecuteScalar(); //标识列返回的值的类型不是int而是decimal

                return default(T);

            }

        }

        #endregion

 

        #region 返回泛型集合  + static List<T> GetList<T>(DataTable dt)

        /// <summary>

        /// 返回泛型集合

        /// </summary>

        /// <typeparam name="T">类型占位,并不是一个真正存在的类型,只在运行的时候才能确定它的类型是什么</typeparam>

        /// <param name="dt"></param>

        /// <returns></returns>

        public static List<T> GetList<T>(DataTable dt) {

            //int num = dt.Columns.Count;

            List<T> lists = new List<T>();

            //获取当前T所指定的类型

            Type t = typeof(T);

            //通过反射的方式得到类型的属性

            PropertyInfo[] ps = t.GetProperties();

            foreach (DataRow row in dt.Rows) {

                //每一行对应着一个对象,通过反射的方式创建出对象

                T obj = (T)Activator.CreateInstance(t);

                //不能通过对象.属性的方式来赋值,因为属性是什么都不知道

                //通过反射的方式为对象的属性赋值

                foreach (PropertyInfo p in ps) {

                    string name = p.Name;

                    //表的字段名称就是类的属性名称

                    p.SetValue(obj, row[name], null);

                }

                lists.Add(obj);

            }

            return lists;

        }

        #endregion

 

        #region 用提供的参数,在连接字符串所指定的数据库中执行SQL语句(非查询)

        /// <summary>

        /// 用提供的参数,在连接字符串所指定的数据库中执行SQL语句(非查询)

        /// </summary>

        /// <remarks>

        /// 使用示例: 

        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="connectionString">数据库连接字符串</param>

        /// <param name="commandType">命令类型(存储过程、文本等)</param>

        /// <param name="commandText">存储过程名或T-SQL语句</param>

        /// <param name="commandParameters">用于执行命令的参数数组</param>

        /// <returns>受命令所影响的行数</returns>

        public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters) {

 

            SqlCommand cmd = new SqlCommand();

 

            using (SqlConnection conn = new SqlConnection(connectionString)) {

                PrepareCommand(cmd, conn, null, commandType, commandText, commandParameters);

                int val = cmd.ExecuteNonQuery();

                cmd.Parameters.Clear();

                return val;

            }

        }

        #endregion

 

        #region 用提供的参数和存在的数据库连接对象,执行SQL语句(非查询)

        /// <summary>

        /// 用提供的参数和存在的数据库连接对象,执行SQL语句(非查询)

        /// </summary>

        /// <remarks>

        /// 使用示例: 

        ///  int result = ExecuteNonQuery(connection, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="connection">存在的数据库连接对象</param>

        /// <param name="commandType">命令类型(存储过程、文本等)</param>

        /// <param name="commandText">存储过程名或T-SQL语句</param>

        /// <param name="commandParameters">用于执行命令的参数数组</param>

        /// <returns>受命令所影响的行数</returns>

        public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters) {

 

            SqlCommand cmd = new SqlCommand();

 

            PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);

            int val = cmd.ExecuteNonQuery();

            cmd.Parameters.Clear();

            return val;

        }

        #endregion

 

        #region 用提供的参数和存在的事务对象,执行SQL语句(非查询)

        /// <summary>

        /// 用提供的参数和存在的事务对象,执行SQL语句(非查询)

        /// </summary>

        /// <remarks>

        /// 使用示例: 

        ///  int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="trans">存在的事务对象</param>

        /// <param name="commandType">命令类型(存储过程、文本等)</param>

        /// <param name="commandText">存储过程名或T-SQL语句</param>

        /// <param name="commandParameters">用于执行命令的参数数组</param>

        /// <returns>受命令所影响的行数</returns>

        public static int ExecuteNonQuery(SqlTransaction trans, CommandType commandType, string commandText, params SqlParameter[] commandParameters) {

            SqlCommand cmd = new SqlCommand();

            PrepareCommand(cmd, trans.Connection, trans, commandType, commandText, commandParameters);

            int val = cmd.ExecuteNonQuery();

            cmd.Parameters.Clear();

            return val;

        }

        #endregion

 

        #region 用提供的参数,在连接字符串所指定的数据库中执行SQL查询,并返回结果集(SqlDataReader)

        /// <summary>

        /// 用提供的参数,在连接字符串所指定的数据库中执行SQL查询,并返回结果集(SqlDataReader)

        /// </summary>

        /// <remarks>

        /// 使用示例: 

        ///  SqlDataReader r = ExecuteReader(connectionString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="connectionString">数据库连接字符串</param>

        /// <param name="commandType">命令类型(存储过程、文本等)</param>

        /// <param name="commandText">存储过程名或T-SQL语句</param>

        /// <param name="commandParameters">用于执行命令的参数数组</param>

        /// <returns>一个包含结果的SqlDataReader对象</returns>

        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

            SqlCommand cmd = new SqlCommand();

            SqlConnection conn = new SqlConnection(connectionString);

 

            // 之所以这里用 try/catch,是因为:

            // 如果方法抛出异常时,我们希望关闭连接并抛出异常

            // 因为此时不会返回 DataReader,故 commandBehaviour.CloseConnection 也不起作用

            try {

                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                cmd.Parameters.Clear();

                return rdr;

            } catch {

                conn.Close();

                throw;

            }

        }

        #endregion

 

        #region 用提供的参数,在连接字符串所指定的数据库中执行SQL查询,并返回查询结果的第一行第一列的值

        /// <summary>

        /// 用提供的参数,在连接字符串所指定的数据库中执行SQL查询,并返回查询结果的第一行第一列的值

        /// </summary>

        /// <remarks>

        /// 使用示例: 

        ///  Object obj = ExecuteScalar(connectionString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="connectionString">数据库连接字符串</param>

        /// <param name="commandType">命令类型(存储过程、文本等)</param>

        /// <param name="commandText">存储过程名或T-SQL语句</param>

        /// <param name="commandParameters">用于执行命令的参数数组</param>

        /// <returns>一个 object 对象,可用 Convert.To{Type} 转换为所需类型</returns>

        public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters) {

            SqlCommand cmd = new SqlCommand();

 

            using (SqlConnection connection = new SqlConnection(connectionString)) {

                PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);

                object val = cmd.ExecuteScalar();

                cmd.Parameters.Clear();

                return val;

            }

        }

        #endregion

 

        #region 用提供的参数和存在的数据库连接对象,执行SQL查询,并返回查询结果的第一行第一列的值

        /// <summary>

        /// 用提供的参数和存在的数据库连接对象,执行SQL查询,并返回查询结果的第一行第一列的值

        /// </summary>

        /// <remarks>

        /// 使用示例: 

        ///  Object obj = ExecuteScalar(connection, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="connection">存在的数据库连接对象</param>

        /// <param name="commandType">命令类型(存储过程、文本等)</param>

        /// <param name="commandText">存储过程名或T-SQL语句</param>

        /// <param name="commandParameters">用于执行命令的参数数组</param>

        /// <returns>一个 object 对象,可用 Convert.To{Type} 转换为所需类型</returns>

        public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters) {

 

            SqlCommand cmd = new SqlCommand();

 

            PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);

            object val = cmd.ExecuteScalar();

            cmd.Parameters.Clear();

            return val;

        }

        #endregion

 

        #region 用提供的参数和存在的数据库连接对象,执行SQL查询,并返回查询结果的DatSet结果集

        /// <summary>

        /// 用提供的参数和存在的数据库连接对象,执行SQL查询,并返回查询结果的DatSet结果集

        /// </summary>

        /// <param name="connectionString">链接语句</param>

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

        /// <param name="commandType">查询模式</param>

        /// <param name="commandParameters">Parameter参数</param>

        /// <returns></returns>

        static public DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType, params SqlParameter[] commandParameters) {

            DataSet ds = new DataSet();

            using (SqlConnection con = new SqlConnection(ConnectionString)) {

                SqlDataAdapter adapter = new SqlDataAdapter();

                SqlCommand cmd = new SqlCommand();

                PrepareCommand(cmd, con, null, commandType, commandText, commandParameters);

                adapter.SelectCommand = cmd;

                adapter.Fill(ds);

            }

            return ds;

        }

        #endregion

 

        #region 构建一个用于执行的命令对象

        /// <summary>

        /// 构建一个用于执行的命令对象

        /// </summary>

        /// <param name="cmd">SqlCommand 对象</param>

        /// <param name="conn">SqlConnection 对象</param>

        /// <param name="trans">SqlTransaction 对象</param>

        /// <param name="cmdType">命令类型(存储过程、文本等)</param>

        /// <param name="cmdText">存储过程名或T-SQL语句</param>

        /// <param name="cmdParms">用于执行命令的参数数组</param>

        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {

 

            if (conn.State != ConnectionState.Open)

                conn.Open();

 

            cmd.Connection = conn;

            cmd.CommandText = cmdText;

 

            if (trans != null)

                cmd.Transaction = trans;

 

            cmd.CommandType = cmdType;

 

            if (cmdParms != null) {

                foreach (SqlParameter parm in cmdParms)

                    cmd.Parameters.Add(parm);

            }

        }

        #endregion

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值