Вопрос
Вызов хранимой процедуры из веб-сервиса.
Ответ
Создайте схему исходного кода:
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"; } } } } }
16 апреля 2019 17:08
Добрый день!
Приведите, пожалуйста, если возможно, пример вызова хранимой процедуры которая возвращает результат выполнения и пример обработки результата. Спасибо!
16 апреля 2019 17:31
Вот пример вызова ХП с исходящим параметром:
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; }
А как потом вернуть из веб-сервиса, есть и в исходном примере.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать