SQLHelper为什么要这样写?

本文介绍SQLHelper组件,基于.Net Framework,简化数据库操作。通过高内聚低耦合设计,减少SQLConnection、SqlCommand、SQLDataReader重复代码。重构后,仅需传入参数和连接字符串即可执行数据库操作。

SQLHelper是什么?

是基于.Net Framework 的数据库操作组件。简单理解为是数据库的小助手类。

主要是应用高内聚低耦合的方法,简化重复写的SQLConnection,SqlCommand,SQLDataReader等。

它主要封装后只需要给方法传入参数和连接字符串,就可以访问数据库了。

一开始是什么样子?

  • SqlConnection——表示一个到SQL Server数据库的打开的连接
  • SqlCommand——表示允许你制定在数据库上执行的操作的liex烈性,比如select insert update delect
  • SqlDataReader——表示数据库读取行的只进流方式

重构之后什么样子?

 public class SQLHelper
    {

        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
       
        public SQLHelper()//SQLHelper的构造方法
        {
           
            string connStr = @"server = LMX-PC\SQLEXPRESS;database= newssystem; User ID= sa;Password = 123456";//数据库
            conn = new SqlConnection(connStr);//与数据建立连接
            
        }

        public SqlConnection GET()
        {
            //如果 数据库状态= 关闭
            if (conn.State ==ConnectionState.Closed )
            {
                conn.Open();//打开数据库
            }
            return conn;//返回装填
        }

        /// <summary>
        /// 该方法对传入的参数进行增删改SQL语句执行
        /// </summary>

        public int ExecuteNonQuery(string sql)
        {
            int res;

            cmd = new SqlCommand(sql, GET());
            res = cmd.ExecuteNonQuery();

            //如果 数据库状态= 连接
            if (conn.State==ConnectionState.Open )
            {
                //那么把它关闭
                conn.Close();
            }  

            return res;
        }

        /// <summary>
        /// 执行SQL 查询操作
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public DataTable ExecuteQuery(string sql)
        {
            DataTable dt = new DataTable();//需要返回datetable类型,所以实例化

            cmd = new SqlCommand(sql,GET());
            sdr = cmd.ExecuteReader();
            dt.Load(sdr);
            /如果 数据库状态= 连接
            if (conn.State==ConnectionState.Open )
            {
                //那么把它关闭
                conn.Close();
            }  
              
            return dt;
        }

 对上面代码的详解:

 这里对SQLHelper进行了重构,对它应该有了进一步认识。SQLHelper和数据库有着密切的关联在string ConnStr= @"server = LMX-PC\SQLEXPRESS;database= newssystem; User ID= sa;Password = 123456"; 这句找到数据库的语句。如果我们对数据的ID和密码进行了修改还需要打开源代码ji进行修改,这样增加了耦合。所以为了减少这样的麻烦。

就用到了配置文件Web.config:

<configuration>
  
  <system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5.2"/>
  </system.web>

  <!--
  这是刚刚在SQLHelper里面的找到数据库的位置的语句
-->
  <appSettings/>
    <connectionStrings>
      <add name ="connStr" connectionString="server = LMX-PC\SQLEXPRESS;database= newssystem; User ID= sa;Password = 123456"/>
    </connectionStrings>
  
  
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
 
</configuration>

那么对应SQLHelper的部分修改为:

 string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//提供应用程序对数据库的访问

 

小编今天先理解到这里,这里的学问感觉还有很多,还需要慢慢理解。

欢迎大家交流给予指正!

WCF(Windows Communication Foundation)是一种面向服务的框架,用于构建分布式系统。SqlHelper是一个用于访问和操作SQL Server数据库的辅助类,它封装了ADO.NET的一些操作,以简化对数据库的访问。 下面是一个简单的WCF SqlHelper类的示例代码: ```csharp using System; using System.Data; using System.Data.SqlClient; namespace WCFServiceLibrary { public class SqlHelper { private string connectionString; public SqlHelper(string connectionString) { this.connectionString = connectionString; } public DataTable ExecuteDataTable(string commandText, CommandType commandType, params SqlParameter[] parameters) { DataTable dataTable = new DataTable(); using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(commandText, connection)) { command.CommandType = commandType; if (parameters != null) { command.Parameters.AddRange(parameters); } using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command)) { dataAdapter.Fill(dataTable); } } } return dataTable; } public int ExecuteNonQuery(string commandText, CommandType commandType, params SqlParameter[] parameters) { int result = 0; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(commandText, connection)) { command.CommandType = commandType; if (parameters != null) { command.Parameters.AddRange(parameters); } connection.Open(); result = command.ExecuteNonQuery(); } } return result; } public object ExecuteScalar(string commandText, CommandType commandType, params SqlParameter[] parameters) { object result = null; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(commandText, connection)) { command.CommandType = commandType; if (parameters != null) { command.Parameters.AddRange(parameters); } connection.Open(); result = command.ExecuteScalar(); } } return result; } } } ``` 这个SqlHelper类包括了三个方法: - ExecuteDataTable:执行SQL命令并返回一个DataTable对象。 - ExecuteNonQuery:执行SQL命令并返回受影响的行数。 - ExecuteScalar:执行SQL命令并返回结果集中的第一行第一列的值。 在实例化SqlHelper对象时,需要传递一个连接字符串作为参数。例如: ```csharp SqlHelper sqlHelper = new SqlHelper("Data Source=localhost;Initial Catalog=MyDatabase;Integrated Security=True;"); ``` 然后就可以使用SqlHelper对象来访问和操作SQL Server数据库了。例如: ```csharp // 查询数据 DataTable dataTable = sqlHelper.ExecuteDataTable("SELECT * FROM MyTable", CommandType.Text); // 插入数据 SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@Name", "John"), new SqlParameter("@Age", 30) }; int result = sqlHelper.ExecuteNonQuery("INSERT INTO MyTable (Name, Age) VALUES (@Name, @Age)", CommandType.Text, parameters); // 更新数据 SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@Name", "John"), new SqlParameter("@Age", 31) }; int result = sqlHelper.ExecuteNonQuery("UPDATE MyTable SET Age = @Age WHERE Name = @Name", CommandType.Text, parameters); // 删除数据 SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@Name", "John") }; int result = sqlHelper.ExecuteNonQuery("DELETE FROM MyTable WHERE Name = @Name", CommandType.Text, parameters); ``` 注意:在实际应用中,应该对SqlHelper类进行更多的封装和优化,以提高代码的可维护性和性能。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢美玲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值