尝试在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
由于
答案 0 :(得分: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
答案 1 :(得分:3)
ExecuteNonQuery
返回查询的受影响行数。在COUNT函数的情况下,它总是返回-1。
对于您要实现的目标,您应该使用sqlComm.ExecuteScalar()
来返回结果集中第一行/列的值。