1

尝试在 vb.net 中执行 sql 语句(脚本任务 ssis)。为此创建了连接,请求打开连接并执行并关闭(如下面的代码所示)。变量的值(保存 sql 结果set) 必须返回正确的计数,而不是一直返回 -1 ...知道你这样做了吗?似乎是查询没有执行?

如何在 ssis 脚本任务中使用下面的 vb 代码(请查看)获得正确的计数值?

公共子主()

    Dim fireAgain As Boolean = True
    Dim rowsAffected As Integer

    Dim sqlConn As System.Data.SqlClient.SqlConnection
    Dim sqlComm As System.Data.SqlClient.SqlCommand


    Dim cm As ConnectionManager = Dts.Connections("cnn") ''Retrive the reference to the managed Connections

    '' Request an open connection
    sqlConn = cm.AcquireConnection(Dts.Transaction)
    Dts.Events.FireInformation(0, "", "Connection is: " + sqlConn.State.ToString(), "", 0, fireAgain)

    ''Do your work

    sqlComm = New System.Data.SqlClient.SqlCommand("SELECT COUNT(*) AS CNT  FROM [Table_1]", sqlConn)
    rowsAffected = sqlComm.ExecuteNonQuery()

    MsgBox(rowsAffected.ToString())  '''' the value of variable is -1 ???

    ''Inform SSIS you're done your work
    cm.ReleaseConnection(sqlConn)

    Dts.Events.FireInformation(0, "", rowsAffected.ToString() + " rows updated.", "", 0, fireAgain)



End Sub

谢谢

4

2 回答 2

4

当您使用 时ExecuteNonQuery,您是说您不需要从查询中返回任何结果。

要从查询中读取结果,请使用ExecuteScalar

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

如果您的查询返回多个单元格,请使用ExecuteReader和一个SQLDataReader对象:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

于 2013-08-08T14:39:47.943 回答
3

ExecuteNonQuery返回查询受影响的行数。对于 COUNT 函数,它总是返回 -1。

对于您要实现的目标,您应该使用sqlComm.ExecuteScalar()which 从结果集中返回第一行/列的值。

于 2013-08-08T14:51:56.597 回答