获取结果集或ADO记录集中的行数的简单方法

时间:2013-10-31 17:29:06

标签: c# sql .net-3.5

我的执行sql任务返回一个“完整结果集”,它存储在一个Object objResults中。我想要一个简单的方法来获取objResults中的行数。我该怎么做 ?我想使用c#代码来获取该数字。

我可以将整个objResults加载到DataTable中并使用myDataTable.Rows.Count;获取numberOfRows,但这种方法显然效率低下。

注意 - 我使用的是.NET 3.5和Visual Studio 2008.我知道有一个4.0 / visual studio方法。但它对我不起作用。

这是4.0的解决方案 -

该对象实际上是一个ADO记录集。它是一个COM对象,所以要从C#中使用它,你需要互操作程序集或动态。动态更容易。

在“脚本任务”中添加对Microsoft.CSharp的引用,然后访问记录集,如下所示:

public void Main()
{
  dynamic result = Dts.Variables["result"].Value;
  int rowCount = Convert.ToInt32(result.RecordCount);

  Dts.TaskResult = (int)ScriptResults.Success;
}

您还可以通过添加表达式为COUNT(*) over ()的colulmn来向SQL查询添加行计数列,例如:

select *, count(*) over () row_count
from whatever

感谢 - 大卫 David http://blogs.msdn.com/b/dbrowne/

1 个答案:

答案 0 :(得分:0)

添加对“Microsoft ActiveX数据对象”库的引用。然后,您将使用COM互操作类型定义在C#中使用ADO。

使用C#脚本:

public void Main()
{
    ADODB.Recordset result = (ADODB.Recordset) Dts.Variables["result"].Value;
    int rowCount = result.RecordCount;

    Dts.TaskResult = (int)ScriptResults.Success;
}

如何添加参考 -

编辑脚本并添加引用(菜单项目)这里的步骤 - http://support.microsoft.com/kb/308611/en-us然后,不要忘记保存。单击全部保存以保存添加引用!

ctrl + s只会保存你的代码。要保存全部,请使用ctrl + shift + s。大声笑 !如此不直观!