ورود

View Full Version : سوال: نحوه استفاده از مقدار برگشتی Stored Procedure ؟



zgolestan
یک شنبه 14 خرداد 1391, 03:22 صبح
سلام
من برای Insert کردن توی جدول دیتابیسم ، از ویزارد SqlDataSource استفاده کردم.
کدهای Insert رو توی Stored Procedure نوشتم :

ALTER PROCEDURE sp_empNew
@empNam nvarchar(20),
@empFamil nvarchar(20),
@empSema nvarchar(20),
@empResht nvarchar(30),
@empMadra nvarchar(10),
@empSabegh smallint,
@empEdar bit,
@empAmoozesh bit,
@empCod int OUTPUT
AS
BEGIN
IF( EXISTS( SELECT empCode FROM dbo.tbl_emp
WHERE @empCod = empCode ) )
RETURN -1
INSERT dbo.tbl_emp (empCode, empName, empFamily, empSemat, empReshte, empMadrak, empSabeghe, empEdari, empAmoozeshi)
VALUES (@empCod, @empNam, @empFamil, @empSema, @empResht, @empMadra, @empSabegh, @empEdar, @empAmoozesh)
RETURN 0
END


و بعدش با استفاده از Properties مربوط به SqlDataSource ، تنظیمات DataSource و فراخوانی رو انجام دادم، و جواب هم میده و توی جدول Insert میکنه.
و توی Button هم برای اجرای Stored Procedure و ثبت داده هایی که توی TextBoxها هست ، این کد رو نوشتم :


ProtectedSub InsertButton_Click(sender AsObject, e As System.EventArgs) Handles InsertButton.Click
SqlDataSource1.Insert()
EndSub


حالا سوالم اینه که اگر بخوام توی Button چک بکنه که اگر Stored Procedure ، مقدار Return 0 رو برگشت داده بود ، یه پیغام بده و اگر Return -1 رو برگشت داده بود یه پیغام دیگه بده. چه کدی باید توی Button بنویسم ؟؟؟؟؟؟

clover
یک شنبه 14 خرداد 1391, 08:59 صبح
چه کدی باید توی Button بنویسم ؟؟؟؟؟؟
مستقیما داخل رویداد کلیک Button نمی تونید بنویسید. ابتدا باید یک پارامتر از نوع ReturnValu به لیست پارامترهای دستور Insert اضافه کنید و سپس در رویداد ItemInserted از کنترل SqlDataSource به شکل زیر به مقدار بازگشتی دسترسی پیدا کنید:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MiniCMS %>"
InsertCommand="InsertItem" InsertCommandType="StoredProcedure"
oninserted="SqlDataSource1_Inserted">
<InsertParameters>
<asp:Parameter Name="returnValue" Direction="ReturnValue" Type="Int32" />
</InsertParameters>
</asp:SqlDataSource>

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
int returnValue = Convert.ToInt32(e.Command.Parameters["@returnValue"].Value);
}

دقت کنید که در کنترل SqlDataSource حتما نوع دستور Insert رو مشخص کنید:

InsertCommandType="StoredProcedure"

موفق باشید

zgolestan
یک شنبه 14 خرداد 1391, 12:24 عصر
ممنون از جوابتون
فقط میشه بگین این کد رو کجا باید بنویسم؟

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e){int returnValue = Convert.ToInt32(e.Command.Parameters["@returnValue"].Value);}

clover
یک شنبه 14 خرداد 1391, 14:13 عصر
فقط میشه بگین این کد رو کجا باید بنویسم؟
این کد به زبان #C هست، معادل VB رو در همونجایی که تابع مربوط به رویداد Button رو نوشتید (تگ Script یا Code Behind) بنویسید.

zgolestan
یک شنبه 14 خرداد 1391, 17:19 عصر
این کد به زبان #C هست، معادل VB رو در همونجایی که تابع مربوط به رویداد Button رو نوشتید (تگ Script یا Code Behind) بنویسید.

مرسی. به VB تبدیلش کردم و توی Code Behind نوشتم و جواب داد. تشکرررررر

ProtectedSub SqlDataSource1_Inserted(sender AsObject, e AsSqlDataSourceStatusEventArgs)
Dim RETURN_VALUE AsInteger
RETURN_VALUE = Convert.ToInt32(e.Command.Parameters("@RETURN_VALUE").Value)
If RETURN_VALUE = -1 Then
Label1.Text = "کد پرسنلی تکراری است"
Else
Label1.Text = "ثبت شد"
EndIf
EndSub


اینم کد مربوط به SqlDataSource هست :

<asp:SqlDataSourceID="SqlDataSource1"runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" InsertCommand="sp_empNew" ProviderName="<%$ ConnectionStrings:ApplicationServices.ProviderName %>"InsertCommandType="StoredProcedure"OnInserted="SqlDataSource1_Inserted">
<InsertParameters>
<asp:ControlParameterControlID="empCode"Name="empCod"PropertyName="Text"/>
.
.
.
.
<asp:ParameterDirection="ReturnValue"Name="RETURN_VALUE"Type="Int32"/>
</InsertParameters>
</asp:SqlDataSource>


ممنون...