开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1396|回复: 1
收起左侧

[图文教程] NET数据库基本操作类

[复制链接]

结帖率:33% (1/3)
发表于 2013-2-21 11:35:15 | 显示全部楼层 |阅读模式   上海市上海市
NET数据库基本操作类。欢迎大家指正
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Data;
  6. using System.Data.SqlClient;

  7. namespace Tools.Data
  8. {
  9.     /// <summary>
  10.     /// 数据库连接类
  11.     /// 创建时间:2013-02-20
  12.     /// </summary>
  13.     public class SqlHelper
  14.     {
  15.         #region 基本变量
  16.          private static SqlConnection conn = null;
  17.         private static string _connectionString = "";
  18.         /// <summary>
  19.         /// 数据库连接字符串
  20.         /// </summary>
  21.         public static string ConnectionString
  22.         {
  23.             get { return _connectionString; }
  24.             set { _connectionString = value; }
  25.         }
  26.         #endregion

  27.         #region 私有方法
  28.         /// <summary>
  29.         /// 创建数据库连接
  30.         /// </summary>
  31.         private static void CreateConnection()
  32.         {
  33.             //判断连接是否创建,没创建的话创建一个连接
  34.             if (conn == null)
  35.             {
  36.                 conn = new SqlConnection(ConnectionString);
  37.             }
  38.         }

  39.         /// <summary>
  40.         /// 打开数据库连接
  41.         /// </summary>
  42.         private static void Open()
  43.         {
  44.             //判断连接是否关闭
  45.             if (conn.State == ConnectionState.Closed)
  46.             {
  47.                 try
  48.                 {
  49.                     conn.Open();
  50.                 }
  51.                 catch (Exception ex)
  52.                 {
  53.                     //添加错误日志 ex
  54.                 }
  55.                 finally
  56.                 { }
  57.             }
  58.         }
  59.         /// <summary>
  60.         /// 关闭数据库连接
  61.         /// </summary>
  62.         private static void Close()
  63.         {
  64.             //判断连接是否创建
  65.             if (conn != null)
  66.             {
  67.                 //判断连接的状态是否打开
  68.                 if (conn.State == ConnectionState.Open)
  69.                 {
  70.                     conn.Close();
  71.                 }
  72.             }
  73.         }
  74.         /// <summary>
  75.         /// 释放资源
  76.         /// </summary>
  77.         private static void Dispose()
  78.         {
  79.             //判断连接是否创建
  80.             if (conn != null)
  81.             {
  82.                 conn.Dispose();
  83.                 conn = null;
  84.             }
  85.         }
  86.         /// <summary>
  87.         /// 将SqlParameter参数数组(参数值)分配给SqlCommand命令.
  88.         /// 这个方法将给任何一个参数分配DBNull.Value;
  89.         /// 该操作将阻止默认值的使用.
  90.         /// </summary>
  91.         /// <param name="command">命令名</param>
  92.         /// <param name="commandParameters">SqlParameters数组</param>
  93.         private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)
  94.         {
  95.             if (command == null) throw new ArgumentNullException("command");
  96.             if (commandParameters != null)
  97.             {
  98.                 foreach (SqlParameter p in commandParameters)
  99.                 {
  100.                     if (p != null)
  101.                     {
  102.                         // 检查未分配值的输出参数,将其分配以DBNull.Value.
  103.                         if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) &&
  104.                             (p.Value == null))
  105.                         {
  106.                             p.Value = DBNull.Value;
  107.                         }
  108.                         command.Parameters.Add(p);
  109.                     }
  110.                 }
  111.             }
  112.         }

  113.         /// <summary>
  114.         /// 创建SqlCommand对象
  115.         /// </summary>
  116.         /// <param name="comm">要处理的SqlParameter</param>
  117.         /// <param name="commandType">命令类型 (存储过程,命令文本, 其它.)</param>
  118.         /// <param name="commandText">存储过程名或都SQL命令文本</param>
  119.         /// <param name="commandParameters">和命令相关联的SqlParameter参数数组,如果没有参数为'null'</param>
  120.         /// <param name="mustCloseConnection">如果连接是打开的,则为true,其它情况下为false.</param>
  121.         private static void Createcommand(SqlCommand comm, CommandType commandType, string commandText, SqlParameter[] commandParameters, out bool mustCloseConnection)
  122.         {
  123.             if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");
  124.             if (conn == null)
  125.                 CreateConnection();
  126.             if (conn.State == ConnectionState.Closed)
  127.             {
  128.                 Open();
  129.                 mustCloseConnection = true;
  130.             }
  131.             else
  132.             {
  133.                 mustCloseConnection = false;
  134.             }

  135.             comm.Connection = conn;

  136.             comm.CommandType = commandType;
  137.             comm.CommandText = commandText;

  138.             if (commandParameters != null)
  139.                 AttachParameters(comm, commandParameters);
  140.         }
  141.         #endregion

  142.         #region ExecuteNonQuery
  143.         /// <summary>
  144.         /// 执行SqlCommand
  145.         /// </summary>
  146.         /// <param name="commandText">SQL语句</param>
  147.         /// <returns>返回影响的行数</returns>
  148.         public static int ExecuteNonQuery(string commandText)
  149.         {
  150.             int outID = 0;
  151.             return ExecuteNonQuery(out outID, CommandType.Text, commandText, (SqlParameter[])null);
  152.         }


  153.         /// <summary>
  154.         /// 执行SqlCommand
  155.         /// </summary>
  156.         /// <param name="id">影响的行数</param>
  157.         /// <param name="commandText">SQL语句</param>
  158.         /// <returns>返回影响的行数</returns>
  159.         public static int ExecuteNonQuery(out int outID, string commandText)
  160.         {
  161.             return ExecuteNonQuery(out outID, CommandType.Text, commandText, (SqlParameter[])null);
  162.         }

  163.         /// <summary>
  164.         /// 执行SqlCommand
  165.         /// </summary>
  166.         /// <param name="id">影响的行数</param>
  167.         /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
  168.         /// <param name="commandText">存储过程名称或SQL语句</param>
  169.         /// <returns>返回影响的行数</returns>
  170.         public static int ExecuteNonQuery(out int outID, CommandType commandType, string commandText)
  171.         {
  172.             return ExecuteNonQuery(out outID, commandType, commandText, (SqlParameter[])null);
  173.         }

  174.         /// <summary>
  175.         /// 执行SqlCommand
  176.         /// </summary>
  177.         /// <param name="id">影响的行数</param>
  178.         /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
  179.         /// <param name="commandText">存储过程名称或SQL语句</param>
  180.         /// <param name="commandParameters">SqlParamter参数数组</param>
  181.         /// <returns>返回影响的行数</returns>
  182.         public static int ExecuteNonQuery(out int outID, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  183.         {
  184.             // 创建SqlCommand命令,并进行预处理
  185.             SqlCommand cmd = new SqlCommand();
  186.             bool mustCloseConnection = false;
  187.             Createcommand(cmd, commandType, commandText, commandParameters, out mustCloseConnection);
  188.             // 执行命令
  189.             int retval = cmd.ExecuteNonQuery();
  190.             // 清除参数,以便再次使用.
  191.             cmd.Parameters.Clear();
  192.             cmd.CommandType = CommandType.Text;
  193.             cmd.CommandText = "SELECT @@identity";

  194.             outID = int.Parse(cmd.ExecuteScalar().ToString());


  195.             if (mustCloseConnection)
  196.             {
  197.                 Close();
  198.             }

  199.             return retval;
  200.         }
  201.         #endregion

  202.         #region ExecuteScalar
  203.         /// <summary>
  204.         /// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列.
  205.         /// </summary>
  206.         /// <param name="commandText">SQL语句</param>
  207.         /// <returns>返回结果集中的第一行第一列</returns>
  208.         public static object ExecuteScalar(string commandText)
  209.         {
  210.             return ExecuteScalar(CommandType.Text, commandText);
  211.         }
  212.         /// <summary>
  213.         /// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列.
  214.         /// </summary>
  215.         /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
  216.         /// <param name="commandText">存储过程名称或SQL语句</param>
  217.         /// <returns>返回结果集中的第一行第一列</returns>
  218.         public static object ExecuteScalar(CommandType commandType, string commandText)
  219.         {
  220.             return ExecuteScalar(commandType, commandText, (SqlParameter[])null);
  221.         }
  222.         /// <summary>
  223.         /// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列.
  224.         /// </summary>
  225.         /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
  226.         /// <param name="commandText">存储过程名称或SQL语句</param>
  227.         /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
  228.         /// <returns>返回结果集中的第一行第一列</returns>
  229.         public static object ExecuteScalar(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  230.         {
  231.             // 创建SqlCommand命令,并进行预处理
  232.             SqlCommand cmd = new SqlCommand();

  233.             bool mustCloseConnection = false;
  234.             Createcommand(cmd, commandType, commandText, commandParameters, out mustCloseConnection);

  235.             // 执行SqlCommand命令,并返回结果.
  236.             object retval = cmd.ExecuteScalar();

  237.             // 清除参数,以便再次使用.
  238.             cmd.Parameters.Clear();

  239.             if (mustCloseConnection)
  240.                 Close();
  241.             return retval;
  242.         }
  243.         #endregion

  244.         #region ExecuteDataset

  245.         /// <summary>
  246.         /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet.
  247.         /// </summary>
  248.         /// <param name="commandText">SQL语句</param>
  249.         /// <returns>返回一个包含结果集的DataSet</returns>
  250.         public static DataSet ExecuteDataset(string commandText)
  251.         {
  252.             return ExecuteDataset(CommandType.Text, commandText, (SqlParameter[])null);

  253.         }
  254.         /// <summary>
  255.         /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet.
  256.         /// </summary>
  257.         /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
  258.         /// <param name="commandText">存储过程名或SQL语句</param>
  259.         /// <param name="commandParameters">SqlParamter参数数组</param>
  260.         /// <returns>返回一个包含结果集的DataSet</returns>
  261.         public static DataSet ExecuteDataset(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
  262.         {
  263.             // 预处理
  264.             SqlCommand cmd = new SqlCommand();
  265.             bool mustCloseConnection = false;
  266.             Createcommand(cmd, commandType, commandText, commandParameters, out mustCloseConnection);

  267.             // 创建DbDataAdapter和DataSet.
  268.             using (SqlDataAdapter da = new SqlDataAdapter())
  269.             {
  270.                 da.SelectCommand = cmd;
  271.                 DataSet ds = new DataSet();

  272.                 // 填充DataSet.
  273.                 da.Fill(ds);



  274.                 cmd.Parameters.Clear();


  275.                 if (mustCloseConnection)
  276.                     Close();
  277.                 return ds;
  278.             }
  279.         }
  280.         #endregion

  281.         #region ExecuteReader
  282.         /// <summary>
  283.         /// 执行指定数据库连接对象的数据阅读器.
  284.         /// </summary>
  285.         /// <param name="commandText">存储过程名或SQL语句</param>
  286.         /// <returns>返回包含结果集的SqlDataReader</returns>
  287.         private static SqlDataReader ExecuteReader(string commandText)
  288.         {
  289.             return ExecuteReader(CommandType.Text, commandText, (SqlParameter[])null);
  290.         }
  291.         /// <summary>
  292.         /// 执行指定数据库连接对象的数据阅读器.
  293.         /// </summary>
  294.         /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
  295.         /// <param name="commandText">存储过程名或SQL语句</param>
  296.         /// <returns>返回包含结果集的SqlDataReader</returns>
  297.         private static SqlDataReader ExecuteReader(CommandType commandType, string commandText)
  298.         {
  299.             return ExecuteReader(commandType, commandText, (SqlParameter[])null);
  300.         }

  301.         /// <summary>
  302.         /// 执行指定数据库连接对象的数据阅读器.
  303.         /// </summary>
  304.         /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
  305.         /// <param name="commandText">存储过程名或SQL语句</param>
  306.         /// <param name="commandParameters">SqlParameters参数数组,如果没有参数则为'null'</param>
  307.         /// <returns>返回包含结果集的SqlDataReader</returns>
  308.         private static SqlDataReader ExecuteReader(CommandType commandType, string commandText, SqlParameter[] commandParameters)
  309.         {
  310.             bool mustCloseConnection = false;
  311.             // 创建命令
  312.             SqlCommand cmd = new SqlCommand();
  313.             try
  314.             {
  315.                 Createcommand(cmd, commandType, commandText, commandParameters, out mustCloseConnection);

  316.                 // 创建数据阅读器
  317.                 SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

  318.                 // _queries++;
  319.                 // 清除参数,以便再次使用..
  320.                 // HACK: There is a problem here, the output parameter values are fletched
  321.                 // when the reader is closed, so if the parameters are detached from the command
  322.                 // then the SqlReader can磘 set its values.
  323.                 // When this happen, the parameters can磘 be used again in other command.
  324.                 bool canClear = true;
  325.                 foreach (SqlParameter commandParameter in cmd.Parameters)
  326.                 {
  327.                     if (commandParameter.Direction != ParameterDirection.Input)
  328.                         canClear = false;
  329.                 }

  330.                 if (canClear)
  331.                 {
  332.                     //cmd.Dispose();
  333.                     cmd.Parameters.Clear();
  334.                 }


  335.                 return dataReader;
  336.             }
  337.             catch
  338.             {
  339.                 if (mustCloseConnection)
  340.                     Close();
  341.                 throw;
  342.             }
  343.         }
  344.         #endregion

  345.         #region 生成参数
  346.         /// <summary>
  347.         /// 生成参数
  348.         /// </summary>
  349.         /// <param name="ParamName">参数名称</param>
  350.         /// <param name="DbType">参数类型</param>
  351.         /// <param name="Size">参数类型值大小</param>
  352.         /// <param name="Value">参数值</param>
  353.         /// <returns></returns>
  354.         public static SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
  355.         {
  356.             return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
  357.         }
  358.         /// <summary>
  359.         /// 生成参数
  360.         /// </summary>
  361.         /// <param name="ParamName">参数名称</param>
  362.         /// <param name="DbType">参数类型</param>
  363.         /// <param name="Value">参数值</param>
  364.         /// <returns></returns>
  365.         public static SqlParameter MakeInParam(string ParamName, SqlDbType DbType, object Value)
  366.         {
  367.             return MakeParam(ParamName, DbType, 0, ParameterDirection.Input, Value);
  368.         }

  369.         /// <summary>
  370.         /// 生成参数
  371.         /// </summary>
  372.         public static SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
  373.         {
  374.             SqlParameter param;

  375.             param = MakeParam(ParamName, DbType, Size);

  376.             param.Direction = Direction;
  377.             if (!(Direction == ParameterDirection.Output && Value == null))
  378.                 param.Value = Value;

  379.             return param;
  380.         }
  381.         /// <summary>
  382.         /// 生成参数
  383.         /// </summary>
  384.         public static SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size)
  385.         {
  386.             SqlParameter param;

  387.             if (Size > 0)
  388.                 param = new SqlParameter(ParamName, DbType, Size);
  389.             else
  390.                 param = new SqlParameter(ParamName, DbType);

  391.             return param;
  392.         }
  393.         #endregion
  394.     }
  395. }
复制代码
发表于 2013-3-3 19:44:04 | 显示全部楼层   辽宁省锦州市
沙发啊,嘿嘿
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表