文章出處
文章列表
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")[0]; //對密文密碼就行解密,得到明文 string Oldpwd = DecryptDES(CryPwd, UUkey); //將解密后的密碼賦值給FTP對應的參數 ftp.ServerName = GetConDb("ZCC")[1]; ftp.ServerPort = int.Parse(GetConDb("ZCC")[2]); ftp.ServerUserName = GetConDb("ZCC")[3]; 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[1]["FTPConnPath"].ToString(); for (int i = 0; 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(0, ServerPort.Length - 3); Port = ServerPort.Substring(ServerPort.Length - 2, 2); } } string all = Username + ";" + UserPassword + ";" + Ip + ";" + Port; string[] strDb = all.Split(';'); return strDb; } catch (Exception ex) { throw new Exception(ex.Message); } finally { conn.Close(); } }
權當做學習筆記
-----市人皆大笑,舉手揶揄之
文章列表
全站熱搜