SQL Server
SQL Server
Serialize / Deserialize Hashtable to/from XML
Demonstrates how to seralize / deserialize a Hashtable to/from XML.Note: This example requires Chilkat v9.5.0.64 or later.
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
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
-- Note: This example requires Chilkat v9.5.0.64 or later.
-- Add some entries to a hashtable.
DECLARE @hashTab int
EXEC @hr = sp_OACreate 'Chilkat.Hashtable', @hashTab OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @success int
EXEC sp_OAMethod @hashTab, 'AddStr', @success OUT, 'aaa', '111'
EXEC sp_OAMethod @hashTab, 'AddStr', @success OUT, 'bbb', '222'
EXEC sp_OAMethod @hashTab, 'AddStr', @success OUT, 'ccc', '333'
-- Serialize to XML
DECLARE @sb int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sb OUT
EXEC sp_OAMethod @hashTab, 'ToXmlSb', @success OUT, @sb
EXEC sp_OAMethod @sb, 'GetAsString', @sTmp0 OUT
PRINT @sTmp0
PRINT '---'
-- The output is as follows. Each hash table entry
-- is contained in an "e" node. The entry's key
-- is in the "k" node, and the value in the "v" node.
-- <?xml version="1.0" encoding="utf8-8"?>
-- <hashtable>
-- <e><k>aaa</k><v>111</v></e>
-- <e><k>bbb</k><v>222</v></e>
-- <e><k>ccc</k><v>333</v></e>
-- </hashtable>
--
-- Now load (deserialize) into a new hash table.
DECLARE @hashTab2 int
EXEC @hr = sp_OACreate 'Chilkat.Hashtable', @hashTab2 OUT
EXEC sp_OAMethod @hashTab2, 'AddFromXmlSb', @success OUT, @sb
-- Get the hash table keys, and lookup each (to show
-- that the hash table was correctly deserialized).
-- The GetKeys method can return the keys in any order.
DECLARE @sTable int
EXEC @hr = sp_OACreate 'Chilkat.StringTable', @sTable OUT
EXEC sp_OAMethod @hashTab2, 'GetKeys', @success OUT, @sTable
DECLARE @i int
SELECT @i = 0
DECLARE @numKeys int
EXEC sp_OAGetProperty @sTable, 'Count', @numKeys OUT
WHILE @i < @numKeys
BEGIN
DECLARE @key nvarchar(4000)
EXEC sp_OAMethod @sTable, 'StringAt', @key OUT, @i
EXEC sp_OAMethod @hashTab2, 'LookupStr', @sTmp0 OUT, @key
PRINT @key + ': ' + @sTmp0
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @hashTab
EXEC @hr = sp_OADestroy @sb
EXEC @hr = sp_OADestroy @hashTab2
EXEC @hr = sp_OADestroy @sTable
END
GO