0

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

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

注意 - 我正在使用 .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;
}

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

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

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

4

1 回答 1

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。哈哈 !太不直观了!

于 2013-11-02T15:51:19.450 回答