Я пытаюсь (мне нужно) создать небольшое веб-приложение для управления некоторыми процессами ETL, давая моим пользователям несколько кнопок для просмотра SQL данных сервера и запуска нескольких пакетов служб SSIS.
I смог обработать создание сайта с помощью C# ASP. NET MVC учебника CRUD ЗДЕСЬ (очень полезно) и показать нужные мне данные.
Затем я создал модель данных, указывающую на мои таблицы и хранимые процедуры, и теперь мне «только» нужно создать базовую страницу c с текстовым полем для вставки параметра и кнопки для каждой хранимой процедуры, которая мне нужна для запуска.
Каждая хранимая процедура будет запускать пакет служб SSIS, которому пока не требуется возвращать какое-либо значение.
РЕДАКТИРОВАТЬ: мне удалось собрать дополнительную информацию и изменить код вот так
Контроллер
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Italist_Admin.Models;
using System.Data.SqlClient;
using System.Data.Entity.Core.Objects;
namespace Project.Controllers
{
public class ToolsController : Controller
{
private ProjectEntities db = new ProjectEntities();
public ActionResult Index()
{
ProjectEntities entities = new ProjectEntities();
//return View(entities.SPU_RUNSSIS(""));
return View();
}
[HttpPost]
public ActionResult ExecExportOnly(string txtPeriod) // to get the Student Details
{
ProjectEntities entities = new ProjectEntities();
entities.SPU_RUNSSIS(parameter);
return View();
}}}
Вид
@{
ViewBag.Title = "Tools";
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Export Only</title>
</head>
<body>
<div>
@using (Html.BeginForm("ExecExportOnly", "Tools", FormMethod.Post))
{
<span>Period:</span> @Html.TextBox("txtPeriod")
<input type="submit" value="Run Export" />
}
</div>
</body>
</html>
Модель
public virtual int SPU_RUNSSIS(string parameter)
{
var periodParameter = period != null ?
new ObjectParameter("parameter", parameter) :
new ObjectParameter("parameter", typeof(string));
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SPU_RUNSSIS", parameterParameter);
}
Я добавил тайм-аут в модель, потому что при выполнении, через 30 секунд, он отказывал из-за тайм-аута.
При выполнении этого кода упакованный сбой ( SqlException: пакет не прошел. Проверьте журналы каталога служб SSIS для получения дополнительной информации ) примерно через 30 секунд в любом случае и В КОНЦЕ 30 секунд, которые я вижу в SQL Трассировка следующего сообщения
RP C: Завершено - exe c [dbo]. [SPU_RUNSSIS] @ parameter = 'parametervalue'
Если я вручную запустил приведенный выше код, он сработает.
Я почти на месте, но кажется, что не могу найти правильный способ инициировать выполнение хранимой процедуры в какой-то момент.
Заранее спасибо за любые предложения