PDA

View Full Version : پیدا کردن دلیل خطا



eyelash
چهارشنبه 04 شهریور 1388, 02:38 صبح
وقت به خیر و خسته نباشین
بچه ها من تو صفحم یه Gridviwe گذاشتم و اونا به SqlDataSource Bind کردم، برای دیتا سورس هم امکان Delet, Insert, Updateرا فراهم کردم ولی چون Updata باید از طریقSP احرا می شده کد مربوط به اون را تغیر دادم و کد زیر را تویCommandRow کنترل گریدم نوشتم



protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
this.SqlDataSource1.UpdateCommand = "a1";
this.SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataSource1.Update();
SqlDataSource1.DataBind();
}
}


موقع اجرا SP اجرا می شه و نتایج اون توی DataBase ثبت می شه ولی برنامه با این خطا مواجه می شه:


Procedure or function a1 has too many arguments specified.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Procedure or function a1 has too many arguments specified.

البته استورپروسیجر من فقط یک آرگومان a داره که من اون را توی sqlDataSource به این شکل تعریف کردم



<UpdateParameters>
<asp:ControlParameter ControlID="TextBox1" Name="a" PropertyName="Text"
Type="String" />
</UpdateParameters>


ممنون می شم کمک کنین

eyelash
چهارشنبه 04 شهریور 1388, 14:28 عصر
من هنوز نتونستم مشکل را حل کنم
یه نفر به کمکم کنه :گریه:

z_bluestar
چهارشنبه 04 شهریور 1388, 15:34 عصر
قبل از هر كاري اول command رو Cancel كن شايد برنامه ات جواب بده


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
e.Canceled = true;
this.SqlDataSource1.UpdateCommand = "a1";
this.SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataSource1.Update();
SqlDataSource1.DataBind();
}
}

eyelash
چهارشنبه 04 شهریور 1388, 17:44 عصر
قبل از هر كاري اول command رو Cancel كن شايد برنامه ات جواب بده


ولی e از نوع GridViewCommandEventArgs که canceled نداره!؟

z_bluestar
پنج شنبه 05 شهریور 1388, 12:51 عصر
بهتر از اين Event استفاده كني


protected void GridView1_ItemCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
e.Canceled = true;
this.SqlDataSource1.UpdateCommand = "a1";
this.SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;
SqlDataSource1.Update();
SqlDataSource1.DataBind();
}
}

manutd1
پنج شنبه 05 شهریور 1388, 16:21 عصر
من هم فبلا با sp این مشکل و داشتم که البته کد select بود که یک فیلد و برمیگردوند که در sp کلمه Distinct را اضافه کردم و دیگه این اررور را نداد.



ALTER PROCEDURE dbo.search_p
@SUBJECT nvarchar(MAX)
AS
SELECT Distinct ID,TYPE, MANAGER, SUBJECT, STARTDATE
FROM PROJECTS
WHERE (SUBJECT LIKE N'%' + @SUBJECT + N'%')

مهدی کرامتی
جمعه 06 شهریور 1388, 00:17 صبح
Stored Procedure مربوطه را چک کنید و مطمئن شوید که پارامتر فوق وجود دارد.

همچنین لازم نبود UpdateCommand را از طریق Code Behind به Stored Procedure متصل کنید، این کار از طریق تنظیم کردن مشخصه UpdateCommandType نیز می توانید انجام دهید.


بهتر از اين Event استفاده كني
یادآوری: GridView خود دات نت Event ای بنام ItemCommand ندارد. Event مذکور مربوط به Telerik RadGrid است.