using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.Core.DI; using Tango.Integration.ExternalBridge; using Tango.PPC.Common.ExternalBridge; using Tango.PPC.Shared.SQL; namespace Tango.PPC.Common.SQL { [TangoCreateWhenRegistered] public class DefaultRemoteSqlService : IRemoteSqlService, IExternalBridgeRequestHandler { public bool Enabled { get; set; } = true; public DefaultRemoteSqlService(IPPCExternalBridgeService externalBridge) { externalBridge.RegisterRequestHandler(this); } [ExternalBridgeRequestHandlerMethod(typeof(ExecuteSqlRequest), RequestHandlerLoggingMode.LogRequestNameAndContent)] public async Task OnExecuteSqlRequest(ExecuteSqlRequest request, String token, ExternalBridgeReceiver receiver) { this.ThrowIfDisabled(); RemoteSqlDataSet dataSet = new RemoteSqlDataSet(); int affected = 0; using (ObservablesContext db = ObservablesContext.CreateDefault()) { using (SqlConnection connection = new SqlConnection(db.Database.Connection.ConnectionString)) { SqlCommand command = new SqlCommand(request.SQL, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); affected = reader.RecordsAffected; dataSet = await RemoteSqlDataSet.Load(reader); } } await receiver.SendGenericResponse(new ExecuteSqlResponse() { DataSet = dataSet, AffectedRecords = affected }, token); } public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) { } } }