View Full Version : بدست آوردن مقدار پارامتر out put از storedprocedur در برنامه
minaalamshahi
دوشنبه 21 فروردین 1391, 13:55 عصر
چطور می تونم خروجی یه stored procedur رو که به صورت زیر تعریف کردیم در برنامه بگیرم
ALTER PROCEDURE [dbo].[Sp_ChangeCapacity]
@_Id bigint
,@ErrCode int Output
,@ErrCode int Output
AS
BEGIN
Set @ErrCode=0
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Sp_Change";
cmd.Parameters.Clear();
cmd.Parameters.Add("@_Id", SqlDbType.BigInt).Value = HighSchool_Id;
;
foreach (SqlParameter Parameter in cmd.Parameters)
if (Parameter.Value == null)
Parameter.Value = DBNull.Value;
connection.Open();
pc = int.Parse(cmd.ExecuteScalar().ToString());
اشتباه کجاست؟
clover
دوشنبه 21 فروردین 1391, 14:19 عصر
راه درست انجام این کار به این شکل هست:
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Sp_Change";
cmd.Parameters.Clear();
cmd.Parameters.Add("@_Id", SqlDbType.BigInt).Value = HighSchool_Id;
SqlParameter spErrCode = sqlCommand.Parameters.Add("@ErrCode", SqlDbType.Int);
spErrCode.Direction = ParameterDirection.Output;
foreach (SqlParameter Parameter in cmd.Parameters)
if (Parameter.Value == null)
Parameter.Value = DBNull.Value;
connection.Open();
sqlCommand.ExecuteNonQuery();
pc = Convert.ToInt32(spErrCode.Value);
minaalamshahi
سه شنبه 22 فروردین 1391, 09:24 صبح
من این قسمت ها رو متوجه نمی شم
SqlParameter spErrCode = sqlCommand.Parameters.Add("@ErrCode", SqlDbType.Int);
1-من دوباره باید وسط کد هام sqlcommand تعریف کنم؟
spId.Direction = ParameterDirection.Output;
2-spid چیه؟کجا تعریف شده؟
pc = Convert.ToInt32(spErrCode.Value);
3-بعد از executenonequery فقط باید مقدار خروجی رو بگیرم با این خط؟
clover
سه شنبه 22 فروردین 1391, 10:04 صبح
1-من دوباره باید وسط کد هام sqlcommand تعریف کنم؟
SqlCommand نه، بلکه یک SqlParameter
وقتی که با متد Add یک پارامتر رو به Command خودتون اضافه می کنید، با استفاده از مقدار خروجی این متد می تونید به پارامتر دسترسی داشته باشید، در اینجا ما پارامتر رو در spErrCode نگهداری می کنیم چون نیاز داریم بعضی از ویژگی های اون رو تغییر بدیم، همینطور در آخر باید به مقدارش دسترسی داشته باشیم.
2-spid چیه؟کجا تعریف شده؟
معذرت می خوام، این اشتباه من بود، تصحیحش می کنم:
spErrCode.Direction = ParameterDirection.Output;
ویژگی Direction پارامتری که اضافه کردیم رو به Output ست می کنیم (مطابق با تعریف پارامتر در Stored Procedure)
3-بعد از executenonequery فقط باید مقدار خروجی رو بگیرم با این خط؟
مقدار خروجی که با Return برگشت داده میشه رو با روش دیگه ای باید بگیرید. با این خط در واقع مقدار پارامتر خروجی ErrCod@ رو می گیرید.
minaalamshahi
سه شنبه 22 فروردین 1391, 11:00 صبح
مقدار خروجی که با Return برگشت داده میشه رو با روش دیگه ای باید بگیرید
////
میشه این رو هم بهم یاد بدین
ممنون میشم
minaalamshahi
سه شنبه 22 فروردین 1391, 11:18 صبح
اگه در Sql از دستور پرینت استفاده کنیم مقدار پرینت شده رو چطور می تونیم بگیریم؟
clover
سه شنبه 22 فروردین 1391, 11:56 صبح
گرفتن مقدار خروجی:
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Sp_Change";
cmd.Parameters.Clear();
cmd.Parameters.Add("@_Id", SqlDbType.BigInt).Value = HighSchool_Id;
SqlParameter spErrCode = sqlCommand.Parameters.Add("@ErrCode", SqlDbType.Int);
spErrCode.Direction = ParameterDirection.Output;
// Add parameter to retrieve return value
SqlParameter spReturn = sqlCommand.CreateParameter();
sqlCommand.Parameters.Add(spReturn);
spReturn.Direction = ParameterDirection.ReturnValue;
foreach (SqlParameter Parameter in cmd.Parameters)
if (Parameter.Value == null)
Parameter.Value = DBNull.Value;
connection.Open();
sqlCommand.ExecuteNonQuery();
pc = Convert.ToInt32(spErrCode.Value);
object returnValue = spReturn.Value;
اگه در Sql از دستور پرینت استفاده کنیم مقدار پرینت شده رو چطور می تونیم بگیریم؟
به این مثال دقت کنید:
List<string> SQLServerMessages = new List<string>();
using (SqlConnection sqlConnection = new SqlConnection(AppConfiguration.ConnectionString))
{
SqlCommand sqlCommand = new SqlCommand("YourCommand", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlConnection.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
{
SQLServerMessages.Add(e.Message);
};
sqlConnection.Open();
sqlCommand.ExecuteNonQuery()
sqlConnection.Close();
}
زمانی که دستور پرینت اجرا میشه، رویداد InfoMessage اتفاق میفته و می تونید توسط یک Handler اون رو مدیریت کنید. در اینجا کاری که من انجام میدم اضافه کرد پیغام به لیست SQLServerMessages هست و در نهایت می تونید از این لیست در هر جای برنامه استفاده کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.