C#/WPF之ADO.NET操作SqlServer封装

ADO.NET操作SqlServer封装

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Xg.Star
{
    /// <summary>
    /// @author Star
    /// @class 基础通用数据访问类=>SqlServer
    /// </summary>
    public class SQLHelperBase
    {
        // 数据库本地连接字符串=>从App.config配置文件中的connectString中读取
        private static string connString = ConfigurationManager.ConnectionStrings["dbConn"].ToString();

        /**
        * @function 多行多列多表结果的查询=>DataSet
        * @param dicTableAndSql 表名和sql语句一一对应
        * @return 返回查询后的多表结果集
        */
        public static DataSet GetDataSet(Dictionary<string,string> dicTableAndSql)
        {
            // 连接对象
            SqlConnection sqlConnection = new SqlConnection(connString);
            // 命令对象
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;
            // 执行查询
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            // 数据集
            DataSet dataSet = new DataSet();
            try
            {
                // 打开连接
                sqlConnection.Open();
                // 遍历所有sql语句和表名
                foreach (var tbName in dicTableAndSql.Keys)
                {
                    // 指定对应表名的sql语句
                    sqlCommand.CommandText = dicTableAndSql[tbName];
                    // 执行查询填充数据到对应表名
                    sqlDataAdapter.Fill(dataSet,tbName);
                }
                return dataSet;
            }
            catch (Exception ex)
            {
                // 出现异常了
                string errorMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 执行【GetDataSet(string sql)】方法发生异常:" + ex.Message;
                throw new Exception(errorMsg);
            }
            finally
            {
                // 无论如何都要关闭数据库
                sqlConnection.Close();
            }
        }

        /**
         * @function 多行多列结果的查询=>DataSet
         * @param cmdText 要执行的sql语句
         * @param tableName 要填充的表名
         * @param paramArray 要执行的sql语句中的变量参数数组
         * @return 返回查询后的结果集
         */
        public static DataSet GetDataSet(string cmdText, string tableName = null, SqlParameter[] paramArray = null)
        {
            // 连接对象
            SqlConnection sqlConnection = new SqlConnection(connString);
            // 命令对象
            SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection);
            // 执行查询
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            // 数据集
            DataSet dataSet = new DataSet();
            if (paramArray != null)
            {
                sqlCommand.Parameters.AddRange(paramArray);
            }
            try
            {
                // 打开连接
                sqlConnection.Open();
                // 执行查询
                if (!string.IsNullOrEmpty(tableName)) // 如果有传递表名才用表明
                    sqlDataAdapter.Fill(dataSet, tableName);
                else 
                    sqlDataAdapter.Fill(dataSet);
                return dataSet;
            }
            catch (Exception ex)
            {
                // 出现异常了
                string errorMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 执行【GetDataSet(string sql)】方法发生异常:" + ex.Message;
                throw new Exception(errorMsg);
            }
            finally
            {
                // 无论如何都要关闭数据库
                sqlConnection.Close();
            }
        }

        /**
         * @function 多行多列结果的查询=>Reader
         * @param cmdText 要执行的sql语句
         * @param paramArray 要执行的sql语句中的变量参数数组
         * @return 返回查询后的只读结果集
         */
        public static SqlDataReader ExecuteReader(string cmdText, SqlParameter[] paramArray = null)
        {
            // 连接对象
            SqlConnection sqlConnection = new SqlConnection(connString);
            // 命令对象
            SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection);
            if (paramArray != null)
            {
                sqlCommand.Parameters.AddRange(paramArray);
            }
            try
            {
                // 打开数据库
                sqlConnection.Open();
                // 执行查询
                // CommandBehavior.CloseConnection 表示如果SqlDataReader关闭的时候 顺便关闭连接
                return sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                // 出现异常了
                string errorMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 执行【ExecuteReader(string sql, SqlParameter[] paramArray = null)】方法发生异常:" + ex.Message;
                throw new Exception(errorMsg);
            }
        }

        /**
         * @function 单一结果的查询
         * @param cmdText 要执行的sql语句
         * @param paramArray 要执行的sql语句中的变量参数数组
         * @return 返回查询后的单一结果
         */
        public static object ExecuteScalar(string cmdText, SqlParameter[] paramArray = null)
        {
            // 连接对象
            SqlConnection sqlConnection = new SqlConnection(connString);
            // 命令对象
            SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection);
            if (paramArray != null)
            {
                sqlCommand.Parameters.AddRange(paramArray);
            }
            try
            {
                // 打开连接
                sqlConnection.Open();
                // 执行查询
                return sqlCommand.ExecuteScalar();
            }
            catch (Exception ex)
            {
                // 出现异常了
                string errorMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 执行【ExecuteScalar(string sql)】方法发生异常:" + ex.Message;
                throw new Exception(errorMsg);
            }
            finally
            {
                // 无论如何都要关闭数据库
                sqlConnection.Close();
            }
        }

        /**
         * @function 更新/删除/插入数据
         * @param cmdText 要执行的sql语句
         * @param paramArray 要执行的sql语句中的变量参数数组
         * @return 返回影响的行数
         */
        public static int ExecuteNonQuery(string cmdText, SqlParameter[] paramArray = null)
        {
            // 连接对象
            SqlConnection sqlConnection = new SqlConnection(connString);
            // 命令对象
            SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection);
            if (paramArray != null)
            {
                sqlCommand.Parameters.AddRange(paramArray);
            }
            try
            {
                // 打开连接
                sqlConnection.Open();
                // 执行sql语句 并且返回结果
                return sqlCommand.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                // 出现异常了
                string errorMsg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 执行【ExecuteNonQuery(string sql)】方法发生异常:" + ex.Message;
                throw new Exception(errorMsg);
            }
            finally
            {
                // 无论如何都要关闭数据库
                sqlConnection.Close(); 
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于.NET与SQL Server的组合是一种常见的软件开发和数据库管理方案。.NET是微软公司开发的一种广泛使用的开发框架,它提供了一系列的工具和库,可用于创建各种类型的应用程序,包括Web应用程序、桌面应用程序、移动应用程序等。而SQL Server是微软公司开发的一种关系型数据库管理系统,它提供了安全、稳定、高性能的数据库引擎,可用于存储和管理大量的数据。 首先,基于.NET的开发可以快速构建功能丰富的应用程序。.NET框架提供了大量的类库和工具,包括Windows Forms、ASP.NET、WPF等,可以简化开发过程,提高开发效率。而且,.NET还支持多种编程语言,如C#、VB.NET等,开发人员可以选择自己熟悉的语言进行开发。 其次,基于SQL Server的数据库管理可以提供可靠性和性能。SQL Server具有良好的事务处理和数据完整性特性,可以确保数据的安全和一致性。同时,SQL Server还提供了强大的查询优化和索引技术,可以提高数据访问的效率,提供快速的响应时间。 此外,.NET与SQL Server的集成也非常方便。.NET框架提供了丰富的ADO.NET类库,可以与SQL Server进行无缝集成,开发人员可以方便地编写数据库操作代码,实现数据的增删改查。同时,SQL Server还提供了.NET提供程序(Provider)来提供对数据库的访问,如SQL Server提供程序,可以使.NET应用程序与SQL Server之间进行高效的通信。 综上所述,基于.NET与SQL Server的组合可以提供高效、可靠的软件开发与数据库管理解决方案,具有广泛的适用性和扩展性。无论是开发企业级应用程序,还是构建小型的网站或桌面应用程序,都可以选择.NET与SQL Server来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值