【发布时间】:2022-10-19 23:39:46
【问题描述】:
在 ASP.NET Core 6 Web API 中,我在 Sybase DB 中有这个存储过程。存储过程将用于根据条件附加名称。
存储过程:
CREATE PROCEDURE dbo.sp_employees
@psAggregatorId varchar(80),
@psAcctNo varchar(20),
@psAppend2Name varchar(40),
@rsErrorText varchar(255) OUTPUT
AS
DECLARE
@nRC int
,@nPtid numeric(12,0)
,@sAcctType char(2)
,@nRimNo int
,@nClassCode int
,@nBranchNo int
,@nRsmId int
,@sOdOption char(1)
,@nEmplId int
,@nChannelId int
,@sTitle1 varchar(60)
,@sTitle2 varchar(60)
,@sAggregatorName varchar(200)
/* Default values */
SELECT @nEmplId = 0,
@nChannelId = 295
IF EXISTS (SELECT 1 FROM database1..employee_transfer_account
WHERE acct_no = @psAcctNo AND renamed = 'Y')
BEGIN
SELECT @rsErrorText = @psAcctNo + " has been previously renamed"
RETURN -2000000
END
SELECT @sAggregatorName = aggregator_name
FROM database1..employee_transfer_aggregator
WHERE aggregator_name = @psAggregatorId
IF @@rowcount = 0
BEGIN
SELECT @rsErrorText = "System could not retrieve Merchant record"
RETURN -2000011
END
SELECT
@sAcctType = acct_type,
@nRimNo = rim_no,
@nClassCode = class_code,
@nBranchNo = branch_no,
@nRsmId = rsm_id,
@sOdOption = od_option,
@sTitle1 = title_1,
@sTitle2 = title_2
FROM
database1..dp_acct
WHERE
acct_no = @psAcctNo
IF @@rowcount = 0
BEGIN
SELECT @rsErrorText = "System could not retrieve record"
RETURN -2000012
END
select @sTitle1 = @sAggregatorName + ' - '
select @sTitle2 = @psAppend2Name
exec @nRC = sp_tpi_acct
'Update' -- @psAction
,@nRimNo
,@psAcctNo
,@sAcctType
,@nClassCode
,@nBranchNo
,@nRsmId
,@sTitle1 -- @psTitle1
,@sTitle2 -- @psTitle2
,@sOdOption
,@nEmplId
,@nChannelId
,@rsErrorText output
if @nRC != 0 or @@error != 0
begin
select @rsErrorText = convert(varchar(20),@nRC) + "|" + @rsErrorText
return -2000013
end
-- Flag account flagged as renamed
update database1..employee_transfer_account
set renamed = 'Y'
,rename_dt = getdate()
,virtual_name = @sTitle1 + ' ' + @sTitle2
where acct_no = @psAcctNo
if @@rowcount = 0
begin
select @rsErrorText = "System could not update managed account record"
return -2000014
end
return 1
如果成功则显示
@psAcctNo appended successfully with @psAppend2Name
但是如果失败或者重命名='Y',那么它应该显示@rsErrorText的内容。
我已经在我的 ASP.NET Core Web API 中编写了代码。
回复:
public class Response<T>
{
public bool Success { get; set; }
public T Data { get; set; }
public Response(bool success, T data)
{
Success = success;
Data = data;
}
public Response()
{
}
}
DTO:
public class AppendRequestDto
{
[Required]
public string AcctNumber { get; set; }
[Required]
public string AppendName { get; set; }
}
服务:
public Response<object> AppendAccount(AppendRequestDto model)
{
var response = new Response<object>();
try
{
using (AseConnection con = new AseConnection(aseConnection))
{
AseCommand cmd = new AseCommand("sp_employees", con);
cmd.CommandType = CommandType.StoredProcedure;
var aggregatorId = CodeUsername.Username;
cmd.Parameters.AddWithValue("@psAggregatorId", aggregatorId);
cmd.Parameters.AddWithValue("@psAcctNo", model.AcctNumber);
cmd.Parameters.AddWithValue("@psAppend2Name", model.AppendName);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
response.Data = $"{model.AcctNumber} appended successfully with {model.AppendName}";
response.Success = true;
}
catch (Exception ex)
{
_logger.Error($"An error occurred " + ex.ToString());
response.Success = false;
}
return response;
}
如前所述,我已经编写了成功时处理的代码。如果成功,它将显示在响应中
response.Data = $"{model.AcctNumber} appended successfully with {model.AppendName}";
response.Success = true;
但是,当它失败或重命名 = 'Y' 时,如何调整代码,然后让它显示 .NET Core 中存储过程中@rsErrorText 的内容作为响应的一部分?
请注意,@rsErrorText 是必需的。
谢谢
【问题讨论】:
-
根据您的结构,您可能需要向
AppendRequestDto添加一个字段以接受@rsErrorText。另外,你是否有一定的条件来判断成功与否?如果能得到这个条件,是否可以直接在AppendAccount中判断?
标签: c# asp.net-core asp.net-web-api stored-procedures ado.net