مشکل در یک حلقه For و دستور Insert To SQL
سلام و خسته نباشید .
در جدولم ( Patients ) یک ستون دارم به اسم AGE . از اسمش معلومه که یعنی سن . بیمارانی که پذیرش میشن در نرم افزار من یک سن بهشون تخصیص داده .
حالا من می خواهم با یک حلقه For لیست تمام بیماران رو داشته باشم و اگه سنشون بیشتر از مثلا 50 سال بود ، یک دستور INSERT اجرا بشه .
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "Select COUNT(*) AS cnt From patients WHERE sex = 'مرد' AND reg_tarikh_shamsi between '" + uc1.VDate + "' AND '" + uc2.VDate + "'";
cmd.Parameters.Clear();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
string cnt = Convert.ToString(ds.Tables[0].Rows[0]["cnt"]);
int countz = Convert.ToInt32(cnt);
cnn.Close();
////////
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "Select id,age From patients WHERE sex = 'مرد' AND reg_tarikh_shamsi between '" + uc1.VDate + "' AND '" + uc2.VDate + "'";
cmd.Parameters.Clear();
SqlDataAdapter da22 = new SqlDataAdapter(cmd);
DataSet ds22 = new DataSet();
da22.Fill(ds22);
cnn.Close();
del_navar();
try
{
for (int j = 0; j < countz; j++)
{
PID = Convert.ToString(ds22.Tables[0].Rows[j]["id"]);
int age = Convert.ToInt32(Convert.ToString(ds22.Tables[0].Rows[j]["age"]));
if (age == 40 || age > 40)
{
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "Insert INTO other_usage (patientid,other_id,numberz) VALUES (@patientid,@other_id,@numberz)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@patientid", PID);
cmd.Parameters.AddWithValue("@other_id", 3);
cmd.Parameters.AddWithValue("@numberz", 1);
cmd.ExecuteNonQuery();
cnn.Close();
}
}
MessageBox.Show("اضافه شد");
}
catch
{
}
این تیکه کد من هست . اما متاسفانه درست کار نمی کنه و رکورد هایی رو هم دارم که سنشون کمتر از 50 هست ( که در تیکه برنامه بالا قید کردم ) بازم دستور INSERT براشون انجام شده
ممنون میشم کمک کنید
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
بنده خوب خدا یبارکی اونایی که سنشون بالای 50 هستش رو انتخواب کن و بعد داده مورد نظر تو وارد کن نمی خواد همه رو انتخواب کنی
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
نقل قول:
نوشته شده توسط
ordebehesht
بنده خوب خدا یبارکی اونایی که سنشون بالای 50 هستش رو انتخواب کن و بعد داده مورد نظر تو وارد کن نمی خواد همه رو انتخواب کنی
نظر بسیار خوبی بود . راست میگی . اشتباه کردم . مرسی دوست عزیز
راستی آواتارت خیلی قشنگه مثل تیمش !
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
مرسی اگه طرفداره یووه هستی به این سایتها یه نگاه بنداز
www.juventus.ir
www.juventusfc.ir
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
عزیز کدم رو به این حالت تغییر دادم
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "Select COUNT(*) AS cnt From patients WHERE sex = 'مرد' AND age > 39 AND reg_tarikh_shamsi between '" + uc1.VDate + "' AND '" + uc2.VDate + "'";
cmd.Parameters.Clear();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
string cnt = Convert.ToString(ds.Tables[0].Rows[0]["cnt"]);
int countz = Convert.ToInt32(cnt);
cnn.Close();
////////
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "Select id,age From patients WHERE sex = 'مرد' AND age > 39 AND reg_tarikh_shamsi between '" + uc1.VDate + "' AND '" + uc2.VDate + "'";
cmd.Parameters.Clear();
SqlDataAdapter da22 = new SqlDataAdapter(cmd);
DataSet ds22 = new DataSet();
da22.Fill(ds22);
cnn.Close();
del_navar();
for (int j = 0; j < countz; j++)
{
PID = Convert.ToString(ds22.Tables[0].Rows[j]["id"]);
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "Insert INTO other_usage (patientid,other_id,numberz) VALUES (@patientid,@other_id,@numberz)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@patientid", PID);
cmd.Parameters.AddWithValue("@other_id", 3);
cmd.Parameters.AddWithValue("@numberz", 1);
cmd.ExecuteNonQuery();
cnn.Close();
}
MessageBox.Show("اضافه شد");
بازم الان رکوردی دارم که سنش بیشتر از 60 سال هست ، اما براش INSERT انجام نشده !!
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
ببین کدم رو کلا تغییر دادم و بهینه ترش کردم
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "INSERT INTO other_usage(patientid,other_id,numberz) Select P.id,3,1 FROM patients P WHERE P.sex = 'زن' AND P.age >= 50";
cmd.ExecuteNonQuery();
cnn.Close();
کلا گفتم هرکی بیشتر از اون سن هست ، براش یک INSERT انجام بشه . در واقع یک کوری رو Run می کنم . اما بازم کسی رو دارم فیلد AGE برابر 60 هست ، اما براش Insert انجام نمیشه
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
سلام. دستوری رو که در پست 6 گذاشتی اجرا میشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
25 درصد از هر دستور رو نوشتی. انتظار که نداری دستور اجرا بشه؟
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
SqlConnection cnn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "INSERT INTO other_usage(patientid,other_id,numberz) Select P.id,3,1 FROM patients P WHERE P.sex = 'زن' AND P.age >= 50";
cmd.ExecuteNonQuery();
cnn.Close();
شما اینجوری فرضش کنم . !! . اون 2 خط اول رو قسمت partial تعریف کردم
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
من هنوز دستور insert ای که values نداره ندیدم.شما چطور مقدار درج می کنید؟
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
نقل قول:
نوشته شده توسط
mohammaddou
من هنوز دستور insert ای که values نداره ندیدم.شما چطور مقدار درج می کنید؟
عزیز دلم با Select دیگه . مقدار P.id نماینده جدول Patients و فیلد id هست . 3 و 1 هم که یک مقدار ثابت هستند .
پس باید اون رکورد هایی که در WHERE شرط شدند رو Select کنه و بریزنه توی جدول other_usage
Insert into tbl1 (field1,field2,field3) Select a, b , c From tbl3
این یک مثاله دیگه !
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
نقل قول:
نوشته شده توسط
dev-dev-dev
ببین کدم رو کلا تغییر دادم و بهینه ترش کردم
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "INSERT INTO other_usage(patientid,other_id,numberz) Select P.id,3,1 FROM patients P WHERE P.sex = 'زن' AND P.age >= 50";
cmd.ExecuteNonQuery();
cnn.Close();
کلا گفتم هرکی بیشتر از اون سن هست ، براش یک INSERT انجام بشه . در واقع یک کوری رو Run می کنم . اما بازم کسی رو دارم فیلد AGE برابر 60 هست ، اما براش Insert انجام نمیشه
عجیبه ولی شما مطمئن هستین که شخصی که سنش 60 هست جنسیتش زنه ؟؟؟
شاید مرد باشه ها دقت کنید!!!
آخه تا جایی که من بلدم کوئری تون باید درست باشه و نباید مشکلی داشته باشه.
اینو چک کنید نتیجه رو اطلاع بدین...
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
یک مشکل جزیی بود که حل شد . یک تابع برای حذف کردن بعضی رکورد ها استفاده می کردم که اشتباهی اونجا هم لود شوده بود .
بعضی وقتا مغز آدم دیگه جواب نمیده . همیشه جلوی چشمم بود ، اما نمی دیدمش .
مرسی از همه عزیزان . اما بازم ممنون از دوستان که کد های بهینه تر و سالم تر و مطمعن تری رو به من یاد دادند !
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
نقل قول:
نوشته شده توسط
mohammaddou
من هنوز دستور insert ای که values نداره ندیدم.شما چطور مقدار درج می کنید؟
با سلكت بهش مقدار داده.مطالعه كنين پيدا ميكنين! با اين حساب اينم يه نمونه ديگش :
Insert Into TableName Select * From TableName2
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
نقل قول:
نوشته شده توسط
ali_habibi1384
با سلكت بهش مقدار داده.مطالعه كنين پيدا ميكنين! با اين حساب اينم يه نمونه ديگش :
Insert Into TableName Select * From TableName2
راستش تا اون لحظه ای که این تاپیک رو ببینم هیچوقت ندیده بودم. حرف شما منو یاد این جمله انداخت که بزرگی گفته :
"باید زیاد مطالعه کنید تا بدانید که هیچ نمیدانید"
بهرحال از دقت و توجه شما ممنونم. :چشمک:
نقل قول: مشکل در یک حلقه For و دستور Insert To SQL
نقل قول:
نوشته شده توسط
mohammaddou
راستش تا اون لحظه ای که این تاپیک رو ببینم هیچوقت ندیده بودم. حرف شما منو یاد این جمله انداخت که بزرگی گفته :
"باید زیاد مطالعه کنید تا بدانید که هیچ نمیدانید"
بهرحال از دقت و توجه شما ممنونم. :چشمک:
خواهش می کنم ، اصل و پایه فروم این هست که با تبادل اطلاعات چیز یاد بگیریم .
ممنونم از توجه شما و سایر دوستان که منو کمک کردند !