Sample code for 30+ languages & platforms
SQL Server

Compress a File to Gzip in Memory using BinData

See more Gzip Examples

This example demonstrates how to use the CompressFileBd method to compress a file into Gzip format and store the compressed result in memory using a BinData object.

The input file is read from disk and compressed, with the resulting .gz data placed in the BinData instance. This allows your application to work with the compressed data entirely in memory before deciding what to do next.

Finally, the example shows how the in-memory Gzip data can be written to a file, which is useful for saving or distributing the compressed output.

Chilkat SQL Server Downloads

SQL Server
-- 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

    -- This example demonstrates how to compress a file into Gzip format
    -- and store the compressed result in a BinData object (in memory).

    DECLARE @gzip int
    EXEC @hr = sp_OACreate 'Chilkat.Gzip', @gzip OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @bd int
    EXEC @hr = sp_OACreate 'Chilkat.BinData', @bd OUT

    -- The file to be compressed:
    DECLARE @filePath nvarchar(4000)
    SELECT @filePath = 'example.txt'

    -- Compress the file into the BinData object:
    EXEC sp_OAMethod @gzip, 'CompressFileBd', @success OUT, @filePath, @bd
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @gzip, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @gzip
        EXEC @hr = sp_OADestroy @bd
        RETURN
      END

    -- At this point, "bd" contains the Gzip-compressed data in memory.

    PRINT 'Compression successful.'

    EXEC sp_OAGetProperty @bd, 'NumBytes', @iTmp0 OUT
    PRINT 'Compressed size (bytes): ' + @iTmp0

    -- (Optional) Save the in-memory Gzip data to a file:
    EXEC sp_OAMethod @bd, 'WriteFile', @success OUT, 'example.txt.gz'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @bd, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @gzip
        EXEC @hr = sp_OADestroy @bd
        RETURN
      END


    PRINT 'Gzip file written to example.txt.gz'

    EXEC @hr = sp_OADestroy @gzip
    EXEC @hr = sp_OADestroy @bd


END
GO