c# – 如何合并/组合两个SqlDataReader对象

我正在研究SQL服务器监控项目.在这里我想从机器上安装的所有SQL Server实例中获取数据.为此,我编写了一个CLR存储过程,其中数据来自两个不同的SqlDataReader对象,我想合并这两个datareder对象.是否可以合并两个SQLda...

我正在研究SQL服务器监控项目.在这里我想从机器上安装的所有SQL Server实例中获取数据.为此,我编写了一个CLR存储过程,其中数据来自两个不同的SqlDataReader对象,我想合并这两个datareder对象.

是否可以合并两个SQLdatareader对象?

以下是我遇到这个问题的情况:

SqlConnection conn = new SqlConnection("ConnectionSting of 1st SQLServerInstance")
string query = "select dbid,uid,cpu from [master].[sys].sysprocesses";

SqlCommand SelectCmmand = new SqlCommand(query, conn);            
SqlDataReader rd1;            
conn.Open();
rd1 = SelectCmmand.ExecuteReader();
conn.Close();

conn = new SqlConnection("ConnectionSting of 2nd SQLServerInstance")

SqlCommand SelectCmmand = new SqlCommand(query, conn);            
SqlDataReader rd2;            
conn.Open();
rd2 = SelectCmmand.ExecuteReader();
conn.Close();

SqlPipe sp;
sp = SqlContext.Pipe;
sp.Send(?????);

现在,sp.Send(??)方法希望SQLDataReader对象作为参数,我想从两个不同的连接字符串中发送上述数据.

那么,我应该如何合并/组合rd1和rd2?

解决方法:

您可以使用读取器加载两个DataTable,合并它们并调用DataTable.CreateDataReader().

例如(未测试):

DataTable dt1 = New DataTable();
dt1.Load(rd1);
DataTable dt2 = New DataTable();
dt2.Load(rd2);
dt1.Merge(dt2);
DataTableReader mainReader = dt1.CreateDataReader();
Common.DbDataReader reader = (Common.DbDataReader)mainReader;
sp.Send((SqlClient.SqlDataReader)reader);

> DataTable.Load(iDataReader)
> DataTable.Merge
> DataTable.CreateDataReader

编辑:我担心我的代码无效,因为你无法将DbDataReader强制转换为SqlDataReader.

一种方法是(再次,未经测试)使用SqlPipe.SendResultsRow逐行发送所有记录.

本文标题为:c# – 如何合并/组合两个SqlDataReader对象

基础教程推荐