У меня есть хранимая процедура, которая добавляет новую запись в таблицу и ВЫВОДИТ идентификатор (как nvarchar (255)) в @NewID. Я могу просто выполнить процедуру для бэкэнда asp.net с помощью Postman, но я не могу получить ВЫВОД... У меня есть несколько хранимых процедур, и все они работают нормально, просто выясните, как захватить ВЫВОД в методе публикации С#. .
Для пояснения: я пытаюсь выполнить хранимую процедуру и зафиксировать выходные данные, используя инфраструктуру сущностей через веб-службу. Это выполняется на сервере Azure Mobile Service asp.net.
Тестирование хранимой процедуры
ALTER PROCEDURE [dbo].[AddEnclosureKey]
(
-- Add the parameters for the stored procedure here
@SpecItemID nvarchar(255),
@EnclosureType varchar(3) = 'XXX',
@Comments varchar(50),
@Elevation varchar(50),
@ProvidedBy varchar(50),
@InstalledBy varchar(50),
@SiteID nvarchar(255) = 'CE359D6F-490B-45E4-BA14-72D20AB757FD',
@NewID nvarchar(255) OUTPUT
)
AS
IF (@SpecItemID is not null or @SiteID is not null)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- insert
INSERT INTO dbo.SiteEnclosureKey(EnclosureKeyComments,EnclosureKeyType, EnclosureKeyElevation,EnclosureKeyProvidedBy,EnclosureKeyInstalledBy,EnclosureKeyItemID,EnclosureKeySiteID)
VALUES (@Comments,IIF(@EnclosureType = 'XXX',dbo.AutoEnclosureKeyType(@SpecItemID),@EnclosureType), @Elevation, @ProvidedBy, @InstalledBy,@SpecItemID,@SiteID);
IF @@IDENTITY > 0
SELECT @NewID = Id FROM dbo.SiteEnclosures WHERE EnclosureID = @@IDENTITY;
ELSE
SET @NewID = null
END
ELSE
BEGIN
RETURN 0
END
Пользовательский API-контроллер
[MobileAppController]
public class AddEnclosureKeyController : ApiController
{
// POST api
[HttpPost, Route("api/addenclosurekey")]
public string Post(string item, string type="XXX", string comments="", string elevation="", string providedby="", string installedby="", string site="CE359D6F-490B-45E4-BA14-72D20AB757FD")
{
using (MIIToolsContext context = new MIIToolsContext())
{
//get the database from the context
var database = context.Database;
//create the sql statement
var param1 = new System.Data.SqlClient.SqlParameter("@SpecItemID", item);
var param2 = new System.Data.SqlClient.SqlParameter("@EnclosureType", type);
var param3 = new System.Data.SqlClient.SqlParameter("@Comments", comments);
var param4 = new System.Data.SqlClient.SqlParameter("@Elevation", elevation);
var param5 = new System.Data.SqlClient.SqlParameter("@ProvidedBy", providedby);
var param6 = new System.Data.SqlClient.SqlParameter("@InstalledBy", installedby);
var param7 = new System.Data.SqlClient.SqlParameter("@SiteID", site);
var param8 = new System.Data.SqlClient.SqlParameter()
{
ParameterName = "@NewID",
Direction = System.Data.ParameterDirection.Output,
SqlDbType = System.Data.SqlDbType.NVarChar,
Size = 255
};
//var result = database.SqlQuery<string>("dbo.AddEnclosureKey @SpecItemID , @EnclosureType , @Comments , @Elevation , @ProvidedBy , @InstalledBy , @SiteID , @NewID OUTPUT", param1, param2, param3, param4, param5, param6, param7, param8);
//return NewID.ToString();
database.ExecuteSqlCommand("EXEC dbo.AddEnclosureKey @SpecItemID , @EnclosureType , @Comments , @Elevation , @ProvidedBy , @InstalledBy , @SiteID , @NewID OUTPUT", param1, param2, param3, param4, param5, param6, param7, param8);
return (string)param8.Value ?? "boo";
}
}
}
Id
в базе данных? может быть у вас проблемы с кастингом. 2. ЗаменитеSELECT @NewID =
наSET @NewID =
и проверьте. - person amiry jd   schedule 21.02.2018SET
? - person amiry jd   schedule 21.02.2018