Я пытаюсь создать пакет SSIS, который будет использоваться в процессе архивирования стандартизированной файловой системы. По сути, я смогу добавить информацию в таблицу конфигурации, а затем использовать эту таблицу для архивирования определенных файлов в указанных папках. Моя проблема в том, что многие файлы имеют динамическое имя, поэтому мне нужно получить список всех файлов, а затем запросить, чтобы решить, какие файлы я должен трогать.
Не будучи программистом на языке C #/VB, я столкнулся с некоторыми проблемами при попытке создать сценарий части пакета, который захватывает все файлы в указанном сетевом каталоге, а затем возвращает эти имена файлов обратно в объектную переменную SSIS.
У меня есть строковая переменная «Пользователь ::SourceNetworkFolderName», которая будет содержать расположение UNC папки, из которой я хочу прочитать все файлы. Затем я хочу передать все эти имена файлов (с расширением )обратно в переменную объекта SSIS с именем «Пользователь ::SourceFilesInTheDirectory». Как только у меня будет список имен файлов в объектной переменной, я собирался зациклить их foreach в таблице SQL.
Есть ли у кого-нибудь конкретные предложения о том, как мне получить список всех имен файлов из моего каталога переменных в переменную объекта SSIS?
Заранее спасибо!
РЕДАКТИРОВАТЬ: Вот мой обновленный код:
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;
}
}
}