2016-09-07 83 views
0

我試圖循環訪問一個文件夾。每個文件的後綴都可以在SQL表的列中找到。這個後綴是我的LINQ語句的WHERE,並且是腳本任務中的一個變量(顯示在註釋中)。在謂詞爲真的情況下,我希望它從SQL表中同一行的另一列返回值,並將其他列的值分配給腳本任務中的另一個變量。現在我只是在做一個MessageBox.Show測試。在SSIS腳本任務中使用LINQ將值賦給變量

我在我的SSIS包中建立了一個OLEDB連接管理器,我不知道如何在任務內部運行LINQ查詢,我想我在如何設置連接時缺少一些東西。任何指針都會被感激地收到。這裏有多遠,我有:

public void Main() 
{ 
    string sourcePath = Dts.Variables["User::sourcePath"].Value.ToString(); 
    string archivePath = Dts.Variables["User::archivePath"].Value.ToString(); 
    string destinationPath = Dts.Variables["User::archivePath"].Value.ToString(); 

    SqlConnection conn = new SqlConnection(); 
    conn = (SqlConnection)(Dts.Connections["Server.Database"].AcquireConnection(Dts.Transaction) as SqlConnection); 

    DirectoryInfo directoryInfo = new DirectoryInfo(sourcePath); 
    FileInfo[] files = directoryInfo.GetFiles(); 

    foreach (FileInfo fileInfo in files) 
    { 
     string fileName = fileInfo.ToString(); 
     fileName = fileName.Split('_')[0]; // File Suffix 
     string destinationPrefix = ""; 
     // LINQ HERE USING fileName variable: 
     //destinationPrefix = FROM t in Table where t.Column == fileName select destinationPrefixColumn 
     MessageBox.Show(destinationPrefix);    
    } 
} 

回答

0

伊姆蘭,

你需要給我們的表對象的更多信息。沒有代碼可以將數據從數據庫中獲取到Table變量中。

var query = "Select * from SomeTable Where SomeCondition Order by Somefields"; 
var Table = conn.ExecuteQuery(query); 

這將得到一個表,您可以掃描fileinfo循環內。既然你沒有告訴我們什麼字段需要查看擴展名,或者你正在處理源文件夾和目標文件夾。我可以不再提供任何代碼。另外,看看在FileInfo對象有些事情可能是有用的...

fileInfo.FileName //Name of file 
fileInfo.FullName // full path and name of file 
fileInfo.Extension // just the extension 
fileInfo.MoveTo() // will move file to new location 
fileInfo.CopyTo() // will copy file to new location 

後回來,澄清你的問題得到更多的幫助。