Как я могу вызвать хранимую процедуру, возвращающую и таблицу, и оператор return в контроллере в mvc entity Framework 4?
У меня есть хранимая процедура, которая возвращает таблицу, а также возвращает состояние ошибки, которое является int. Как я могу вызвать эту хранимую процедуру из контроллера в MVC.
(Я использую Entity Framework 4)
Stored Procedure :
CREATE PROC [dbo]. [Sp_list24](@emp dbo.list READONLY, вывод @ error int) КАК НАЧАТЬ НАЧАТЬ, ПОПРОБУЙТЕ ОТКРЫТЬ @Error_State INT
SET @Error_State = 1
ОБНОВЛЕНИЕ dbo.employee SET mobile=mobile+11 ГДЕ eid=2 ВЫБРАТЬ * ОТ @emp set @error=@Error_State; выберите @error
END TRY BEGIN CATCH SET @error = ERROR_STATE () выберите @error
END CATCH END GO
Здесь "список" - это определяемый пользователем тип таблицы для передачи табличного параметра.
CREATE TYPE [dbo].[list] AS TABLE(
[eid] [int] NULL,
[name] [nvarchar](50) NULL,
[age] [int] NULL
)
В контроллере:
[HttpPost]
public JsonResult Onclick(int id)
{
using (examemployeeEntities1 eee = new examemployeeEntities1())
{
//Create table value parameter
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
dt.Columns.Add("eid");
dt.Columns.Add("name");
dt.Columns.Add("age");
dt.Rows.Add(1, "john", 21);
dt.Rows.Add(2, "albert", 22);
dt.Rows.Add(3, "martin", 33);
SqlParameter emp1 = new SqlParameter("@emp", SqlDbType.Structured);
emp1.Value = dt;
emp1.TypeName = "list";
//eee.Database.ExecuteSqlCommand("EXEC sp_list4 @emp",emp1);
var resp = eee.Database.SqlQuery<Item>("exec sp_list20 @emp", emp1);
return Json(resp.ToList());
}
}
In view:
идентификатор абзаца "sdf" и идентификатор кнопки "asd"!!!!!
script:
$("#asd").click(function () {
var a = 1;
var content = "<table><th>Id</th><th>Name </th><th>Age</th></tr>";
$.ajax({
type: 'POST',
url: '/Home/Onclick/',
data: { 'id': a },
datatype: 'json',
success: function (data) {
$.each(data, function (i, item) {
content += "<tr>";
content += "<td style=\"background-color:White\">" + data[i].eid + "</td>";
content += "<td style=\"background-color:White\">" + data[i].name + "</td>";
content += "<td style=\"background-color:White\">" + data[i].age + "</td>";
content += "</tr>";
});
content += "</table>";
$('#sdf').html(content);
alert("success");
},
error: function () {
}
});
});
Результат отображает:
Идентификатор Имя Возраст
1 Иоанна 21
2 Альберт 22
3 марта 23
Он не возвращает @Error_State. Я также пытался использовать select @Error_State. Но это также не работает. Как я могу вызвать хранимую процедуру, возвращающую и таблицу, и оператор return?
2 ответа
Выходного параметра достаточно, чтобы его решить.. попробуйте включить его
var outParam = new SqlParameter();
outParam.ParameterName = "error";
outParam.SqlDbType = SqlDbType.Int;
outParam.Direction = ParameterDirection.Output;
var resp = eee.Database.SqlQuery<Item>("exec sp_list23 @emp,@error OUT", emp1,outParam);
var error = (int)outParam.Value;
Вы должны использовать параметр OUTPUT хранимой процедуры. На MSDN есть учебное пособие: использование хранимой процедуры с выходными параметрами