自由屋推书网—热门的小说推荐平台!

你的位置: 首页 > mysql

C#如何从数据库SQLServer中同时读取多个结果集

2022-05-27 09:37:05

当需要从数据库中同时读取多个结果集时,比如执行如下的sql语句:

select * from tblClass;select * from tblStudent;

同时从两个表格中获取结果,会获取两个结果集,此时需要使用SqlDataReader对象的NextResult()方法跳转到下一个结果集。

一、主函数

运行环境是控制台应用程序,下面的方法是main方法。

main方法流程主要如下:

1、定义了连接数据库的字符串

2、定义了同时查询两个表的sql语句的sql命令

3、定义了一个列表,用以存储读取到的数据

4、定义了一个方法,将读取到的每一个单元格的数据添加到列表中

5、定义了一个方法,当读取到每一行数据结尾时添加一个换行符到列表中

6、执行读取数据的方法

7、遍历列表,将列表的数据显示到控制台上

/// <summary>
/// 当同时查询多个表格,返回多个表格的数据时。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//连接数据库语句
string conStr = "server=.;database=Itcast2014;integrated security=true;";
//当数据库查询语句有两条时,会返回两个结果集
string cmdTxt = "select * from tblClass;select * from tblStudent;";
//通过将数据增加到列表中的的方式读取数据
List<object> lstResult = new List<object>();
//将每一个单元格的数据后面加个制表符后添加到列表中
Action<object> ReadCell = cell => { lstResult.Add(cell+"\t"); };
//在每一行的结尾,将一个换行符增加到列表中
Action RowEnd = () => { lstResult.Add("\r\n"); };
//读取结果
ReadAllResult(conStr,cmdTxt,ReadCell,RowEnd);
//遍历结果集的列表
foreach (var item in lstResult)
{
Console.Write(item);
}
Console.ReadKey();
}

二、读取数据

这是读取数据的主要方法,和主函数在同一个命名空间下。

ReadAllResult方法流程如下:

1、通过传入的连接数据库字符串连接数据库

2、通过传入的sql命令执行ExecuteReader方法

3、读取当前结果集的每一行数据

4、通过NextResult方法转到下一个结果集

/// <summary>
/// 读取多个结果集的Sql语句的方法
/// </summary>
/// <param name="conStr">连接字符串</param>
/// <param name="cmdTxt">sql命令</param>
/// <param name="ReadResult">传入一个方法,指定如何处理每一行每一个单元格的数据</param>
/// <param name="RowEnd">传入一个方法,指定到每一行结尾时,如何处理</param>
private static void ReadAllResult(string conStr,string cmdTxt,Action<object> ReadResult,Action RowEnd)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
{
con.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
//循环直到读取的结果集中没有行时
while (reader.HasRows)
{
while (reader.Read())
{
//对读取的当前行中遍历所有的列
for (int i = 0; i < reader.FieldCount; i++)
{
//传入一个如何处理每一行每一个单元格数据的方法
ReadResult(reader[i]);
}
//传入一个如何处理每一行结尾的方法
RowEnd();
}
//********要在这里读取下一个结果集***********
reader.NextResult();
}
}
con.Close();
}
}
}

三、总结

这里主要是数据库的常用方法,以及使用了委托,来确定如何处理每一个数据,也可以直接Console.Write()。

编辑推荐

热门小说