Публикация

Вызов хранимой процедуры из веб-сервиса

Вопрос

Вызов хранимой процедуры из веб-сервиса.

Ответ

Создайте схему исходного кода:

namespace Terrasoft.Configuration.UsrTestStored
{
    using System;
    using System.Web;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.ServiceModel.Activation;
    using System.Linq;
    using System.Text;
    using System.Collections.Generic;
    using System.Collections.Concurrent;
    using System.Data;
    using Terrasoft.Common;
    using Terrasoft.Core;
    using Terrasoft.Core.DB;
    using Terrasoft.Core.Entities;
    using Terrasoft.Core.Factories;
    using Terrasoft.Core.Store;
    using Terrasoft.Nui;
 
    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrTestStored
    {
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public string GetTest(string inputParam)
        {
            var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
            StoredProcedure storedProcedure = new StoredProcedure(userConnection, "tsp_Test");
            storedProcedure.PackageName = userConnection.DBEngine.SystemPackageName;
            using (var dbExecutor = userConnection.EnsureDBConnection()) {
               try {
                   dbExecutor.CommandTimeout = 0;
                   dbExecutor.StartTransaction();
                   storedProcedure.Execute(dbExecutor);
                   dbExecutor.CommitTransaction();
                   return "OK";
               } catch {
                   dbExecutor.RollbackTransaction();
                   return "NOT OK";
               }
            }
        }
    }
}

 

Нравится

Поделиться

3 комментария

Добрый день!

Приведите, пожалуйста, если возможно, пример вызова хранимой процедуры которая возвращает результат выполнения и пример обработки результата. Спасибо!

Вот пример вызова ХП с исходящим параметром:

 private const string SequenseNumberProcedureName = "tsp_GenerateSequenseNumber"; 
 public string GenerateNumber() {
   var number = string.Empty;
   var procedure = new StoredProcedure(UserConnection, SequenseNumberProcedureName);
   var dataValueTypeManager = (DataValueTypeManager)UserConnection.AppManagerProvider.GetManager("DataValueTypeManager");
   procedure.WithParameter(EntitySchema.Name);
   procedure.WithOutputParameter("result_value", dataValueTypeManager.GetInstanceByName("Text"));
   using (var dbExecutor = UserConnection.EnsureDBConnection()) {
    dbExecutor.StartTransaction(System.Data.IsolationLevel.ReadCommitted);
    try {
     procedure.Execute(dbExecutor);
     if (procedure.Parameters.Count > 0) {
      number = (string)procedure.Parameters[1].Value;
     }
    } catch {
     dbExecutor.RollbackTransaction();
     throw;
    }
    dbExecutor.CommitTransaction();
   }
   return number;
  }

А как потом вернуть из веб-сервиса, есть и в исходном примере. 

Спасибо, Александр! 

Показать все комментарии