我有一个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”)。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()会抛出一个异常,显示“Unspecified Error”。
当我尝试使用类似的代码插入整数值时没有错误。当它作为输入参数传递给SP的数据表时会引起问题。
任何避免这种情况的解决方案?
答案 0 :(得分:0)
我相信你所缺少的是告诉参数它应该是什么TVP和它的类型(最后2行)。我的table valued parameter在C#中,但同样的概念也适用。
command = new System.Data.SqlClient.SqlCommand("TwitterAdd");
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Connection = connection;
// Assigning a table valued parameter looks much like any other parameter
System.Data.SqlClient.SqlParameter tvp = command.Parameters.AddWithValue("@tvp", dataTable);
// this is the only special sauce
tvp.SqlDbType = System.Data.SqlDbType.Structured;
tvp.TypeName = "dbo.MY_TABLE_VALUED_PARAMETER";
这在VB中应该相同,减去分号。
答案 1 :(得分:0)
我遇到了同样的问题。我收到的错误消息是: 由于符号不匹配或数据溢出以外的原因,无法转换“命令参数[0]”数据值。“
在上面引用的MSDN文章中,我看不到对OLE DB的任何引用 - TVP似乎只是SqlClient。
此外,在System.Data.OleDB.OleDbType
枚举中,Structured没有选项。
我将OLEDB连接更改为ADO.Net Connection,并且工作正常。