PDA

View Full Version : سوال: خواندن اطلاعات جدول در صورت خالی نبودن !



ghasem110deh
جمعه 10 بهمن 1393, 13:52 عصر
سلام
در مورد اسم پست همین به زهنم رسید !
--------------------------------------------
من واسه خوندن آخرین شماره درج شده تو بانک از این کد استفاده می کنم :

public void CountRow() {
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Shopping;Integrated Security=True");
SqlCommand com = new SqlCommand("select COUNT(*) from TKala", con);
con.Open();
SqlDataReader dr = com.ExecuteReader();
if (dr.Read())
{
int count = Int32.Parse(dr[0].ToString());
toolStripStatusLabel2.Text = count.ToString();
}
con.Close();
}
الان اگه جدول خالی باشه ... طبیعتا اون پیغان خطا رو میده !
چیکار کنم که با شرط اینکه جدول خالی نبود اطلاعات رو بخونه و پیغام خطا رو وقتی بده که مشکلی پیش بیاد ؟
------------------------------------------
یه سوال دیگه هم اینکه فرق close و dispose واسه بستن کانکشن چیه ؟
چرا بعضیا دوتاشو میزارن ولی بعضیا فقط close رو ؟

lord_helgard
جمعه 10 بهمن 1393, 14:29 عصر
سلام
در مورد اسم پست همین به زهنم رسید !
--------------------------------------------
من واسه خوندن آخرین شماره درج شده تو بانک از این کد استفاده می کنم :

public void CountRow() {
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Shopping;Integrated Security=True");
SqlCommand com = new SqlCommand("select COUNT(*) from TKala", con);
con.Open();
SqlDataReader dr = com.ExecuteReader();
if (dr.Read())
{
int count = Int32.Parse(dr[0].ToString());
toolStripStatusLabel2.Text = count.ToString();
}
con.Close();
}
الان اگه جدول خالی باشه ... طبیعتا اون پیغان خطا رو میده !
چیکار کنم که با شرط اینکه جدول خالی نبود اطلاعات رو بخونه و پیغام خطا رو وقتی بده که مشکلی پیش بیاد ؟
------------------------------------------
یه سوال دیگه هم اینکه فرق close و dispose واسه بستن کانکشن چیه ؟
چرا بعضیا دوتاشو میزارن ولی بعضیا فقط close رو ؟

سلام دوست عزیز
راه حل سادست ، شما میگی اگر دیتاریدر خواند ( مقداری وجود داشت ) یعنی :

if (dr.Read())
{
int count = Int32.Parse(dr[0].ToString());
toolStripStatusLabel2.Text = count.ToString();
}

کارهای بالا رو انجام بده ، اونوقت اگر نخواند (Else) از این متد استفاده میکنی
else
{
MessageBox.Show("داده مورد نظر یافت نشد");
{
پس میبینی که راه حل سادست. در مورد تفاوت بین این دو نوع بستن کانکشن
depose کانکشنی که بسته نشده است رو میبندد و دیگر قادر به باز کردن reopen آن نیستید و میبایست تنظیمات رشته ای کانکشن Connection String رو دوباره انجام دهید ، اما هنگامی که از Close استفاده میکنید متونید دوباره و دقیقاً بعد از close دوباره کانکشن رو باز کنید و نیازی به تعریف دوباره رشته کانکشن نیست

ghasem110deh
جمعه 10 بهمن 1393, 17:10 عصر
یه حالت هستش که ، مثلا میگه :

if (Read != 0)

که اگه سطری بود بخونه ، اگه نبود که هیچی ! اون چطوریه ؟
---
البته همین هم کارم رو را انداخت :)

lord_helgard
جمعه 10 بهمن 1393, 17:21 عصر
یه حالت هستش که ، مثلا میگه :

if (Read != 0)

که اگه سطری بود بخونه ، اگه نبود که هیچی ! اون چطوریه ؟
---
البته همین هم کارم رو را انداخت :)

این دقیقاً همونکاری که من گقتم رو انجام میده یعنی به جای else از این شرط استفاده میکنه یعنی شما باید بر عکس بیاید بنویسید که خب راه حل درستی هم نیست فقط مواقعی استفاده داره که اگر نبود مثلاً دستورات خاصی رو به جای پیغام دادن اجرا کنه، یعنی لقمه پیچوندنه :دی

اینطوری

if (Read != 0)

MessageBox.Show("داده مورد نظر یافت نشد"); {
}
else
{
int count = Int32.Parse(dr[0].ToString());
toolStripStatusLabel2.Text = count.ToString();

{

jd.mn98
جمعه 10 بهمن 1393, 17:24 عصر
شما میخواین حتی اگه یک سطر هم خالی بود اون رو به حساب بیاره؟؟

ghasem110deh
جمعه 10 بهمن 1393, 17:57 عصر
شما میخواین حتی اگه یک سطر هم خالی بود اون رو به حساب بیاره؟؟

نه دیگه !؟
میخوام اگه جدول (مثلا بعد از ستاپ سازی و نصب و ...) که خالی خطا نده که مجبور شم پیغام بدم !
اگه خالی بود چیزی نخونه ! (دستور اجرا نشه)

ghasem110deh
جمعه 10 بهمن 1393, 18:00 عصر
این دقیقاً همونکاری که من گقتم رو انجام میده یعنی به جای else از این شرط استفاده میکنه یعنی شما باید بر عکس بیاید بنویسید که خب راه حل درستی هم نیست فقط مواقعی استفاده داره که اگر نبود مثلاً دستورات خاصی رو به جای پیغام دادن اجرا کنه، یعنی لقمه پیچوندنه :دی

اینطوری

if (Read != 0)

MessageBox.Show("داده مورد نظر یافت نشد"); {
}
else
{
int count = Int32.Parse(dr[0].ToString());
toolStripStatusLabel2.Text = count.ToString();

{



ممنون
البته با روش اول هم به نتیجه رسیدم !
ولی کدش زیاد دلچسب نیست !!!