Вопрос
Вызов хранимой процедуры из веб-сервиса.
Ответ
Создайте схему исходного кода:
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;
}А как потом вернуть из веб-сервиса, есть и в исходном примере.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать