PDA

View Full Version : سوال: پيغام ركورد تكراري در sql و نشون دادن اون به كاربر در C#‎



ehsan#baharangiz
پنج شنبه 18 شهریور 1395, 19:39 عصر
با سلام و خسته نباشد
من یه برنامه نوشتم که عمل درج چند رکوردو همزمان انجام میده حالا من میخوام بدونم چطور میشه با یه پیغام اسامی تکراری که قبلا ثبت شده رو به کار بر نمایش بده برای ثبت همزمانم از این کد استفاده کردم


List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["checkBoxColumn"].Value) == true
select row).ToList();
if (MessageBox.Show(string.Format("Do you want to delete {0} rows?", selectedRows.Count), "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
foreach (DataGridViewRow row in selectedRows)
{
using (SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog=marzdb;Integrated Security=True"))
{
using (SqlCommand cmd1 = new SqlCommand("INSERT INTO t2 (id,date,mablagh) Values (@id,@date,@mablagh)", con))
{
cmd1.CommandType = CommandType.Text;
cmd1.Parameters.AddWithValue("@id", row.Cells[1].Value);
cmd1.Parameters.AddWithValue("@date", textBox2.Text);
cmd1.Parameters.AddWithValue("@mablagh", textBox1.Text);
con.Open();
cmd1.ExecuteNonQuery();
this.t2TableAdapter.Fill(this.marzdbDataSet1.t2);

con.Close();

mrprestige
پنج شنبه 18 شهریور 1395, 20:59 عصر
سلام دوست من وقت بخیر ،میتونی معیار تکراری بودن رو براساس ID هر فرد بزاری یعنی برای هر فردی یک شناسه منحصر بفرد تعریف کنی و بعد بیای بگی که اگه شناسه وارد شده منطبق با شناسه موجود توی پایگاه داده بود اونوقت پیغام داده ی تکراری بهمون بده ، شما میتونی با استفاده از SQLDataReader اینکار رو بکنی یه مثال کوچیک میزنم

var = new SqlCommand("Select * from tblPerson where PersonID= @PersonID", con);
cmd.Parameters.AddWithValue("@PersonID",Convert.ToInt32(textBox1.Text));
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr.HasRows == true)
{
MessageBox.Show("PersonID = " + dr[0] + " Already exist");
textBox1.Clear();
break;
}
}
con.Close();


و [0]dr دلالت داره یه ستون اول که من اون رو بطور پیش فرض ستون Person ID در نظر گرفتم

ehsan#baharangiz
جمعه 19 شهریور 1395, 01:22 صبح
سلام دوست من وقت بخیر ،میتونی معیار تکراری بودن رو براساس ID هر فرد بزاری یعنی برای هر فردی یک شناسه منحصر بفرد تعریف کنی و بعد بیای بگی که اگه شناسه وارد شده منطبق با شناسه موجود توی پایگاه داده بود اونوقت پیغام داده ی تکراری بهمون بده ، شما میتونی با استفاده از SQLDataReader اینکار رو بکنی یه مثال کوچیک میزنم

var = new SqlCommand("Select * from tblPerson where PersonID= @PersonID", con);
cmd.Parameters.AddWithValue("@PersonID",Convert.ToInt32(textBox1.Text));
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr.HasRows == true)
{
MessageBox.Show("PersonID = " + dr[0] + " Already exist");
textBox1.Clear();
break;
}
}
con.Close();


و [0]dr دلالت داره یه ستون اول که من اون رو بطور پیش فرض ستون Person ID در نظر گرفتم
ممنون از پاسختون
درست میگین فقط این کد یه مشکل داره ای اسامی تکراریو وقتی تو حلقه میفته جدا جدا نمایش میده چطور میشه کاری کرد که همه ای دی تکراریو در غالب یک پیغام و یک جا نمایش بده؟
من کد شمارو به شکل زیر دراوردم یعنی وارد حلقه کردم تا همه ورودی هارو بررسی کنه

List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["checkBoxColumn"].Value) == true
select row).ToList();
if (MessageBox.Show(string.Format("Do you want to delete {0} rows?", selectedRows.Count), "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
foreach (DataGridViewRow row in selectedRows)
{
using (SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog=marzdb;Integrated Security=True"))
{
using (SqlCommand cmd1 = new SqlCommand("Select * from t2 Where ( ( id =@id AND date= @date ) )", con))
{
cmd1.CommandType = CommandType.Text;
cmd1.Parameters.AddWithValue("@id", row.Cells[1].Value);
cmd1.Parameters.AddWithValue("@date", textBox2.Text);
//cmd1.Parameters.AddWithValue("@mablagh", textBox1.Text);
con.Open();
SqlDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
{
if (dr.HasRows == true)
{
MessageBox.Show("PersonID = " + dr[0] + " Already exist");
textBox1.Clear();
break;
}
}
con.Close();

}
}


}



}

mrprestige
جمعه 19 شهریور 1395, 11:14 صبح
خب دوست عزیز شما مگه یک ID رو برای چند فرد گذاشتید ؟؟؟! هر شناسه برای یک نفر هست و وقتی شما یک شناسه رو توی ورودی تون وارد میکنید اون کدی که نوشتم میاد چک میکنه اگه همچین شناسه ای توی بانکتون بود بیاد و فقط اون شناسه رو که به ورودی دادید رو بررسی کنه با شناسه های موجود توی پایگاهتون که اگه بود پیغام بده و اگه نه ، ثبت بشه . بیشتر توضیح بدی ممنون میشم

ehsan#baharangiz
جمعه 19 شهریور 1395, 11:29 صبح
خب دوست عزیز شما مگه یک ID رو برای چند فرد گذاشتید ؟؟؟! هر شناسه برای یک نفر هست و وقتی شما یک شناسه رو توی ورودی تون وارد میکنید اون کدی که نوشتم میاد چک میکنه اگه همچین شناسه ای توی بانکتون بود بیاد و فقط اون شناسه رو که به ورودی دادید رو بررسی کنه با شناسه های موجود توی پایگاهتون که اگه بود پیغام بده و اگه نه ، ثبت بشه . بیشتر توضیح بدی ممنون میشم

من یک دیتا گرید دارم که داخل دیتا گرید چک باکس گذاشتم و کاربر میتونه همزمان چند ردیفو انتخاب کنه و دو تکس باکس دارم که تاریخ و مبلغ وارد میشه روند کار اینجوریه کاربر مثلا 10 چک باکسو تیک میزنه و یه میلغ و تاریخو وارد میکنه بعد دکمه واریزو میزنه و این مبلغ برای این 10 نفر در جدول حقوق ثبت میشه حالا من با دستور شما چک میکنم که آیا تو جدول حقوق با این تاریخ و مبلغ و ای دی رکوردی ثبت شده که اگه ثبت شده ای دیشو نشون بده حالا این کار انجام میشه ولی مثلا اگه از اون 10 تا 5 تا تکراری باشه در قالب 5 پیغام ای دی های تکراریو نمایش میده من میخوام یه پیغام بده و 5 اسم تکراریو نمایش بده .امیدوارم منظورمو گفته باشم

abdullah20
جمعه 19 شهریور 1395, 12:13 عصر
سلام
ی متغییر قبل حلقه ایجاد کنید
مثال:

string checkError = string.Empty;

داخل حلقه به جایی اینکه مسیج باکس نمایش بدید این را قرار بدید:

checkError += "\r" + "PersonID = " + dr[0] + " Already exist";

بعد حلقه:

if(checkError!=string.Empty)
MessageBox.Show(checkError);

mrprestige
جمعه 19 شهریور 1395, 14:08 عصر
دوست من خیلی عذر میخوام و ببخشید که دیر جواب دادم ، کار مهمی پیش اومد باید میرفتم و از طرفی هم خوشحالم حداقل به لطف دوست خوبمون جناب abdullah20 (http://barnamenevis.org/member.php?190756-abdullah20) به جوابتون رسیدید که مطمئناً جواب ایشون به مراتب خیلی حرف ای تر از بنده ی تازه کار هست .

امیدوارم پیروز موفق باشید .