Sto provando a creare un pacchetto SSIS che verrà utilizzato in un processo di archiviazione file system standardizzato. Fondamentalmente, sarò in grado di aggiungere informazioni a una tabella di configurazione e quindi utilizzare questa tabella per archiviare determinati file nelle cartelle specificate. Il mio problema è che molti file hanno nomi dinamici quindi ho bisogno di ottenere un elenco di tutti i file e quindi interrogare per decidere quali file dovrei toccare.Attività script SSIS Ottieni nomi file e archivia su una variabile oggetto SSIS
Non essendo un programmatore C#/VB mi sta causando alcuni problemi quando si cerca di script di una parte del pacchetto delle palio tutti i file in una directory di rete specificata e poi si nutrono questi nomi di file di nuovo in una variabile oggetto SSIS.
Ho una variabile stringa 'User :: SourceNetworkFolderName' che conterrà la posizione UNC della cartella di cui voglio leggere tutti i file. Voglio quindi passare tutti questi nomi di file (con estensione) a una variabile di oggetto SSIS denominata 'User :: SourceFilesInTheDirectory'. Una volta che avrò la lista dei nomi di file nella variabile oggetto, stavo per forzare il loro ciclo in una tabella SQL.
Qualcuno ha qualche suggerimento specifico su come faccio a ottenere un elenco di tutti i nomi di file dalla mia directory delle variabili alla variabile dell'oggetto SSIS?
Grazie in anticipo!
EDIT: Ecco il mio codice aggiornato:
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Collections.Generic;
using System.Data.SqlClient;
namespace ST_f5e4ae71f14d40d8811af21fa2a9a622.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
//Setup Connection String to SQL
SqlConnection SQLConnection = new SqlConnection(
//"user id=username;" + //UserName
//"password=password;" + //Password
"Trusted_Connection=true;" + //Windows Auth
"server=SERVERNAME;" + //SQL Server
"database=DATABASENAME; " + //SQL Database
"connection timeout=30;" + //connection timeout
"Network Library=dbmssocn"); //TCP/IP Connection ("dbnmpntw" = Name Pipes)
//Open the SQL Connection and remove the error code
try
{
SQLConnection.Open();
}
catch (Exception OpenConnectionError)
{
Console.WriteLine(OpenConnectionError.ToString());
}
//Fetch a list of files from 'SourceNetworkFolderName' SSIS variable to an array called array1.
string[] ArrayFileName = Directory.GetFiles(Dts.Variables["SourceNetworkFolderName"].Value.ToString());
//Set up sql variable for table population
SqlParameter SQLFileNameParam = new SqlParameter("@FileName", SqlDbType.VarChar, 100);
//Loop through the array and insert into an SQL table
foreach (string strFileName in ArrayFileName)
{
//Update sql variable with file names from array
SQLFileNameParam.Value = strFileName;
//Make the table insert
SqlCommand SQLInsertToTable = new SqlCommand("INSERT INTO Archive_Extract_Network_Folder_File_List (FileName) VALUES (@FileName)", SQLConnection);
//This snippit allows the use of the variable in the sql script.
SQLInsertToTable.Parameters.Add(SQLFileNameParam);
//Execute SqlCommand
SQLInsertToTable.ExecuteNonQuery();
//Clear the parameters and set the object to null
SQLInsertToTable.Parameters.Clear();
SQLInsertToTable = null;
}
//Close the SQL Connection and remove the error code
try
{
SQLConnection.Close();
}
catch (Exception CloseConnectionError)
{
Console.WriteLine(CloseConnectionError.ToString());
}
//Set array to null since it is no longer required.
ArrayFileName = null;
//Exit on success
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
Grazie per l'aiuto! Ho fatto dei progressi, ma sono di nuovo bloccato. Penso che il mio nuovo problema sia legato al modo in cui sto compilando la mia variabile oggetto dall'attività di script. Nel debugger sto usando watch e la mia variabile 'User :: SourceFilesInTheDirectory' sta mostrando: Value = {Dimensions: [2]} Type = String [] Credo che per usare questa variabile come ADO enumeratore, deve leggere: Valore = {System.Data.DataSet} Type = DataSet – Joe
Mi sento super vicino, ma attualmente ricevo errori di debug quando provo a eseguire questa variabile come un enumeratore ADO Foreach. Qualche idea su come ottenere che questa variabile sia di tipo corretto in modo che io possa usarla come un enumeratore Foreach? Ho incollato il mio codice qui sotto: – Joe
'codice public void Main() { // recuperare un elenco di file da variabile SSIS 'SourceNetworkFolderName' ad una stringa di matrice [] array1 = Directory.GetFiles (Dts.Variables [ "SourceNetworkFolderName"] Value.ToString()).; // Popolare la variabile oggetto SSIS 'SourceFilesInTheDirectory' con tutti i nomi file dall'array Dts.Variables ["SourceFilesInTheDirectory"]. Value = array1; Dts.TaskResult = (int) ScriptResults.Success; } ' – Joe