PDA

View Full Version : مشکل با StoredProcedure



e_ghadimi
پنج شنبه 17 دی 1388, 18:21 عصر
سلام
من یک storedProcedure دارم که توی اون می خوام با دادن Id یک کارمند نام و نام خانوادگی شخص به عنوان خروجی برگردونده بشه که اینطوری نوشتمش :
USE [Northwind]
GO
createproc [dbo].[sp_person]
@Id int,
@LName nvarchar(20)output,
@FName nvarchar(25)output
as
select @LName=LastName,@FName=FirstName from Employees where EmployeeID=@Id


وکدی که توی برنامم برای گرفتن خروجی از این رویه نوشتم هم به صورت زیره ولی این کد جواب نمی ده می خواستم ببینم مشکل از کد یا رویه ذخیره شده ؟


SqlConnection cn = newSqlConnection("SERVER=LocalHost;DATABASE=Northwind;Integrated Security=True;");
SqlCommand cm = newSqlCommand();
cm.Connection = cn;
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "sp_person";

cm.Parameters.Add("Id", SqlDbType.Int);
cm.Parameters.Add("FName", SqlDbType.NVarChar, 20);
cm.Parameters["FName"].Direction = ParameterDirection.Output;
cm.Parameters.Add("LName", SqlDbType.NVarChar, 25);
cm.Parameters["LName"].Direction = ParameterDirection.Output;
cm.Parameters["Id"].Value = int.Parse(textBox1.Text);
cn.Open();
SqlDataReader dr ;
dr = cm.ExecuteReader();
while (dr.Read())

{

if (dr[0] != DBNull.Value)

{

textBox2.Text = dr.GetString(0);

}

if (dr[1] != DBNull.Value)

{

textBox3.Text = dr.GetString(1);

}

}

dr.Close();

cn.Close();

}

bashiry
جمعه 18 دی 1388, 10:15 صبح
خوب الان مشكل چيه؟
اطلاعات برگردونده نميشه؟

e_ghadimi
جمعه 18 دی 1388, 10:50 صبح
خوب الان مشكل چيه؟
اطلاعات برگردونده نميشه؟



بله دقیقا مشکل همینه که هیچ مقداری برگردونده نمی شه .

bashiry
جمعه 18 دی 1388, 13:57 عصر
بله دقیقا مشکل همینه که هیچ مقداری برگردونده نمی شه .

به نظر من شما توي خود محيط Sql Query Analysor كوئري بده به پروسيجر ببين چيزي بهت برميگردونه يا نه

اين راه رو امتحان كن ببين چي ميشه

e_ghadimi
جمعه 18 دی 1388, 19:04 عصر
به نظر من شما توي خود محيط Sql Query Analysor كوئري بده به پروسيجر ببين چيزي بهت برميگردونه يا نه

اين راه رو امتحان كن ببين چي ميشه


موقع query زدن جواب می ده ولی تو کد جواب نمی ده.

bashiry
شنبه 19 دی 1388, 09:22 صبح
خوب اين تابعي هست كه بنده ازش توي پروژه هام براي اجراي پروسيجر استفاده مي كنم:




Public Shared Function RunSQL(ByVal sql As String, ByVal cnnStr As String) As DataTable
Dim selectConnection As New SqlConnection(cnnStr)
Using connection2 As SqlConnection = selectConnection
Dim adapter As New SqlDataAdapter(sql, selectConnection)
If (Not adapter.SelectCommand Is Nothing) Then
adapter.SelectCommand.CommandTimeout = selectConnection.ConnectionTimeout
End If
Dim dataTable As New DataTable
Try
selectConnection.Open()
adapter.Fill(dataTable)
ModuleGeneral.SQLCommandStatus = True
Catch exception As Exception
MessageBox.Show(exception.Message)
ModuleGeneral.SQLCommandStatus = False
End Try
selectConnection.Close()
Return dataTable
End Using
End Function


كوئري رو به اين تابع بده . خروجيشو برات توي ديتاتيبل ميريزه

e_ghadimi
شنبه 19 دی 1388, 11:59 صبح
خوب اين تابعي هست كه بنده ازش توي پروژه هام براي اجراي پروسيجر استفاده مي كنم:




Public Shared Function RunSQL(ByVal sql As String, ByVal cnnStr As String) As DataTable
Dim selectConnection As New SqlConnection(cnnStr)
Using connection2 As SqlConnection = selectConnection
Dim adapter As New SqlDataAdapter(sql, selectConnection)
If (Not adapter.SelectCommand Is Nothing) Then
adapter.SelectCommand.CommandTimeout = selectConnection.ConnectionTimeout
End If
Dim dataTable As New DataTable
Try
selectConnection.Open()
adapter.Fill(dataTable)
ModuleGeneral.SQLCommandStatus = True
Catch exception As Exception
MessageBox.Show(exception.Message)
ModuleGeneral.SQLCommandStatus = False
End Try
selectConnection.Close()
Return dataTable
End Using
End Function


كوئري رو به اين تابع بده . خروجيشو برات توي ديتاتيبل ميريزه

از راهنماییتون واقعا ممنونم ولی من می خوام به طور مستقیم از پروسیجر خروجی بگیرم نه بااستفاده از دیتاتیبل .

bashiry
شنبه 19 دی 1388, 23:10 عصر
اين حالت كلي هستش

فوقش اينه كه خروجي يدونه سل ميشه. بعد شما ميتوني متغير خروجي رو داشته باشي
من كه خودم همينطوري كار مي كنم و مشكلي هم تا حالا نداشتم