![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java JavaScript Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Prevent JavaScript Infinite LoopsSee more JavaScript ExamplesDemonstrates how prevent infinite loops or prevent the JavaScript from running for a longer amount of time than allowed.Note: This example requires Chilkat v11.4.0 or greater.
-- 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) DECLARE @success int SELECT @success = 0 -- This is the JavaScript we'll run: -- console.log('Starting infinite loop...'); while(true) {}; DECLARE @sbScript int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbScript OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END EXEC sp_OAMethod @sbScript, 'Append', @success OUT, 'console.log(''Starting infinite loop...''); while(true) {};' DECLARE @js int EXEC @hr = sp_OACreate 'Chilkat.Js', @js OUT -- Set a limit on the amount of time (in seconds) the script is allowed to run. -- If the JavaScript takes longer than this amount of time, then Chilkat kills the script without crashing the host program. -- The default value of TimeoutSeconds is 0, which indicates no limit. -- For this example, set a limit of 2 seconds. EXEC sp_OASetProperty @js, 'TimeoutSeconds', 2 DECLARE @result int EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @result OUT EXEC sp_OASetProperty @result, 'EmitCompact', 0 -- Run the script.. EXEC sp_OAMethod @js, 'Eval', @success OUT, @sbScript, @result IF @success = 0 BEGIN -- Examine the result for an exception. EXEC sp_OAMethod @result, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- The result contains this: -- { -- "exception": { -- "message": "interrupted - JavaScript exceeded the Chilkat.Js.TimeoutSeconds", -- "stack": [ -- { -- "func": "<eval>", -- "file": "<input>", -- "line": 1, -- "col": 8 -- } -- ] -- } -- } -- Also examine the LastErrorText. EXEC sp_OAGetProperty @js, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbScript EXEC @hr = sp_OADestroy @js EXEC @hr = sp_OADestroy @result RETURN END -- We should never get here.. PRINT 'Succeeded.' EXEC sp_OAMethod @result, 'Emit', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbScript EXEC @hr = sp_OADestroy @js EXEC @hr = sp_OADestroy @result END GO
|
||||
© 2000-2026 Chilkat Software, Inc. All Rights Reserved.