2011-08-31 42 views
0

执行我的SSIS包时出现错误,指出Incorrect syntax near ')'.。该错误是由DFT中的脚本转换组件引发的。从我可以告诉它正在抛出的sqlReader = sqlCmd.ExecuteReader()行。我已经看了好几天了,似乎无法弄清楚是什么导致了错误。我已经在下面包含了脚本组件的内容。有人有主意吗?使用ADO.NET的SSIS脚本转换错误

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 
Imports System.Data.SqlClient 

Public Class ScriptMain 
Inherits UserComponent 

Dim connMgr As IDTSConnectionManager90 
Dim sqlConn As SqlConnection 
Dim sqlCmd As SqlCommand 
Dim sqlParam As SqlParameter 

Public Overrides Sub AcquireConnections(ByVal Transaction As Object) 

    connMgr = Me.Connections.connTalisma 
    sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection) 

End Sub 

Public Overrides Sub PreExecute() 

    sqlCmd = New SqlCommand("SELECT Name FROM dbo.Category WHERE CatID = @catid)", sqlConn) 
    sqlParam = New SqlParameter("@catid", SqlDbType.Int) 
    sqlCmd.Parameters.Add(sqlParam) 

End Sub 

Public Overrides Sub ReleaseConnections() 

    connMgr.ReleaseConnection(sqlConn) 

End Sub 

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 
    Dim sqlReader As SqlDataReader 
    Dim delimitedField As String = Row.FinalCallReason 
    Dim delimiter As String = ";" 
    Dim tempField As String 

    If Not (String.IsNullOrEmpty(delimitedField)) Then 
     Dim DelimitedListArray() As String = delimitedField.Split(New String() {delimiter}, StringSplitOptions.RemoveEmptyEntries) 
     For Each item As String In DelimitedListArray 
      sqlCmd.Parameters("@catid").Value = CInt(item) 
      MsgBox(item) 
      Try 
       sqlReader = sqlCmd.ExecuteReader() 
       tempField = tempField + ";" + sqlReader.GetString(0) 
      Catch e As Exception 
       MsgBox("Error: " + e.Message) 
      End Try 
     Next 
    End If 
    Row.FinalCallReason = tempField 
End Sub 

End Class 

回答

1

在代码的以下部分中,更改@CatID)SqlCommand对象初始化语句@CatID

删除括号。这不是必需的。括号导致查询失败,并因此出现错误消息Incorrect syntax near ')'

Public Overrides Sub PreExecute() 

    sqlCmd = New SqlCommand("SELECT Name FROM dbo.Category WHERE CatID = @catid)", sqlConn) 
    sqlParam = New SqlParameter("@catid", SqlDbType.Int) 
    sqlCmd.Parameters.Add(sqlParam) 

End Sub 
+0

我知道它必须是我忽略的一些愚蠢的东西。只需要另一双眼睛。谢谢! – bokoxev