【发布时间】:2020-10-10 19:51:31
【问题描述】:
我有以下存储过程的代码。我只想返回消息,如果数据库中已经存在它应该返回消息,否则重复插入数据并显示消息完成
SQL 存储过程
ALTER PROCEDURE [dbo].[SP_AddProjectManager]
-- Add the parameters for the stored procedure here
@ProjectId int,
@EmployeeId int,
@uid nvarchar(128)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @Organization_Id int = (select Organization_Id from Employees where User_Account_Id = @uid);
declare @Office_Id int = (select Office_Id from Employees where User_Account_Id = @uid);
declare @output nvarchar(50);
declare @dup int =(select count(*) from Project_Managers where EmployeeId=@EmployeeId and ProjectId=@ProjectId);
if(@dup=0)
begin
INSERT INTO [dbo].[Project_Managers]
([EmployeeId]
,[ProjectId]
,[User_Account_Id]
,[Office_Id]
,[Organization_Id]
,[CreatedOn]
,[UpdatedOn]
,[CreatedBy]
,[UpdatedBy]
,[Is_active]
)
VALUES(@EmployeeId,@ProjectId,@uid,@Office_Id,@Organization_Id,GETDATE(),GETDATE(),@uid,@uid,1);
SET @output= 'Done';
end
else
begin
SET @output ='Repeated';
end
return convert(varchar(10),@output)
END
无法返回它在错误后显示的字符串值:
Msg 245, Level 16, State 1, Procedure SP_AddProjectManager, Line 43 [Batch Start Line 2]
Conversion failed when converting the varchar value 'Repeated' to data type int.
C# 代码
public static string Add_ProjectManager(ProjectManagers PM)
{
using (SqlCommand cmd_insertion = new SqlCommand())
{
conn c = new conn();
SqlConnection _Con = c.conect();
cmd_insertion.Connection = _Con;
_Con.Open();
cmd_insertion.CommandType = System.Data.CommandType.StoredProcedure;
cmd_insertion.CommandText = "SP_AddProjectManager";
cmd_insertion.Parameters.AddWithValue("@ProjectId", PM.ProjectId);
cmd_insertion.Parameters.AddWithValue("@EmployeeId", PM.EmployeeId);
cmd_insertion.Parameters.AddWithValue("@uid", PM.userId);
SqlParameter retval = cmd_insertion.Parameters.Add("@output", SqlDbType.VarChar);
retval.Direction = ParameterDirection.ReturnValue;
cmd_insertion.ExecuteNonQuery();
string status = (string)cmd_insertion.Parameters["@output"].Value;
_Con.Close();
cmd_insertion.Parameters.Clear();
return status;
}
}
【问题讨论】:
-
您将
@output声明为int,而您的意思可能是nvarchar(...)。投票结束这是一个错字。 -
它是一个存储过程,它只能返回一个int...你可以选择你的结果或传入一个OUTPUT参数并设置它。
-
即使在使用 nvarchar 后也显示相同的错误
-
亲爱的,我已经更新了代码它也有同样的错误
-
如果您愿意,可以使用 print(output) 并在消息选项卡中查看
标签: c# sql asp.net sql-server stored-procedures