SSIS C#脚本任务错误

时间:2018-06-20 01:18:32

标签: c# ssis

全部,我正在使用SQL 2014和Visual Studio 2013。

我有一个无法执行的脚本任务。正在读取,但无法正常工作。此任务创建表并将数据插入表中。我需要使用脚本任务来执行此操作,因为有100多个TSV文件,并且字段可能每个月更改一次,并且很难为每个表维护单个节点。

如果您查看代码段,则消息框(1)会触发,但是脚本之后便会出错-我相信(2):

enter image description here

错误消息是:

enter image description here

我认为此错误是指任务中无法访问或拼写错误的变量等。我已经检查了这些广告恶心-认为不是。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码中的问题是,您正在脚本代码中创建ADO.NET(C#标准)连接,但是此连接的 base -DBconn连接管理器-是一个OLEDB连接管理器。这两个连接不能相互转换。

建议:

  • 如果可能,将DBconn连接管理器创建为ADO.NET。然后您的代码应该工作了。
  • 如果必须保留DBconn作为OLEDB连接管理器,则必须基于SqlConnection在脚本任务中创建DBconn连接。我已经完成了从OLEDB conn字符串构建ADO.NET的连接字符串并使用该连接字符串创建新的SqlConnection的操作。

下面是用于生成连接字符串的函数的代码示例。

using RuntimeWrapper = Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Data.OleDb;
using System.Data.SqlClient;
using Microsoft.SqlServer.Dts.Runtime;

static string Get_ManagedConnString(string Src_Name, ConnectionManager CM)
    {
    if (CM.CreationName != "OLEDB")
        throw new Exception(string.Format("Cannot get Conn String from non-OLEDB Conn manager {0}", CM.Name));

    RuntimeWrapper.IDTSConnectionManagerDatabaseParameters100 cmParams_Src = CM.InnerObject as RuntimeWrapper.IDTSConnectionManagerDatabaseParameters100;
    OleDbConnection oledbConn_Src = cmParams_Src.GetConnectionForSchema() as OleDbConnection;
    OleDbConnectionStringBuilder oledbCSBuilder_Src = new OleDbConnectionStringBuilder(oledbConn_Src.ConnectionString);
    SqlConnectionStringBuilder sqlCSBuilder_Src = new SqlConnectionStringBuilder();
    sqlCSBuilder_Src.DataSource = oledbCSBuilder_Src["Data Source"].ToString();
    sqlCSBuilder_Src.InitialCatalog = oledbCSBuilder_Src["Initial Catalog"].ToString();
    if (oledbCSBuilder_Src["integrated security"].ToString() == "SSPI")
        {
        sqlCSBuilder_Src.IntegratedSecurity = true;
        }
    else
        {
        sqlCSBuilder_Src.UserID = oledbCSBuilder_Src["User ID"].ToString();
        sqlCSBuilder_Src.Password = oledbCSBuilder_Src["Password"].ToString();
        }

    return sqlCSBuilder_Src.ConnectionString;
    }
相关问题