PDA

View Full Version : null بودن مقدار پرامتر خروجی SP در C#



resident
دوشنبه 26 خرداد 1393, 07:23 صبح
سلام. وقت بخیر
من یه SP دارم و میخوام مقدار پارامتر output شو تو C# بخونم.
کدهای زیر رو نوشتم:

protected ObjectParameter GetTotalRecordsCountObjectParameter()
{
return new ObjectParameter("TotalRowsCount", typeof(int));
}

public int CountRecords(string condition,int userId)
{
var recordsCount = GetTotalRecordsCountObjectParameter();
var errorNumber = GetErrorNumberObjectParameter();

GetContext().TotalRowsWithFiltering(GetPrimaryKeyN ame(),GetViewName(),condition,userId, recordsCount, errorNumber);
var errorCode = (int)errorNumber.Value;
if (errorCode != 0)
{
throw ExceptionManager.GetException(errorCode);
}
return (int)recordsCount.Value;
}


اینم SP ام:

create Procedure [general].[TotalRowsWithFiltering]
@ColumnName nvarchar(100),
@viewName nvarchar(100),
@Condition nvarchar(max),
@UserID int ,
@TotalRowsCount int output,
@ErrorNumber int output
as
begin
SET NOCOUNT ON;

Begin Try
if (@Condition is null or @Condition='')
set @Condition='1=1'

DECLARE @ParameterList NVARCHAR(500),@SQLQuery nvarchar(max)
SET @ParameterList = '@TotalRowsReturned INT OUTPUT'
set @SQLQuery='select @TotalRowsReturned=Count('+@ColumnName+') from '+@viewName+' where ' + @Condition
EXECUTE sp_executesql @SQLQuery, @ParameterList, @TotalRowsCount OUTPUT

Set @ErrorNumber=0
End Try
Begin Catch

exec [system].[ErrorLogInsert] '[system].[TotalRecordsWithFiltering]','',@UserID,@ErrorNumber out
set @TotalRowsCount=0
End Catch
End

SP مو که اجرا می کنم پارامتر @TotalRowsCount مقدار داره اما تو برنامه ، مقدارش null است. مشکل کجاست؟

nathan
یک شنبه 16 شهریور 1393, 15:40 عصر
برای من هم همین مشکل وجود داره و نمی دونم باید چه کار کنم؟ کسی نظری نداره؟

nathan
یک شنبه 16 شهریور 1393, 16:55 عصر
من یک راهی رو پیدا کردم برای برگرداندن یک مقدار پس از Insert بدون نیاز به تعریف کردن یک ستون از نوع Identity:


SP:

ALTER PROCEDURE [dbo].[spFrshM_Insert]
(
@Code int,
@Name varchar(250),
@Return int output
)
AS
BEGIN


SET NOCOUNT ON;


DECLARE @MyTableVar table(
Code int,
Name varchar(250)
);


INSERT Table OUTPUT inserted.Code, inserted.Name INTO @MyTableVar VALUES ((Select ISNULL(Max(Code),0) + 1 AS Code from FrshM),@Name)


Set @Return = (Select Code from @MyTableVar)


RETURN



C#:


cmdCommand.Parameters.Add(outputParameter).Directi on = ParameterDirection.Output;
cmdCommand.ExecuteNonQuery();
Console.WriteLine(outputParameter.Value.ToString() );