我的执行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
答案 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。大声笑 !如此不直观!