ورود

View Full Version : پیغام خطای No overload for method 'USSD_100' takes 1 arguments



aria2006
یک شنبه 19 شهریور 1396, 13:37 عصر
سلام دوستان
من یک پروسچر به صورت زیر دارم که یه شناسه قبض میگیره و در خروجی شناسه پرداخت و مبلغ را پس میده.


create or Replace PROCEDURE ussd_100(INSHENASEHG IN VARCHAR2,
outSHENASEHP out varchar2,
outamt out number)
IS
Begin

Select a_SHENASEHP,nvl(a_amtkol,0)-nvl(a_cred,0) InTo outSHENASEHP,outamt From A_ghabz

Where A_SHENASEHG=INSHENASEHG AND A_YEAR=95 AND A_ghabz=1;
End ;
/
Commit;
Show Errors;



حالا اومدم این پروسچر رو در اکشن زیر فراخوانی کردم:


public ActionResult SearchEshtrak(string A_SHENASEHG)
{

return db.USSD_100(A_SHENASEHG).ToString();


}




که خطای زیر رو میده
No overload for method 'USSD_100' takes 1 arguments

دوستان کسی چاره کار رو میدونه؟؟ با تشکر

aria2006
یک شنبه 19 شهریور 1396, 19:17 عصر
از اساتید عزیز خواهش میکنم راهنمایی بفرمایند... این یک فراخونی تابع است چون این حقیر بار اولمه که دارم تحت وب برنامه مینویسم در این مرحله گیر کردم ولی مطمئنا برای دوستان باتجربه نباید زیاد سخت باشه...

Moien Tajik
دوشنبه 20 شهریور 1396, 09:22 صبح
برای استفاده از SP در Entity Framework به این شکل عمل کنید : https://stackoverflow.com/a/39063015
وقتی خود EF هست لازم نیست دستوراتون رو با SP بنویسید ، بهتره از خود متد های Dbset و DbContext استفاده کنید .

aria2006
دوشنبه 20 شهریور 1396, 14:06 عصر
برای استفاده از SP در Entity Framework به این شکل عمل کنید : https://stackoverflow.com/a/39063015
وقتی خود EF هست لازم نیست دستوراتون رو با SP بنویسید ، بهتره از خود متد های Dbset و DbContext استفاده کنید .


دوست عزیز مدل ارتباط من با دیتابیس اوراکل کدفرست نیست و من از طریق گزینه EF Designer from database به پایگاه داده کانکت شدم و جداول موردنیازمو اضافه کردم.با این تفاسیر آیا بنده نیز باید از متدهای Dbset و DbContext استفاده کنم؟؟
حال اگر مشکلی که در فراخوانی پروسچر USSD_100 دارم برطرف بشه سریعتر به نتیجه برسم !؟

aria2006
سه شنبه 21 شهریور 1396, 13:32 عصر
دوستان من اکشن رو بصورت زیر تغییر دادم و ظاهرا پیغام خطای مربوط به فراخوانی پروسچر از بین رفت:



public ActionResult SearchEshtrak(string A_SHENASEHG,ObjectParameter oUTSHENASEHP,ObjectParameter oUTAMT)
{


return View("SearchEshtrak", db.USSD_100(A_SHENASEHG, oUTSHENASEHP, oUTAMT));
}



اما مشکل جدیدی که بوجود اومده اینه که اکشن من از کار افتاده و یک دکمه submit دارم که بعد از فشردنش اصلا هیچ کاری نمیکنه و وارد اکشن فوق نمیشه در حالی که اگه این دوتا پارامتر ObjectParameter oUTSHENASEHP,ObjectParameter oUTAMT را حذف کنم دوباره اکشن کار میکنه.... نمیدونم چرا؟

Moien Tajik
سه شنبه 21 شهریور 1396, 14:20 عصر
جواب دادن به سوال شما مشکل هست چون Type پارامترهاتون معلوم نیست دقیق چی هستن و از کجا میان و همچنین تعداد آموزش هایی که از Oracle تو mvc استفاده میکنن کم هست و به همین خاطر Reference های زیادی نداره .

برای مشکلتون که میگید بعد از زدن submit وارد اکشن نمیشه ، چک کنید که همه ی پارامتر های ورودی اکشن رو بدرستی پاس میدید ، همچنین در ابتدای اکشن Breakpoint بزارید چک کنید مقدار های دریافت شده رو .

aria2006
چهارشنبه 22 شهریور 1396, 09:08 صبح
جواب دادن به سوال شما مشکل هست چون Type پارامترهاتون معلوم نیست دقیق چی هستن و از کجا میان و همچنین تعداد آموزش هایی که از Oracle تو mvc استفاده میکنن کم هست و به همین خاطر Reference های زیادی نداره .

برای مشکلتون که میگید بعد از زدن submit وارد اکشن نمیشه ، چک کنید که همه ی پارامتر های ورودی اکشن رو بدرستی پاس میدید ، همچنین در ابتدای اکشن Breakpoint بزارید چک کنید مقدار های دریافت شده رو .


سلام
من در اصل به یک مقدار ورودی در این اکشن نیاز دارم که از نوع string هستش. دو نوع داده دیگر که از نوع objectparameter هستند و در اصل خروجی های پروسچرند ، صرفا بخاطر اینکه پیغام خطای پروسچر ussd_100 از بین بره اونجا اضافه کردم(حالا غلط یا درستشو نمیدونم، چون اگه نباشه پیغام خطای آرگومان میده) و اکسن فعلی من اینه:


public ActionResult SearchEshtrak(string iNSHENASEHG, ObjectParameter oUTSHENASEHP, ObjectParameter oUTAMT)
{

return View("SearchEshtrak", db.USSD_100(iNSHENASEHG,oUTSHENASEHP,oUTAMT));

}


حالا کدهای ویو ایندکس من که با زدن دکمه submit قراره یه مقدار استرینگ(شناسه) رو پاس بدن به ویو سرچ اشتراک بصورت زیره: ولی مشکل اینه با دو پارامتری که از نوع objectparameter هستن اضافه کردم دیگه وارد ویو سرچ اشتراک نمیشه....




@using (Ajax.BeginForm("SearchEshtrak", "Home", new AjaxOptions { UpdateTargetId = "divAjax", HttpMethod = "Post", InsertionMode = InsertionMode.Replace, Url = "/Home/SearchEshtrak" }))
{


<html>
<head>

<title>search eshtrak </title>
</head>

<body>
<br />
<br />
<br />
<br />

<div>
شناسه قبض : <input type="text" name="A_SHENASEHG" />
</div>

<div>
<input type="submit" name="searchkey" value="جستجو" />

</div>

</body>

</html>


<div id="divAjax"> </div>


@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

}

چرا ؟؟ نمیدونم؟؟؟!!

aria2006
یک شنبه 26 شهریور 1396, 14:09 عصر
سلام. متاسفانه اونجور که ادم انتظار داره راه حل و یا راهنمایی مناسبی از سایت برنامه نویس منعکس نمیشه. حالا یا دوستان خیلی سرشون شلوغه، یا از حوصله جمع خارجه .... من مشکلی رو در بالا مطرح کرده بودم که برمیگشت به فراخوانی پروسچر دیتابیس اوراکل در محیط mvc یا WebApi. که با راهنمایی یکی از دوستان خارج از سایت برنامه نویس مشکل حل شد... و من پاسخ رو اینجا منعکس میکنم تا اگه کسی مشکل من رو داشت زودتر به راه حل مورد نظر برسه..
نحوه فراخوانی پروسچر ائراکل با یک ورودی و دو خروجی


public string GetSearchEshtrak(string A_SHENASEHG)
{


var sample1 = new ObjectParameter("oUTSHENASEHP", typeof(string));
var sample2 = new ObjectParameter("oUTAMT", typeof(int));
var model2 = db.USSD_100(A_SHENASEHG, sample1, sample2).ToString();


return (sample1).ToString();


}



فراخوانی تابع بالا مشکلی نداره و هنگام trace کردن دو تا خروجی برمیگردونه که قابل مشاهده ست...
فقط مشکلی که باقی مونده چون این کار برای وب سرویس (web Api) داره انجام میشه و خروجی بصورت xml باید مثلا در کروم یا فایرفکس دیده بشه وقتی مثلا sample1 ریترن میشه در خروجی مرورگر پیغام زیر میاد:


<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">System.Data.Entity.Core.Objects.ObjectParameter</string>


در حالی باید مثلا عددی مثل 101050199 بعنوان خروجی وب سرویس باشد....
حال برای اینکه بتونم خروجی وب سرویس بالا رو بصورت صحیح ریترن کنم چجوری باید کد زد؟ ممنون

Moien Tajik
یک شنبه 26 شهریور 1396, 17:28 عصر
باز هم میگم Type اون model2 معلوم نیست چی هست و چه Property هایی داره که بشه درست راهنمایی کرد .

این رو امتحان کنید برای return :
return Ok(model2);

aria2006
یک شنبه 26 شهریور 1396, 18:35 عصر
باز هم میگم Type اون model2 معلوم نیست چی هست و چه Property هایی داره که بشه درست راهنمایی کرد .

این رو امتحان کنید برای return :
return Ok(model2);

سلام.مهندس model2 اینجا هیچ نقشی نداره و خروجی های ما sample1 و sample2 هستند(که دو آیتم عددی هستند). اصلا برای اینکه موضوع شفاف تر بشه کد رو بصورت زیر اصلاح میکنم:


public string GetSearchEshtrak(string A_SHENASEHG)
{


var sample1 = new ObjectParameter("oUTSHENASEHP", typeof(string));
var sample2 = new ObjectParameter("oUTAMT", typeof(int));

return (db.USSD_100(A_SHENASEHG, sample1, sample2).ToString());


}


خروجی مرورگر الان این پیام میاد:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">-1</string>


پیشنهاد شما رو یعنی return ok رو هم تست کردم از کلمه ok ایراد میگیره.
The name 'ok' does not exist in the current context

ممنون بابت وقتی که میگذارید. با این تفاسیر پیشنهاد شما برای نحوه نوشتن return که بتونه دو تا خروجی پروسچر رو در مرورگر نمایش بده چی هستش؟

Moien Tajik
یک شنبه 26 شهریور 1396, 19:04 عصر
پیشنهاد شما رو یعنی return ok رو هم تست کردم از کلمه ok ایراد میگیره.
اون Ok حالت Case Sensitive داره و O باید Capital باشه .

جنس خروجی های کوئریتون چی هستش ؟ int هست یا string ؟ باید معلوم بشه که چه خروجیی دارید میگیرید که بشه راهنمایی درست کرد !

میتونید یک مدل بسازید ، 1 Property داشته باشه که بعد از پیدا کردن نتیجه کوئری ها ، اون ها رو داخل Model بریزید و اون مدل رو برگردونید .


public class YourModel
{
public string result { get; set; }
}


public ActionResult YourAction(string A_SHENASEHG)
{
var sample1 = new ObjectParameter("oUTSHENASEHP", typeof(string));
var sample2 = new ObjectParameter("oUTAMT", typeof(int));
var res = db.USSD_100(A_SHENASEHG, sample1, sample2).ToString();

var yourModel = new YourModel
{
result = res
};

return Ok(yourModel);
}

aria2006
دوشنبه 27 شهریور 1396, 13:45 عصر
مهندس من طبق فرمایش شما یک کلاس تعریف کردم و مجددا برنامه رو اجرا کردم ولی متاسفانه بازم خروجی نداشت.در تصویر زیر من برنامه رو trace کردم مشکل از اونجایی شروع میشه که بعد از فراخوانی پروسیچر مقداری که داخل متغیر res ریخته میشه (1-) هست در حالی که جواب دو مقدار عددیه(sample1وsample2) که میتونه بصورت string بازگشت داده بشه.اون کلمه Ok هم با حرف بزرگ نوشتم ولی بازم همون خطای قبل رو میداد. تصویر رو ملاحظه بفرمایید:

146433


و خروجی که در مرورگر میاد :


146434


؟؟؟ نمیدونم چرا اینجوری نمایش میده ؟؟!!

aria2006
سه شنبه 28 شهریور 1396, 07:25 صبح
با تشکر از راهنمایی های جناب Moien Tajik (http://barnamenevis.org/member.php?302441-Moien-Tajik) پاسخ صحیح بدین صورت است:

public string GetSearchEshtrak(string A_SHENASEHG)
{


var sample1 = new ObjectParameter("oUTSHENASEHP", typeof(string));
var sample2 = new ObjectParameter("oUTAMT", typeof(int));


var res = db.USSD_100(A_SHENASEHG, sample1, sample2).ToString();
output1.sample1 = sample1;
output1.sample2 = sample2;

return ("شناسه پرداخت :"+output1.sample1.Value +"///////" +" مبلغ :" + output1.sample2.Value.ToString());


}



اینم از کلاس


public class Sp_Result
{

public ObjectParameter sample1 { get; set; }


public ObjectParameter sample2 { get; set; }


}

melikarezaei
شنبه 29 تیر 1398, 16:29 عصر
خطای Error 1 No overload for method 'UpdateQuery' takes 2 arguments
رو من چجوری از بین ببرم و حل کنم ؟

melikarezaei
شنبه 29 تیر 1398, 16:33 عصر
:افسرده::افسرده::افسرده: