Monday, August 22, 2005

Copy file from source to destination using CLR in Yukon

This article would explain an utility function to copy a source file into destination. Lets get started.

Part I - Visual Studio.NET 2005

1. Open a C# -- Database project
2. Create a new stored procedure file into it.
3. Add the below code into it ...

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlServer;
using System.Data.SqlTypes;
using System.IO;

public partial class StoredProcedures
{
[SqlProcedure]
public static void CopyFile(String strFileSource, String strFileDestination)
{
SqlPipe objPipe;
objPipe = SqlContext.GetPipe();

try
{
if (File.Exists(strFileSource))
{
//Third parameter is to say whether the destination
//can be overwritten or not.
File.Copy(strFileSource, strFileDestination, true);
objPipe.Send("Successfully copied from source to destination");
}
else
{
objPipe.Send("Source file does not exist.");
}
}
catch (Exception objExp)
{
objPipe.Send(objExp.Message.ToString());
}
}
};

Then build the application once.

Part II -- SQL SERVER 2005

Open SQL Server Management Studio

1. Create a new query and copy paste the below code snippet into it.

--Create an assembly
Create Assembly UtilityFunction_FileCopy
From 'C:\Documents and Settings\Administrator\My Documents\Visual Studio\Projects\SqlServerProject1\SqlServerProject1\bin\Debug\SqlServerProject1.dll'
With Permission_Set = External_Access;
Go

--Create the stored procedure
Create proc dbo.CopyFile
(
@strFileSource nvarchar(1024),
@strFileDestination nvarchar(1024)
)
as external name UtilityFunction_FileCopy.StoredProcedures.CopyFile
Go

2. Try and execute this SP (after creating a source file src.txt in c drive)

Exec dbo.CopyFile 'C:\src.txt', 'C:\dest.txt';

It would most probabaly throw an error like this:

Msg 6263, Level 16, State 1, Line 1
Execution of user code in the .NET Framework is disabled. Use sp_configure 'clr enabled' to enable execution of user code in the .NET Framework.

By default execution of the code in .NET framework is disable ... so just run the below two lines to enable it.

sp_configure 'clr enabled', 1
RECONFIGURE WITH OVERRIDE

Now try to execute the SP it would work fine.

No comments: