SQL Server
SQL Server
File Read Blocks
Demonstrates how to read a file in fixed-size blocks (except for the very last block).Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- Demonstrates how to read a file in blocks,
-- which can be useful when uploading to cloud storage
-- services such as Azure, S3, Google, etc.
-- For this example, we're simply writing the blocks
-- to an output file, and then checking to see if the
-- resulting file contents equals the original file contents.
DECLARE @facSrc int
EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @facSrc OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @facDest int
EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @facDest OUT
DECLARE @srcPath nvarchar(4000)
SELECT @srcPath = 'qa_data/xml/hamlet.xml'
DECLARE @destPath nvarchar(4000)
SELECT @destPath = 'qa_output/hamletOut.xml'
EXEC sp_OAMethod @facSrc, 'OpenForRead', @success OUT, @srcPath
EXEC sp_OAMethod @facDest, 'OpenForWrite', @success OUT, @destPath
-- Assuming success for the example..
-- How many 1024-byte blocks? (Including 1 for the last partial block)
DECLARE @numBlocks int
EXEC sp_OAMethod @facSrc, 'GetNumBlocks', @numBlocks OUT, 1024
DECLARE @i int
SELECT @i = 0
WHILE (@i < @numBlocks)
BEGIN
EXEC sp_OAMethod @facSrc, 'ReadBlock', @dataBlock OUT, @i, 1024
EXEC sp_OAGetProperty @facSrc, 'LastMethodSuccess', @iTmp0 OUT
IF @iTmp0 <> 1
BEGIN
EXEC sp_OAGetProperty @facSrc, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @facSrc
EXEC @hr = sp_OADestroy @facDest
RETURN
END
EXEC sp_OAMethod @facDest, 'FileWrite', @success OUT, @dataBlock
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @facDest, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @facSrc
EXEC @hr = sp_OADestroy @facDest
RETURN
END
SELECT @i = @i + 1
END
EXEC sp_OAMethod @facSrc, 'FileClose', NULL
EXEC sp_OAMethod @facDest, 'FileClose', NULL
DECLARE @bEqual int
EXEC sp_OAMethod @facSrc, 'FileContentsEqual', @bEqual OUT, @srcPath, @destPath
IF @bEqual <> 1
BEGIN
PRINT 'Something went wrong!'
EXEC @hr = sp_OADestroy @facSrc
EXEC @hr = sp_OADestroy @facDest
RETURN
END
PRINT 'File successfully copied by blocks.'
EXEC @hr = sp_OADestroy @facSrc
EXEC @hr = sp_OADestroy @facDest
END
GO