数据访问操作类SqlHelper代码补全上异常,非常感谢!!!

Vin Cente 2020-09-18 05:05:50
之前学习的时候自己编写了一个数据库操作类

大佬帮帮忙加上try-catch以及异常写入本地日志相关的,使代码更加完善,

代码或注释是否有错误,最后那个事务是否能用,是否还缺少其它方法?

谢谢各位大佬了,代码如下:

public class SqlHelper
{
//创建数据库连接
public static readonly string connString = ConfigurationManager.ConnectionStrings["MySql"].ConnectionString;
/// <summary>
/// 等待执行SQL语句的SqlCommand对象
/// </summary>
/// <param name="conn">SqlConnection对象,不允许为空</param>
/// <param name="comm">SqlCommand对象,不允许为空</param>
/// <param name="commType">SqlCommand类型,不允许为空</param>
/// <param name="commText">SqlCommand文本或SQL语句,不允许为空</param>
/// <param name="commParam">SqlParameter对象,允许为空</param>
private static void PrepareCommand(SqlConnection conn, SqlCommand comm, CommandType commType, string commText, SqlParameter[] commParam)
{
//判断数据库连接是否打开
if (conn.State != ConnectionState.Open)
{
//打开数据库连接
conn.Open();
}
//设置SqlCommand的连接
comm.Connection = conn;
//设置SqlCommand的文本
comm.CommandText = commText;
//设置SqlCommand的类型
comm.CommandType = commType;
//判断SqlParameter是否为空
if (commParam != null)
{
//循环填充数据
foreach (SqlParameter param in commParam)
{
comm.Parameters.Add(param);
}
}
}
/// <summary>
/// 等待执行存储过程的SqlCommand对象
/// </summary>
/// <param name="conn">SqlConnection对象,不允许为空</param>
/// <param name="comm">SqlCommand对象,不允许为空</param>
/// <param name="commName">存储过程名称</param>
/// <param name="commParam">SqlParameter对象,允许为空</param>
private static void PrepareCommand(SqlConnection conn, SqlCommand comm, string commName, params object[] commParam)
{
//判断数据库连接是否打开
if (conn.State != ConnectionState.Open)
{
//打开数据库连接
conn.Open();
}
//设置SqlCommand的连接
comm.Connection = conn;
//设置SqlCommand的存储过程名称
comm.CommandText = commName;
//设置SqlCommand的类型
comm.CommandType = CommandType.StoredProcedure;
//获取存储过程的参数
SqlCommandBuilder.DeriveParameters(comm);
//移除Return_Value 参数
comm.Parameters.RemoveAt(0);
//判断SqlParameter是否为空
if (commParam != null)
{
//循环赋值
for (int i = 0; i < comm.Parameters.Count; i++)
{
comm.Parameters[i].Value = commParam[i];
}
}
}
/// <summary>
/// 执行SQL语句命令
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="commType">命令类型</param>
/// <param name="commText">SQL语句 / 参数化SQL语句</param>
/// <param name="commParam">对象参数</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//创建SqlCommand命令
SqlCommand comm = new SqlCommand();
//使用Using提前释放SqlConnection资源
using (SqlConnection conn = new SqlConnection(connString))
{
//执行方法并传递参数
PrepareCommand(conn, comm, commType, commText, commParam);
//执行操作并接收结果
int val = comm.ExecuteNonQuery();
//清空SqlCommand参数列表
comm.Parameters.Clear();
//返回结果
return val;
}
}
/// <summary>
/// 执行SQL存储过程
/// 注意:不能执行有输出(OUT)参数的存储过程
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="commName">存储过程名称</param>
/// <param name="commParam">对象参数</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string connString, string commName, params object[] commParam)
{
//使用Using释放SqlConnection资源
using (SqlConnection conn = new SqlConnection(connString))
{
//创建SqlCommand命令
SqlCommand comm = new SqlCommand();
//执行方法并传递参数
PrepareCommand(conn, comm, commName, commParam);
//执行操作并接收结果
int val = comm.ExecuteNonQuery();
//返回结果
return val;
}
}
/// <summary>
/// 执行SQL语句命令
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="commType">命令类型</param>
/// <param name="commText">SQL语句 / 参数化SQL语句</param>
/// <param name="commParam">对象参数</param>
/// <returns>SqlDataReader对象</returns>
public static SqlDataReader ExecuteReader(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//创建数据库连接
SqlConnection conn = new SqlConnection(connString);
try
{
//创建SqlCommand命令
SqlCommand comm = new SqlCommand();
//执行方法并传递参数
PrepareCommand(conn, comm, commType, commText, commParam);
//创建SqlDataReader接收数据
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
//返回SqlDataReader对象
return reader;
}
catch
{
//关闭数据库连接
conn.Close();
//抛出异常
throw;
}
}
/// <summary>
/// 执行SQL存储过程
/// 注意:不能执行有输出(OUT)参数的存储过程
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="commName">存储过程名称</param>
/// <param name="commParam">对象参数</param>
/// <returns>SqlDataReader对象</returns>
public static SqlDataReader ExecuteReader(string connString, string commName, params object[] commParam)
{
//创建数据库连接
SqlConnection conn = new SqlConnection(connString);
try
{
//创建SqlCommand命令
SqlCommand comm = new SqlCommand();
//执行方法并传递参数
PrepareCommand(conn, comm, commName, commParam);
//创建SqlDataReader接收数据
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
//返回SqlDataReader对象
return reader;
}
catch
{
//关闭数据库连接
conn.Close();
//抛出异常
throw;
}
}
/// <summary>
/// 执行SQL语句命令
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="commType">命令类型</param>
/// <param name="commText">SQL语句 / 参数化SQL语句</param>
/// <param name="commParam">对象参数</param>
/// <returns>DataSet对象</returns>
public static DataSet ExecuteDataSet(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//使用Using释放SqlConnection资源
using (SqlConnection conn = new SqlConnection(connString))
{
//创建SqlCommand命令
SqlCommand comm = new SqlCommand();
//执行方法并传递参数
PrepareCommand(conn, comm, commType, commText, commParam);
//使用Using释放SqlDataAdapter资源
using (SqlDataAdapter da = new SqlDataAdapter(comm))
{
//初始化DataSet
DataSet ds = new DataSet();
//执行方法并传递参数
da.Fill(ds);
//返回DataSet对象
return ds;
}
}
}
/// <summary>
/// 执行SQL存储过程
/// 注意:不能执行有输出(OUT)参数的存储过程
/// </summary>
/// <param name="connString">数据库连接字符串</param>
/// <param name="commName">存储过程名称</param>
/// <param name="commParam">对象参数</param>
/// <returns>DataSet对象</returns>
public static DataSet ExecuteDataSet(string connString, string commName, params object[] commParam)
{
//使用Using释放SqlConnection资源
using (SqlConnection conn = new SqlConnection(connString))
{
//创建SqlCommand命令
SqlCommand comm = new SqlCommand();
//执行方法并传递参数
PrepareCommand(conn, comm, commName, commParam);
//使用Using释放SqlDataAdapter资源
using (SqlDataAdapter da = new SqlDataAdapter(comm))
{
//初始化DataSet
DataSet ds = new DataSet();
//执行方法并传递参数
da.Fill(ds);
//返回DataSet对象
return ds;
}
}
}
...全文
6251 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vin Cente 2020-09-21
  • 打赏
  • 举报
回复
虽然有微软现成的,但是不够了解。之前学的就是这个,好像从始至终都用的这个来操作数据库,一开始是4个方法,后来又整合的事务和存储过程。
threenewbee 2020-09-20
  • 打赏
  • 举报
回复
微软不是已经提供了一个了么,为什么现成的不用还要自己写。
Vin Cente 2020-09-18
  • 打赏
  • 举报
回复

        /// <summary>
        /// 执行SQL语句命令
        /// </summary>
        /// <param name="connString">数据库连接字符串</param>
        /// <param name="commType">命令类型</param>
        /// <param name="commText">SQL语句 / 参数化SQL语句</param>
        /// <param name="commParam">对象参数</param>
        /// <returns>执行结果对象</returns>
        public static object ExecuteScalar(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
        {
            //创建SqlCommand命令
            SqlCommand comm = new SqlCommand();
            //使用Using释放SqlConnection资源
            using (SqlConnection conn = new SqlConnection(connString))
            {
                //执行方法并传递参数
                PrepareCommand(conn, comm, commType, commText, commParam);
                //执行操作并接收结果
                object val = comm.ExecuteScalar();
                //返回结果
                return val;
            }
        }
        /// <summary>
        /// 执行SQL存储过程
        /// 注意:不能执行有输出(OUT)参数的存储过程
        /// </summary>
        /// <param name="connString">数据库连接</param>
        /// <param name="commName">存储过程名称</param>
        /// <param name="commParam">对象参数</param>
        /// <returns>执行结果对象</returns>
        public static object ExecuteScalar(string connString, string commName, params object[] commParam)
        {
            //创建SqlCommand命令
            SqlCommand comm = new SqlCommand();
            //使用Using释放SqlConnection资源
            using (SqlConnection conn = new SqlConnection(connString))
            {
                //执行方法并传递参数
                PrepareCommand(conn, comm, commName, commParam);
                //执行操作并接收结果
                object val = comm.ExecuteScalar();
                //返回结果
                return val;
            }
        }
        /// <summary>
        /// 执行事务SQL语句
        /// </summary>
        /// <param name="connString">数据库连接</param>
        /// <param name="commParam">事务参数</param>
        public static void ExecuteTransaction(string connString, params string[] commParam)
        {
            //使用Using释放SqlConnection资源
            using (SqlConnection conn = new SqlConnection(connString))
            {
                //打开数据库连接
                conn.Open();
                //开始事务
                SqlTransaction tran = conn.BeginTransaction();
                //创建SqlCommand命令
                SqlCommand comm = new SqlCommand();
                //设置SqlCommand的连接
                comm.Connection = conn;
                //设置SqlCommand的事务
                comm.Transaction = tran;
                try
                {
                    //循环执行事务
                    foreach (string param in commParam)
                    {
                        //设置SqlCommand的文本
                        comm.CommandText = param;
                        //执行事务
                        comm.ExecuteNonQuery();
                    }
                    //提交事务
                    tran.Commit();
                }
                catch
                {
                    //终止事务
                    tran.Rollback();
                    //抛出异常
                    throw;
                }
                finally
                {
                    //关闭数据库连接
                    conn.Close();
                }
            }
        }
        /// <summary>
        /// 将异常信息写入日志
        /// </summary>
        /// <param name="sqlLog">异常信息</param>
        private static void WriteLog(string sqlLog)
        {
            FileStream fs = new FileStream("SqlHelper.log", FileMode.Append);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(DateTime.Now.ToString() + " " + sqlLog);
            sw.Close();
            fs.Close();
        }
    }
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧