Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Generating Repeatable Random Data for Testing/DebuggingDemonstrates how to use the Fortuna PRNG to generate random-looking but repeatable non-random data for the purpose of testing and debugging.
-- 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) -- All Chilkat classes can be unlocked at once at the beginning of a program -- by calling UnlockBundle. It requires a Bundle unlock code. DECLARE @chilkatGlob int -- Use "Chilkat_9_5_0.Global" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Global', @chilkatGlob OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END DECLARE @success int EXEC sp_OAMethod @chilkatGlob, 'UnlockBundle', @success OUT, 'Anything for 30-day trial.' IF @success <> 1 BEGIN EXEC sp_OAGetProperty @chilkatGlob, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @chilkatGlob RETURN END DECLARE @fortuna int -- Use "Chilkat_9_5_0.Prng" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Prng', @fortuna OUT -- Normally an application would seed the PRNG with entropy from -- some real random source. However, sometimes we want the same -- random sequence of bytes for testing and debugging purposes. -- This a reason why GetEntropy and AddEntropy are two different methods. -- An application could omit the call to GetEntropy, and instead pass -- non-random data to AddEntropy. For example: -- Seed the PRNG with non-entropy, so we get a repeatable sequence. -- Note: AddEntropy can be called any number of times. EXEC sp_OAMethod @fortuna, 'AddEntropy', @success OUT, '01020304', 'hex' EXEC sp_OAMethod @fortuna, 'AddEntropy', @success OUT, 'hello world', 'ascii' -- Generate some random data: DECLARE @strRandHex nvarchar(4000) EXEC sp_OAMethod @fortuna, 'GenRandom', @strRandHex OUT, 16, 'hex' DECLARE @strRandBase64 nvarchar(4000) EXEC sp_OAMethod @fortuna, 'GenRandom', @strRandBase64 OUT, 22, 'base64' DECLARE @strRandBase58 nvarchar(4000) EXEC sp_OAMethod @fortuna, 'GenRandom', @strRandBase58 OUT, 32, 'base58' PRINT 'hex random bytes: ' + @strRandHex PRINT 'base64 random bytes: ' + @strRandBase64 PRINT 'base58 random bytes: ' + @strRandBase58 -- Try it again with a different object to verify that the same results are obtained: DECLARE @fortuna2 int -- Use "Chilkat_9_5_0.Prng" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Prng', @fortuna2 OUT EXEC sp_OAMethod @fortuna2, 'AddEntropy', @success OUT, '01020304', 'hex' EXEC sp_OAMethod @fortuna2, 'AddEntropy', @success OUT, 'hello world', 'ascii' EXEC sp_OAMethod @fortuna2, 'GenRandom', @strRandHex OUT, 16, 'hex' EXEC sp_OAMethod @fortuna2, 'GenRandom', @strRandBase64 OUT, 22, 'base64' EXEC sp_OAMethod @fortuna2, 'GenRandom', @strRandBase58 OUT, 32, 'base58' PRINT 'hex random bytes: ' + @strRandHex PRINT 'base64 random bytes: ' + @strRandBase64 PRINT 'base58 random bytes: ' + @strRandBase58 EXEC @hr = sp_OADestroy @chilkatGlob EXEC @hr = sp_OADestroy @fortuna EXEC @hr = sp_OADestroy @fortuna2 END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.