toolkit/DllConvertToStream/Program.cs (77 lines of code) (raw):

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Copyright (c) Microsoft Corporation. // // @File: Program.cs // // @Owner: Dejan Dundjerski // // Purpose: // SQL MI Toolkit for customers to debug various customer side issues. // // Notes: // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; namespace DllConvertToStream { /// <summary> /// Convert DLL to stream and generate SQL statements. /// </summary> class DllConvertToStream { private static string Template = @" USE [master] GRANT UNSAFE ASSEMBLY TO [<your_user>] USE [<your_database>] EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'clr enabled', 1 RECONFIGURE EXEC sp_configure 'clr strict security', 0 RECONFIGURE DECLARE @bytes VARBINARY(8000) = HASHBYTES('SHA2_512', {0}); EXEC sp_add_trusted_assembly @bytes, N'SqlManagedInstanceToolkit, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil'; --DROP ASSEMBLY [SqlManagedInstanceToolkit] CREATE ASSEMBLY [SqlManagedInstanceToolkit] FROM {0} WITH PERMISSION_SET = EXTERNAL_ACCESS; --DROP PROCEDURE dbo.SqlManagedInstanceToolkit_CheckIpAddressAccessibility CREATE PROCEDURE dbo.SqlManagedInstanceToolkit_CheckIpAddressAccessibility (@ipAddress AS NVARCHAR(MAX), @port AS INT) AS EXTERNAL NAME [SqlManagedInstanceToolkit].[SqlManagedInstanceToolkit].[CheckIpAddressAccessibility]; DECLARE @ipAddress NVARCHAR(MAX) = '<ip address>' DECLARE @port INT = <port> EXEC dbo.SqlManagedInstanceToolkit_CheckStorageAccountAccessibility @ipAddress, @port --DROP PROCEDURE dbo.SqlManagedInstanceToolkit_CheckFqdnAccessibility CREATE PROCEDURE dbo.SqlManagedInstanceToolkit_CheckFqdnAccessibility (@fqdn AS NVARCHAR(MAX), @port AS INT) AS EXTERNAL NAME [SqlManagedInstanceToolkit].[SqlManagedInstanceToolkit].[CheckFqdnAccessibility]; DECLARE @fqdn NVARCHAR(MAX) = '<fqdn>' DECLARE @port INT = <port> EXEC dbo.SqlManagedInstanceToolkit_CheckFqdnAccessibility @fqdn, @port --DROP PROCEDURE dbo.SqlManagedInstanceToolkit_CheckStorageAccountAccessibility CREATE PROCEDURE dbo.SqlManagedInstanceToolkit_CheckStorageAccountAccessibility (@strg AS NVARCHAR(MAX), @sas AS NVARCHAR(MAX), @write BIT) AS EXTERNAL NAME [SqlManagedInstanceToolkit].[SqlManagedInstanceToolkit].[CheckStorageAccountAccessibility]; DECLARE @strgToTest NVARCHAR(MAX) = '<your strg>' DECLARE @sasToTest NVARCHAR(MAX) = '<your sas>' DECLARE @writeToNewFile BIT = 1 EXEC dbo.SqlManagedInstanceToolkit_CheckStorageAccountAccessibility @strgToTest, @sasToTest, @writeToNewFile "; /// <summary> /// Convert dll to hex /// </summary> /// <param name="assemblyPath"></param> /// <returns></returns> private static string GetHexString(string assemblyPath) { StringBuilder builder = new StringBuilder("0x"); using (FileStream stream = new FileStream(assemblyPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { int currentByte = stream.ReadByte(); while (currentByte > -1) { builder.Append(currentByte.ToString("X2", System.Globalization.CultureInfo.InvariantCulture)); currentByte = stream.ReadByte(); } } return builder.ToString(); } /// <summary> /// Generate SQL stmts from template. /// </summary> /// <returns></returns> private static string GenerateFromTemplate() { var parentPath = Directory.GetParent(Environment.CurrentDirectory); string rootPath = parentPath.Parent.Parent.FullName; var hexString = GetHexString(string.Format(@"{0}\\Toolkit\\bin\\debug\\Toolkit.dll", rootPath)); return string.Format(Template, hexString); } public static void Main() { File.WriteAllText("commands.sql", GenerateFromTemplate()); } } }