文章出處

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();
            }

        }

 權當做學習筆記

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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()