FTP(File Transfer Protocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。

而在SSIS中,有一个FTP的组件,可以对它进行信息的配置,包括用户名、密码、端口号等等,如下图:

一般情况下,这些信息都是存在数据库中,然后通过SSIS菜单下的包配置来进行赋值,然而弊端就在于包配置信息无法直接读取加密信息,选择直接给FTP连接管理直接赋值的话,密码是无法保存的(PS:这是SSIS的一种自带保护机制),脚本是个好东西,在这里可以用来解决这个问题。

在上一篇有写到DES加密解密的方法,这里就不做赘述了,其实最主要的是要获得FTP的这个对象,首先我想到的是用DTS对象的Connections["FTPName"]来获取整个连接信息,结果经过测试得到的只是:Server name 和 Server port 值,所以用Dts对象的Connections获取这条路走不通,只能想另外的办法。在SQL Server 2012 Integration Services 高级教程(第二版) 中提到FtpClientConnected这个对象,测试可以通过

 ConnectionManager conn = default(ConnectionManager);
FtpClientConnection ftp = default(FtpClientConnection);
//获取FTP连接,名字保持一致,中文会导致乱码
conn = Dts.Connections["FTP Connection Manager"];
ftp = new FtpClientConnection(conn.AcquireConnection(null));
//ZCC为数据库中FTP连接信息表中的主键,获取密文密码
string CryPwd = GetConDb("ZCC")[];
//对密文密码就行解密,得到明文
string Oldpwd = DecryptDES(CryPwd, UUkey);
//将解密后的密码赋值给FTP对应的参数
ftp.ServerName = GetConDb("ZCC")[];
ftp.ServerPort = int.Parse(GetConDb("ZCC")[]);
ftp.ServerUserName = GetConDb("ZCC")[];
ftp.ServerPassword = Oldpwd;

代码是其次,最主要的是思想,在这里我做得处理是,从数据库中取出来对应的 Server Name、Server Port、ServerUserName、ServerPassword,然后用拼接字符串的方式连一起,然后用Split分割成一个数组,当然也可以直接将这四个数据放到数组中,GetConDb就是一个返回类型为数组的方法,返回的数组就是这四个数值,所以当得到ftp这个对象的时候,就可以根据数组的索引来给ftp对象中对应的配置参数赋值了。

  public static string[] GetConDb(string MainConn)
{
string Username = "";
string UserPassword = "";
string Ip = "";
string Port = "";
string constr = "Data Source=.;Initial Catalog=ICBC;Integrated Security=SSPI;";
string sqlstr = @"select * from ICBC.dbo.[FTPConfigurations] where FTPMainConn='" + MainConn+ "'";
SqlConnection conn = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand(sqlstr, conn);
conn.Open();
try
{
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
string ccc = dt.Rows[]["FTPConnPath"].ToString();
for (int i = ; i < dt.Rows.Count; i++)
{
string Sername = dt.Rows[i]["FTPConnPath"].ToString();
if (Sername.Contains("ServerUserName"))
{
Username = dt.Rows[i]["ConfiguredValue"].ToString();
}
if (Sername.Contains("ServerPassword"))
{
UserPassword = dt.Rows[i]["FTPConnPwd"].ToString();
}
if (Sername.Contains("[FTPConnectionString]"))
{
string ServerPort = dt.Rows[i]["FTPConnValue"].ToString();
Ip = ServerPort.Substring(, ServerPort.Length - );
Port = ServerPort.Substring(ServerPort.Length - , );
} } string all = Username + ";" + UserPassword + ";" + Ip + ";" + Port;
string[] strDb = all.Split(';');
return strDb;
} catch (Exception ex)
{
throw new Exception(ex.Message);
} finally
{
conn.Close();
} }

权当做学习笔记

-----市人皆大笑,举手揶揄之

关于SSIS中解密FTP字符串的方法的更多相关文章

  1. 关于SSIS中解密数据库字符串的方法

    此文章适合于SSIS新手,我是个小白,在繁复查阅资料后仍无果到最后解决问题,走了很多弯路,现在讲其中一些关于SSIS的理解写出来,供大家参考,在正文之前,我就我自己的理解,阐明一些概念. 什么是SSI ...

  2. [翻译]python3中新的字符串格式化方法-----f-string

    从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...

  3. (数据科学学习手札131)pandas中的常用字符串处理方法总结

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...

  4. javascript中数组和字符串的方法比较

    × 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...

  5. Sql Server中三种字符串合并方法的性能比较

    文章来自:博客园-DotNet菜园 最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.示例:有表內容﹕名称  內容1     abc1      ...

  6. ES6中的模板字符串使用方法

    传统的 JavaScript 语言,输出模板通常是这样写的. $('#result').append( 'There are <b>' + basket.count + '</b&g ...

  7. mysql中replace替换字符串更改方法

    MySQL中update替换部分字符串replace的简单用法 近日,遇到了需要将部分字符串替换为另外的字符,平时用的最多的是直接update整个字段值,在这种情况下效率比较低,而且容易出错.其实my ...

  8. 在SQL SERVER中批量替换字符串的方法

    UPDATE MainData SET Content = )) , 'XM00000137' , 'XM00000078') WHERE [Key] IN (SELECT md_key FROM i ...

  9. thinkphp模板中截取中文字符串的方法分享

    前段用thinkphp写了一个系统,感觉thinkphp学起来比较容易,开发起来了比较顺手,其中一个关键的因素就是它的模版引擎相当强大,使用方法跟smarty类似,在模版中还可以用php代码,有模版包 ...

随机推荐

  1. MongoDB学习记录

    一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...

  2. ansible-copy

    ansible是执行yaml文件控制远端服务器.执行命令为 ansible-playbook my.yamlplaybook是ansible中的脚本,采用yaml语言.VM1安装ansible,ip地 ...

  3. swfit-计时器

    import UIKit class FourVC: UIViewController { var label:UILabel = UILabel() var index : Int = var ti ...

  4. Hardware Solutions CACHE COHERENCE AND THE MESI PROTOCOL

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Hardware-based soluti ...

  5. java中字节流与字符流的区别

    字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字 ...

  6. MySql常用日期函数(转载)

    /*date_add(date,interval expr type)和date_sub(date,interval expr type)执行日期运算. date 是一个 datetime 或date ...

  7. OC中协议, 类目, 时间, 延展, 属性

    只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...

  8. typealias和泛型接口

    typealias 是用来为已经存在的类型重新定义名字的,通过命名,可以使代码变得更加清晰.使用的语法也很简单,使用 typealias 关键字像使用普通的赋值语句一样,可以将某个已经存在的类型赋值为 ...

  9. C# LINQ

    Sorting: OrderBy ThenBy OrderByDescending ThenByDescending Reverse public IEnumerable<Customer> ...

  10. SpringMVC常用配置-Controller返回格式化数据如JSON、XML的配置方式和机制