Scenario:
You are working as SQL Server Integration Services(SSIS) developer, You need to create an SSIS Package that should be able to load file's information form a folder to SQL Server table. The SSIS Package should load file name, file created date-time and file size in kilo bytes.Solution:
First of all we need to create a table in which we would like to save file's information from a folder.use YourDatabaseName
go
CREATE TABLE dbo.FileInformation
(
Filename VARCHAR(100),
FileCreatedDateTime DATETIME,
FileSize INT
)
Step 1:
Open BIDS or SSDT and create new SSIS Package, In your SSIS Package, create a variable VarDirectoryPath of string type. Provide value to this variable C:\MyTestFolder as you would like to create the file's information from this folder. You will be providing the path of folder in which you have the files.
Create variable in SSIS Package to load file's information to SQL Server Table |
Step 2:
Create an ADO.NET Connection to your Database and rename to DBConn.
![]() |
Create an ADO.NET connection in SSIS Package to use in Script Task to load File's information to SQL Server Table |
Step3:
Drag Script task to Control Flow Pane and add VarDirectortyPath as input variable as shown belowAdd user variable to Script Task in SSIS Package to load file's information to SQL Server Table |
Step 4:
Click on Edit Script Button and then copy below code to your Script Task Editor.
Under #Region NameSpaces, paste below namespaces.
using System.IO; using System.Data.SqlClient;
Got to public void Main()
{
and paste below code.
SqlConnection myADONETConnection = new SqlConnection(); myADONETConnection = (SqlConnection)(Dts.Connections["DBConn"].AcquireConnection(Dts.Transaction) as SqlConnection); //MessageBox.Show(myADONETConnection.ConnectionString, "ADO.NET Connection"); string DirPath = Dts.Variables["User::VarDirectoryPath"].Value.ToString(); //get all files from directory string[] files = Directory.GetFiles(DirPath); SqlCommand sqlCmd= new SqlCommand(); sqlCmd.Connection = myADONETConnection; //loop through files foreach (string filename in files) { FileInfo file = new FileInfo(filename); sqlCmd.CommandText = "Insert into dbo.FileInformation Values('" + file.Name + "','" + file.CreationTime + "','" + file.Length/1024 + "')"; //MessageBox.Show(sqlCmd.CommandText); sqlCmd.ExecuteNonQuery(); } Dts.TaskResult = (int)ScriptResults.Success; }
Step 5:
Save the script and close the script task editor window. Run your SSIS Package, it should load the file's information from folder to Test.dbo.FileInformation table.
Thanks Azeem!
ReplyDeleteI sent you an email about sqlconnection in the c# script
ReplyDelete