PDA

View Full Version : مقدار برگشتی از یک دستور sql



amin1000
دوشنبه 13 اردیبهشت 1389, 11:00 صبح
چطوری میشه مقدار برگشتی از یک دستور sql را در یک متغیر ذخیره کرد؟

M.YasPro
دوشنبه 13 اردیبهشت 1389, 11:16 صبح
این مقدار برگشتی چی هست ؟
عدد ؟ رکورد ؟

amin1000
دوشنبه 13 اردیبهشت 1389, 11:51 صبح
رکورد !!!!!!!!

M.YasPro
دوشنبه 13 اردیبهشت 1389, 11:57 صبح
اینا رو مطالعه کنید .
http://barnamenevis.org/forum/showpost.php?p=425640&postcount=36
http://barnamenevis.org/forum/showpost.php?p=564359&postcount=100
http://barnamenevis.org/forum/showpost.php?p=533324&postcount=85
http://barnamenevis.org/forum/showpost.php?p=665465&postcount=203

موفق باشید .

شکل دستور بستگی به این داره که شما میخاهید از چه نوع داده ای برای نگهداشتن اطلاعات برگشتی استفاده کنید ؟
دیتاست ؟ دیتا ویو ؟ لیست ؟ ...؟

ASKaffash
دوشنبه 13 اردیبهشت 1389, 12:23 عصر
سلام
اینطوری :


SqlConnection c = new SqlConnection("Data Source=.;Initial Catalog=Test2008;Integrated Security=True");
SqlCommand m = new SqlCommand("P1", c);
m.CommandType = CommandType.StoredProcedure;
SqlParameter p = new SqlParameter();
p.Direction = ParameterDirection.ReturnValue;
m.Parameters.Add(p);
c.Open();
m.ExecuteNonQuery();
c.Close();
this.Text = p.Value.ToString();

mehdi.mousavi
دوشنبه 13 اردیبهشت 1389, 12:24 عصر
چطوری میشه مقدار برگشتی از یک دستور sql را در یک متغیر ذخیره کرد؟

سلام.
IDbCommand که کلاسهای SqlCommand و ... اونو پیاده سازی کردن، حاوی متودی به اسم ExecuteScalar هستش. این دستور مقدار موجود در اولین ستون، از اولین ردیف در Result Set رو به شما بصورت یک object برمیگردونه. شما میتونید این object رو به Data Type مورد نظرتون Cast کنید، یا با استفاده از Convert اونو به Data Type مقصد تبدیل کنید.

برای توضیحات بیشتر و مشاهده یک مثال، به MSDN رجوع کنید.

موفق باشید.

mahmood3d
چهارشنبه 16 تیر 1389, 11:23 صبح
سلام دوست عزیز
من با استفاده از مثال هایی که تو اینترنت بود و حتی MSDN خود مایکروسافت عمل کستینگ رو انجام می دم ولی همچنان مشکلی دارم که حل نمیشه و خطا می گیره.
متن خطا هم به این صورت هست:
Object reference not set to an instance of an object.

mehdi.mousavi
چهارشنبه 16 تیر 1389, 11:24 صبح
سلام دوست عزیز من با استفاده از مثال هایی که تو اینترنت بود و حتی MSDN خود مایکروسافت عمل کستینگ رو انجام می دم ولی همچنان مشکلی دارم که حل نمیشه و خطا می گیره. متن خطا هم به این صورت هست:
Object reference not set to an instance of an object.

سلام.
لطفا کد مورد استفاده خودتون رو اینجا قرار بدید تا بتونم کمکتون کنم.

موفق باشید.

mahmood3d
چهارشنبه 16 تیر 1389, 11:27 صبح
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ApplicationConfiguration.DbConnectionString;
SqlCommand comm = conn.CreateCommand();
comm.CommandText = "exec hourdifrent @h1,@h2";
comm.Parameters.AddWithValue("@h1", Int32.Parse(textBox1.Text));
comm.Parameters.AddWithValue("@h2", Int32.Parse(textBox2.Text));
try
{
conn.Open();
string s = (comm.ExecuteScalar()).ToString();
یا حتی از خط بعدی استفاده کردم باز جواب نداد
Int32 s =(Int32)comm.ExecuteScalar();
MessageBox.Show(s.ToString());
conn.Close();
}
catch (Exception es)
{
MessageBox.Show(es.Message);
}من توی اس کیو ال سرور یک فانکشن نوشتم که با گرفتن 2 تا مقدار یک مقدار اینت رو برمیگردونه.
توی اس کیو ال سرور به درستی کار می کنه و مقدار رو می ده ولی تو سی شارپ مشکل دارم.

در ضمن این رو هم اضافه کنم که با دستور کانورت اونو تبدیل به استرینگ کردم که مقدارش رو چاپ کنم ولی مقدارش نال بود و حتی تبدیل به اینتش هم کردم که مقدارش صفر بود.
حالا یا فانکشن اجرا نمیشه و یا اجرا میشه و داده ها تو کستینگ از بین می ره.

mehdi.mousavi
چهارشنبه 16 تیر 1389, 12:46 عصر
سلام.
اولین ایراد توی این خطه:

comm.CommandText = "exec hourdifrent @h1,@h2";

شما جای اینکه CommandText رو به این شکل ست کنید، باید اینطور عمل کنید:


comm.CommandText = "hourdifrent";
comm.CommandType = System.Data.CommandType.StoredProcedure;


بعدش اینقدر شما راحت توی کد string ها رو دارید Parse میکنید که اگر یکیش null (یا غیر عددی) باشه، اتفاقات عجیب و غریبی رخ خواهد داد. در نهایت، لطفا مثال آخر در این مقاله رو بخونید تا با چگونگی گرفتن Return Value ی یک Stored Procedure آشنا بشید. چون همونطوریکه توضیح دادید، SP شما با گرفتن دو پارامتر ورودی، داره یه پارامتر خروجی رو بعنوان return value ی خودش برمیگردونه...

موفق باشید.

mahmood3d
چهارشنبه 16 تیر 1389, 12:50 عصر
دوست عزیز این یک نمونه ای بود که براتون فرستادم و به دلیل اینکه خطاهای مختلفی می داد دیگه عجله ای کدهایی داشتم رو براتون نوشتم.
تبدیل مقادیر رو توی برنامه انجام می دم.
در ضمن اون چیزی که من دارم استورپروسیجر نیست و یک فانکشن از نوع اسکالر هست و ظاهر اون به صورت استورپروسیجر نشون داده میشه. باز با این اوصاف باید به روش استور پروسیجر اجرا بشه؟

ممنون دوستان
مشکل حل شد
با تغییر دادن این بخش:

comm.CommandText = "select dbo.hourdifrent(@h1,@h2)";