在ssis脚本任务中执行sql无法正常工作

时间:2013-08-08 14:34:10

标签: vb.net visual-studio-2010 sql-server-2008 ado.net ssis

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

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

Public Sub Main()

    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

由于

2 个答案:

答案 0 :(得分:4)

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

要阅读查询结果,请使用ExecuteScalar

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

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

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

答案 1 :(得分:3)

ExecuteNonQuery返回查询的受影响行数。在COUNT函数的情况下,它总是返回-1。

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