قبل از پاسخ به سوال شما :
معمولا برای استخراج تک مقدار از فانکشن استفاده می کنن که پیاده سازی فانکش عملکرد مورد نظر شما بصورت زیر هستش
Create FUNCTION MaxID()
RETURNS int
AS
BEGIN
Declare @Out int
Set @Out=(select Max(ID) From UserData)
RETURN @Out
END
کد مورد استفاده در برنامه
int? ID = datacontext.MaxID();
بازگشت مقدار از پروسیجر با دستور سلکت صورت می گیره و از نوع
ISingleResult<LastIDResult>
هستش که اگه بخوایم به این صورت پروسیجر رو استفاده کنیم کد نوشته شده در سمت برنامه بصورت زیر :
ISingleResult<LastIDResult> Maxid = datacontext.LastRecordID();
foreach (LastIDResult item in Maxid)
{
MessageBox.Show(item. LastRecID.ToString());
}
و پروسیجر به شکل :
Create PROCEDURE LastRecordID
AS
BEGIN
select Max(ID) As LastRecID From UserData
END
خواهد بود .
در پاسخ به سوال شما برای اینکه یه مقدار کاهش کد داشته باشیم و بصورت فوق کد نویسی نکنیم متغیر رو به شکل کال بای ریفرنس (فراخوانی با ارجاع) به پروسیجر ارسال می کنیم که داخل پروسیجر مقدارش عوض شه و از اون مقدار در برنامه استفاده کنیم. این نوع فراخوانی نیاز به مقدار دهی متغیر قبل از ارسال داره ، به همین خاطر قبل از ارسال مقدار منفی یک بهش نسبت داده شده . اگر هیچ رکوردی در جدول وجود نداشته باشه مقدار بازگشتی از پروسیجر نال خواهد بود . در نتیجه باید بعد از فراخوانی مقدار متغیر رو بررسی کرد که نال نباشه بعد ازش استفاده کرد .
در پایان از دوستان خواهش می کنم هر جاش رو اشتباه گفتم اصلاح کنن.