[SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑

2022-10-15,,,,

入坑.!!!!!

SSIS 中dts包 设置的  ADO.Net连接, 在传入脚本的时候, 我要使用 数据库连接,进行数据的删除操作.

于是我使用了 了如下的 代码

使用的是windows 身份验证, 发布到正式环境上的时候, 不能使用windows验证, 而要使用 账号密码登录, 结果我改完账号密码登陆以后,

里面调用的地方,   connection.open 的时候就报错了, 说登录失败. 我看了看了一下连接字符串, 没有密码部分.

这个 是 微软设置的dts 包或者项目 的安全性, 连接字符串的密码部分 不是对外公布的明文.  所以这样子去拿连接字符串,是拿不到的.

现在提供以下解决方案

先设两个变量, 然后 直接拿到 Connection

    IDTSConnectionManager100 connMgr;
    SqlConnection sqlConn;
 public override void AcquireConnections(object Transaction)
    {        //获取 以及设置 Connection 连接
        connMgr = this.Connections.DestConnStr;
        sqlConn = (SqlConnection)connMgr.AcquireConnection(Transaction);
    }
    public override void ReleaseConnections()
    {
        connMgr.ReleaseConnection(sqlConn);
    }
 public int ExecuteNonQuery(string sqlStr, CommandType cType, SqlParameter[] parms)
    {
        ;

        try
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = sqlConn; //直接使用 数据连接
            cmd.CommandType = cType;
            cmd.CommandText = sqlStr;
            if (parms != null)
            {
                cmd.Parameters.AddRange(parms);
            }
            result = cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            result = ;
            throw ex;
        }

        return result;
    }

最后别忘了 Despose

public override void PostExecute()
    {
        base.PostExecute();
        /*
         * Add your code here
         */
        if (sqlConn != null)
            sqlConn.Dispose();
    }

 

补充一下, 在dts 包 脚本组件 输入输出项的时候, 新增的输出列,插入到目标列, 如果脚本里面不对 输出列进行赋值, 输出列是会有默认值的

datetime 的默认值 为  0000-00-00

字符串 默认 为 空字符串( 而不是null)

然后要使 数据库的目标插入的时候 是 null,要对 输入输入列进行 赋值,

例如:

Row.synctime_IsNull = true;

补充2: 在执行存储过程, 使用 datetime  类型的参数, 传入到oledb , 因为设置的类型 为 datetime , 所以有默认值,

这或许是一个bug, 这个值不会发生改变, 就算外面发生了改变,  传入到存储过程里面, 也还是原来的初始值.

解决这个问题的方案是:  将字段类型甚至为 string,而不是datetime , 然后  变量设置为 字符串表达式

比如 更新的时候去系统运行的当前时间 , 使用系统时间, 字符串函数去转换一下

SSSI里面的坑真多啊

[SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑的相关教程结束。

《[SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑.doc》

下载本文的Word格式文档,以方便收藏与打印。