// This is an automatically generated code sample. 
// To make this code sample work in your Oracle Cloud tenancy, 
// please replace the values for any parameters whose current values do not fit
// your use case (such as resource IDs, strings containing ‘EXAMPLE’ or ‘unique_id’, and 
// boolean, number, and enum parameters with values not fitting your use case).

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Oci.DatabasetoolsruntimeService;
using Oci.Common;
using Oci.Common.Auth;

namespace Oci.Sdk.DotNet.Example.Databasetoolsruntime
{
    public class ExecuteSqlDatabaseToolsConnectionExample
    {
        public static async Task Main()
        {
            // Create a request and dependent object(s).
			var executeSqlDatabaseToolsConnectionDetails = new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlDatabaseToolsConnectionAsynchronousDetails
			{
				TimeoutInSeconds = 13899,
				Input = new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlAsynchronousInputObjectStorageDetails
				{
					Object = new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlObjectStorageLocation
					{
						Namespace = "EXAMPLE-namespace-Value",
						BucketName = "EXAMPLE-bucketName-Value",
						ObjectName = "EXAMPLE-objectName-Value"
					}
				},
				Output = new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlOutputObjectStorageDetails
				{
					TimeOfDeletion = DateTime.Parse("07/18/2001 08:58:21"),
					Object = new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlObjectStorageLocation
					{
						Namespace = "EXAMPLE-namespace-Value",
						BucketName = "EXAMPLE-bucketName-Value",
						ObjectName = "EXAMPLE-objectName-Value"
					},
					ResultDispositionTemplates = new List<Oci.DatabasetoolsruntimeService.Models.ExecuteSqlOutputResultDispositionTemplate>
					{
						new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlOutputResultDispositionTemplate
						{
							StatementType = Oci.DatabasetoolsruntimeService.Models.StatementType.Other,
							ObjectTemplate = new Oci.DatabasetoolsruntimeService.Models.ExecuteSqlOutputDispositionObjectStorageDetails
							{
								Namespace = "EXAMPLE-namespace-Value",
								BucketName = "EXAMPLE-bucketName-Value",
								ObjectName = "EXAMPLE-objectName-Value",
								ContentType = "EXAMPLE-contentType-Value",
								ContentDisposition = "EXAMPLE-contentDisposition-Value",
								ContentEncoding = "EXAMPLE-contentEncoding-Value",
								CacheControl = "EXAMPLE-cacheControl-Value",
								ContentLanguage = "EXAMPLE-contentLanguage-Value",
								OpcSseCustomerAlgorithm = "EXAMPLE-opcSseCustomerAlgorithm-Value",
								OpcSseCustomerKey = "EXAMPLE-opcSseCustomerKey-Value",
								OpcSseCustomerKeySha256 = "EXAMPLE-opcSseCustomerKeySha256-Value",
								OpcSseKmsKeyId = "ocid1.test.oc1..<unique_ID>EXAMPLE-opcSseKmsKeyId-Value",
								StorageTier = Oci.DatabasetoolsruntimeService.Models.ExecuteSqlOutputDispositionObjectStorageDetails.StorageTierEnum.InfrequentAccess
							}
						}
					}
				}
			};
			var executeSqlDatabaseToolsConnectionRequest = new Oci.DatabasetoolsruntimeService.Requests.ExecuteSqlDatabaseToolsConnectionRequest
			{
				DatabaseToolsConnectionId = "ocid1.test.oc1..<unique_ID>EXAMPLE-databaseToolsConnectionId-Value",
				ExecuteSqlDatabaseToolsConnectionDetails = executeSqlDatabaseToolsConnectionDetails,
				OpcRequestId = "ZOVMYUCVH8AMMBIKETBR<unique_ID>",
				IfMatch = "EXAMPLE-ifMatch-Value"
			};

            // Create a default authentication provider that uses the DEFAULT
            // profile in the configuration file.
            // Refer to <see href="https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File>the public documentation</see> on how to prepare a configuration file. 
            var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT");
            try
            {
                // Create a service client and send the request.
				using (var client = new DatabaseToolsRuntimeClient(provider, new ClientConfiguration()))
				{
					var response = await client.ExecuteSqlDatabaseToolsConnection(executeSqlDatabaseToolsConnectionRequest);
					// Retrieve value from the response.
					var envValue = response.ExecuteSqlResponse.Env;
				}
            }
            catch (Exception e)
            {
                Console.WriteLine($"ExecuteSqlDatabaseToolsConnection Failed with {e.Message}");
                throw e;
            }
        }

    }
}