我的执行 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