编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

C#知识|封装典型的SQLServer数据库查询方法。

wxchong 2024-07-16 10:07:06 开源技术 41 ℃ 0 评论

#头条提现门槛下放至1元啦#

哈喽,你好啊,我是雷工!

前边学习封装了增删改的方法封装:

C#知识|通用数据访问类SQLHelper的编写》;

本节继续学习将两种典型的查询方法封装成类。

下边为学习笔记。

01 封装单一返回结果的封装

在查看封装后的代码之前,可以先看下封装前代码的写法:

C#知识|通过ADO.NET实现应用程序对数据库的查询操作。

对比查看,更有助于封装的学习。

1.1、封装代码

封装单一返回结果的方法和增删改的写法类似;

在SQLHelper类中创建封装方法的代码:

/// <summary>

/// 执行单一返回结果的查询方法

/// </summary>

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

/// <returns></returns>

/// <exception cref="Exception"></exception>

public static object GetSingleResult(string sql)

{

SqlConnection conn = new SqlConnection(connString);

SqlCommand cmd = new SqlCommand(sql, conn);

try

{

conn.Open();

return cmd.ExecuteScalar();

}

catch (Exception ex)

{

//此处可以捕获ex对象相关信息,然后保存到日志文件中

throw new Exception("执行GetSingResult发生异常:" + ex.Message);

}

finally //此处为无论是否发生异常都要执行的代码

{

conn.Close();

}

}

1.2 调用类方法

在Program.cs中调用封装的方法

代码如下:

//引入需要的命名空间

using System.Data.SqlClient;

using System.Data;

namespace LeiGongNotes2

{

internal class Program

{

static void Main(string[] args)

{

Console.WriteLine("欢迎大家关注【雷工笔记】!");

Console.WriteLine("--------------------------");

ExecuteSingleResultByHelper();

Console.ReadLine();

}

static void ExecuteSingleResultByHelper()

{

//定义SQL语句

string sql = "select Count(*)as 账号总数 from Account";

object result = SQLHelper.GetSingleResult(sql);

Console.WriteLine(result);

}

}

}

执行结果:

说明封装的类方法没有问题。

02 封装结果集的查询

封装查询返回结果是结果集的查询方法,

2.1、封装代码

此处需要注意的是需要在try中添加枚举CommandBehavior.CloseConnection,实现关闭关联的Datareader对象时,关联的Connection对象也会关闭;

然后去掉了后边的finally中的手动关闭;

同样在SQLHelper类中创建封装方法的代码:

public static SqlDataReader GetReader(string sql)

{

SqlConnection conn = new SqlConnection(connString);

SqlCommand cmd = new SqlCommand(sql, conn);

try

{

conn.Open();

//此处添加枚举CommandBehavior.CloseConnection

return cmd.ExecuteReader(CommandBehavior.CloseConnection);

}

catch (Exception ex)

{

//此处可以捕获ex对象相关信息,然后保存到日志文件中

throw new Exception("执行GetSingResult发生异常:" + ex.Message);

}

//finally //由于上方添加枚举,去掉手动关闭

//{

// conn.Close();

//}

}

2.2 调用类方法

在Program.cs中调用封装的方法

代码如下:

//引入需要的命名空间

using System.Data.SqlClient;

using System.Data;

namespace LeiGongNotes2

{

internal class Program

{

static void Main(string[] args)

{

Console.WriteLine("欢迎大家关注【雷工笔记】!");

Console.WriteLine("--------------------------");

ExecuteReader();

Console.ReadLine();

}

static void ExecuteReaderByHelper()

{

//定义SQL语句

string sql = "select AccountName,AccountContent,originality from Account where AccountId<10008";

SqlDataReader reader = SQLHelper.GetReader(sql);

//判断是否查询结果,来决定是否继续读取数据

while (reader.Read())

{

Console.WriteLine(#34;{reader["AccountName"]}\t{reader["AccountContent"]}\t{reader["originality"]}");

}

reader.Close();//关闭读取器对象(由于在类方法中添加了枚举,此时关闭reader时,会首先把它使用的连接对象关闭)

}

}

}

执行结果:

说明封装运行没有问题,

03 后记

只是测试程序中可能不能明显的看出来这种封装的好处,

但在实际项目中,代码量多了以后就可以发现这种封装可以优化掉大量的重复代码,

当前方式虽然减少了大量重复代码,但是SQL语句和功能等分层还不明确,接下来会继续学习代码的分层,

让代码的分工更加明确,让代码更优雅,更清晰,更简洁。

感兴趣的同学可以点赞+关注+在看,我们一起学习进步。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表