Sample code for 30+ languages & platforms
SQL Server

Firebase PUT - Writing Data

See more Firebase Examples

Demonstrates how to PUT new data to a Firebase JSON database. The data used in this example is at Chilkat Firebase Pigs Database, and is shown here:

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 @sTmp1 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- Demonstrates how to PUT new data to a Firebase JSON database.

    -- This example requires the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    -- This example assumes a JWT authentication token, if required, has been previously obtained.
    -- See Get Firebase Access Token from JSON Service Account Private Key for sample code.

    -- Load the previously obtained Firebase access token into a string.
    DECLARE @fac int
    EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @fac OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @accessToken nvarchar(4000)
    EXEC sp_OAMethod @fac, 'ReadEntireTextFile', @accessToken OUT, 'qa_data/tokens/firebaseToken.txt', 'utf-8'
    EXEC sp_OAGetProperty @fac, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        EXEC sp_OAGetProperty @fac, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @fac
        RETURN
      END

    DECLARE @rest int
    EXEC @hr = sp_OACreate 'Chilkat.Rest', @rest OUT

    -- Make the initial connection (without sending a request yet).
    -- Once connected, any number of requests may be sent.  It is not necessary to explicitly
    -- call Connect before each request.  
    EXEC sp_OAMethod @rest, 'Connect', @success OUT, 'chilkat.firebaseio.com', 443, 1, 1
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @fac
        EXEC @hr = sp_OADestroy @rest
        RETURN
      END
    DECLARE @authGoogle int
    EXEC @hr = sp_OACreate 'Chilkat.AuthGoogle', @authGoogle OUT

    EXEC sp_OASetProperty @authGoogle, 'AccessToken', @accessToken
    EXEC sp_OAMethod @rest, 'SetAuthGoogle', @success OUT, @authGoogle

    -- Chilkat's sample data (pig-rescue data) is publicly readable at: https://chilkat.firebaseio.com/.json
    -- This data is publicly readable, but not writable.  You'll need to 
    -- run against your own database..

    -- Generate a new push ID.
    DECLARE @prng int
    EXEC @hr = sp_OACreate 'Chilkat.Prng', @prng OUT

    DECLARE @pushId nvarchar(4000)
    EXEC sp_OAMethod @prng, 'FirebasePushId', @pushId OUT

    -- We're going to add a new pig with just the name.
    DECLARE @pigRecord int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @pigRecord OUT

    EXEC sp_OAMethod @pigRecord, 'AppendString', @success OUT, 'name', 'William'

    DECLARE @path int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @path OUT

    EXEC sp_OAMethod @path, 'Append', @success OUT, '/pig-rescue/animal/'
    EXEC sp_OAMethod @path, 'Append', @success OUT, @pushId
    EXEC sp_OAMethod @path, 'Append', @success OUT, '.json'

    -- The string content of the last arg passed is  {"name":"William"} 
    DECLARE @jsonResponse nvarchar(4000)
    EXEC sp_OAMethod @path, 'GetAsString', @sTmp0 OUT
    EXEC sp_OAMethod @pigRecord, 'Emit', @sTmp1 OUT
    EXEC sp_OAMethod @rest, 'FullRequestString', @jsonResponse OUT, 'PUT', @sTmp0, @sTmp1
    EXEC sp_OAGetProperty @rest, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        -- Something happened in the communications (either no request was sent, or no response was received.
        -- (The Chilkat REST API also has lower-level methods where an app can send the request in one call,
        -- and then receive the response in another call.)
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @fac
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authGoogle
        EXEC @hr = sp_OADestroy @prng
        EXEC @hr = sp_OADestroy @pigRecord
        EXEC @hr = sp_OADestroy @path
        RETURN
      END

    -- Check the response status code.   A 200 response status indicates success.
    EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @iTmp0 OUT
    IF @iTmp0 <> 200
      BEGIN
        EXEC sp_OAGetProperty @rest, 'ResponseStatusText', @sTmp0 OUT
        PRINT @sTmp0

        PRINT @jsonResponse

        PRINT 'Failed.'
        EXEC @hr = sp_OADestroy @fac
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authGoogle
        EXEC @hr = sp_OADestroy @prng
        EXEC @hr = sp_OADestroy @pigRecord
        EXEC @hr = sp_OADestroy @path
        RETURN
      END


    PRINT @jsonResponse

    PRINT 'Success.'

    -- Note: In many of the Chilkat examples, you may notice strange ways
    -- of doing something that should be simpler and shorter.  For example,
    -- building the path (above) could've been written differently,
    -- with some simple string concatenation.
    -- 
    -- The reason is that the Chilkat examples are written in a 
    -- proprietary "example code" scripting language,
    -- and then automatically generated to each of the different programming
    -- languages you see on example-code.com.  The code generation is
    -- limited in what it can do.  For example, string concatentation
    -- is not yet a feature of the "example code" scripting language (as of May 2016), 
    -- and therefore you won't see the use of a programming language's string
    -- concatentation operators in any example.  
    -- 

    EXEC @hr = sp_OADestroy @fac
    EXEC @hr = sp_OADestroy @rest
    EXEC @hr = sp_OADestroy @authGoogle
    EXEC @hr = sp_OADestroy @prng
    EXEC @hr = sp_OADestroy @pigRecord
    EXEC @hr = sp_OADestroy @path


END
GO