【发布时间】:2013-01-16 08:37:14
【问题描述】:
我有一个 SSIS 包,它有一个 FOREACH 循环容器,在循环内我有一个脚本任务。脚本任务中的代码如下所示
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Data.SqlClient
Imports System.Data.OleDb
Imports System.Configuration
<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Public Sub Main()
Try
Dim oleConn As New OleDbConnection()
Dim strConn As String = Dts.Variables("ConfiguredValue").Value.ToString()
oleConn.ConnectionString = strConn
Dim oleDA As New OleDbDataAdapter()
Dim dt As New DataTable()
oleDA.Fill(dt, Dts.Variables("Source_Data").Value)
oleConn.Open()
Dim oleComm As New OleDbCommand("Insert_Into_Destination")
oleComm.CommandType = CommandType.StoredProcedure
oleComm.Connection = oleConn
oleComm.Parameters.AddWithValue("@tvp", dt)
oleDA.InsertCommand = oleComm
oleComm.ExecuteNonQuery()
oleConn.Close()
Catch ex As Exception
Throw ex
End Try
End Sub
End Class
变量 Dts.Variables("ConfiguredValue").Value 的值在 For Each 容器的每次迭代中都会发生变化。它看起来像 -
"Data Source=server_name;Initial Catalog=db_name;User ID=user_id;Password = Password;Provider=SQLOLEDB.1; Persist Security Info=True;Integrated Security=SSPI;Auto Translate=False;"
问题是 - 执行包时,在 ExecuteNonQuery() 处抛出异常,显示“未指定错误”。
当我尝试类似的代码插入一个整数值时没有错误。当它是我作为输入参数传递给 SP 的数据表时会导致问题。
有什么办法可以避免这种情况?
【问题讨论】:
-
您不能将
DataTable传递给存储过程。您需要使用表值参数(TVP) 或xml。查看此MSDN 链接http://msdn.microsoft.com/en-us/library/bb675163.aspx