المشاركات : 12
المواضيع 4
الإنتساب : Nov 2018
السمعة :
0
الشكر: 3
تم شكره 4 مرات في 2 مشاركات
20-09-20, 05:35 AM
السلام عليكم
لدي في قاعدة البيانات سكيول سيرفر الاسم والشهر والسنة
ابحث عن كود عدم تكرار نفس الاسم والسنة والشهر
أي في حالة الإسم أدى واجبه الشهري عدم تكرار الأداء لنفس الشخص وفي نوفس الشهر وفي نفس السنة
sql server
c#
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
يمكنك عمل UNIQUE INDEX يتضمن الاعمدة التي لاتريد تكرار صفوف بنفس قيمتها
افتح SQL Server Management Studio وافتح الجدول الذي تريد منع التكرار فيه
ثم تتبع الخطوات التالية لاضافة الاعمدة ل UNIQUE INDEX
او :
اضف السطر التالي الى سكريبت قاعدة البيانات لديك
غير Table1 الى اسم الجدول
و Name Year Month الى اسماء الحقول
PHP كود :
CREATE UNIQUE INDEX [IX_Table1_Column] ON [dbo].[Table1] ([Name],[Year],[Month])
الان لن تقبل قاعدة البيانات صفوف بها القيم هذه مكرره
وايضا يمكن عمل ذلك يدويا بدون اضافة Index ، تقوم بعمل استعلام على الصف باستخدام WHERE والاعمدة التي تريدها ، اذا كانت موجودة بالفعل لا تضيفها
المشاركات : 12
المواضيع 4
الإنتساب : Nov 2018
السمعة :
0
الشكر: 3
تم شكره 4 مرات في 2 مشاركات
(20-09-20, 10:18 AM)Anas Mahmoud كتب : يمكنك عمل UNIQUE INDEX يتضمن الاعمدة التي لاتريد تكرار صفوف بنفس قيمتها
افتح SQL Server Management Studio وافتح الجدول الذي تريد منع التكرار فيه
ثم تتبع الخطوات التالية لاضافة الاعمدة ل UNIQUE INDEX
او :
اضف السطر التالي الى سكريبت قاعدة البيانات لديك
غير Table1 الى اسم الجدول
و Name Year Month الى اسماء الحقول
PHP كود :
CREATE UNIQUE INDEX [IX_Table1_Column] ON [dbo].[Table1] ([Name],[Year],[Month])
الان لن تقبل قاعدة البيانات صفوف بها القيم هذه مكرره
وايضا يمكن عمل ذلك يدويا بدون اضافة Index ، تقوم بعمل استعلام على الصف باستخدام WHERE والاعمدة التي تريدها ، اذا كانت موجودة بالفعل لا تضيفها
شكرا لك على هده المعلومة جزاك الله خيرا
هده تعديلات على قاعدة البيانات سكيول سيرفر
انا احتاج الى كود c# مع رسالة الخطأ
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
أخي لم اعطك الكود فعلا ولكن ارشدتك للفكرة ، وهي البحث عن الصف الذي يحتوي هذه البيانات واذا وجدها لا نكمل الاضافة ونعرض رسالة والا نكمل الاضافة ::
يمكنك استخدام شيء مثل
كود :
string name = txtName.Text;
string month = txtMonth.Text;
string year = txtYear.Text;
string commandString = @"SELECT * FROM [Table1] WHERE [Name]=@Name AND [Month]=@Month AND [Year]=@Year"
SqlCommand command = new SqlCommand(commandString, connection);
command.Parameters.AddWithValue("@Name", name);
command.Parameters.AddWithValue("@Month", month);
command.Parameters.AddWithValue("@Year", year);
if (command.ExecuteReader().Read())
{
//هناك صف او اكثر بالفعل
MessageBox.Show("الإسم أدى واجبه الشهري");
return;
}
//نقوم بالاضافة بشكل طبيعي
commandString = @"INSERT INTO [Table1] ([Name],[Month],[Year]) VALUES(@Name,@Month,@Year)"
command = new SqlCommand(commandString, connection);
command.Parameters.AddWithValue("@Name", name);
command.Parameters.AddWithValue("@Month", month);
command.Parameters.AddWithValue("@Year", year);
command.ExecuteNonQuery();
المشاركات : 12
المواضيع 4
الإنتساب : Nov 2018
السمعة :
0
الشكر: 3
تم شكره 4 مرات في 2 مشاركات
20-09-20, 05:16 PM
(آخر تعديل لهذه المشاركة : 20-09-20, 05:29 PM {2} بواسطة sidi bibi.)
(20-09-20, 03:18 PM)Anas Mahmoud كتب : أخي لم اعطك الكود فعلا ولكن ارشدتك للفكرة ، وهي البحث عن الصف الذي يحتوي هذه البيانات واذا وجدها لا نكمل الاضافة ونعرض رسالة والا نكمل الاضافة ::
يمكنك استخدام شيء مثل
كود :
string name = txtName.Text;
string month = txtMonth.Text;
string year = txtYear.Text;
string commandString = @"SELECT * FROM [Table1] WHERE [Name]=@Name AND [Month]=@Month AND [Year]=@Year"
SqlCommand command = new SqlCommand(commandString, connection);
command.Parameters.AddWithValue("@Name", name);
command.Parameters.AddWithValue("@Month", month);
command.Parameters.AddWithValue("@Year", year);
if (command.ExecuteReader().Read())
{
//هناك صف او اكثر بالفعل
MessageBox.Show("الإسم أدى واجبه الشهري");
return;
}
//نقوم بالاضافة بشكل طبيعي
commandString = @"INSERT INTO [Table1] ([Name],[Month],[Year]) VALUES(@Name,@Month,@Year)"
command = new SqlCommand(commandString, connection);
command.Parameters.AddWithValue("@Name", name);
command.Parameters.AddWithValue("@Month", month);
command.Parameters.AddWithValue("@Year", year);
command.ExecuteNonQuery();
جربت الكود لا يعمل
هذا هو الكود
I
I
I
V
PHP كود :
private void badd_Click(object sender, EventArgs e) { if (String.IsNullOrEmpty(tnum.Text) || String.IsNullOrEmpty(nmois.Text) || String.IsNullOrEmpty(cmbane.Text)) { //do job MessageBox.Show("معلومات غير كافية", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string name = tnomprenom.Text; string month = nmois.Text; string year = cmbane.Text;
string commandString = @"SELECT * FROM pay WHERE nomprenom=@Name AND mois=@Month AND annee=@Year"; SqlCommand command = new SqlCommand(commandString, con); command.Parameters.AddWithValue("@Name", name); command.Parameters.AddWithValue("@Month", month); command.Parameters.AddWithValue("@Year", year);
if (command.ExecuteReader().Read()) { //هناك صف او اكثر بالفعل MessageBox.Show("الإسم أدى واجبه الشهري"); return; }
{ try { cmd = new SqlCommand("insert into pay(id_id,nomprenom,annee,mois,datepay) values('" + tnum.Text + "','" + tnomprenom.Text + "','" + cmbane.Text + "','" + nmois.Text + "','" + datepay.Value.ToString("yyyy/MM/dd") + "')", con); con.Open(); cmd.ExecuteNonQuery(); con.Close(); MessageBox.Show("تم السجيل بنجاح", "عملية الإضافة", MessageBoxButtons.OK, MessageBoxIcon.Information); tnum.Text = ""; tnomprenom.Text = ""; }
catch (SqlException ex) { MessageBox.Show("erros" + ex.Message); } } }
تم حل المشكل بعد البحث وشكرا على مساعدتكم هكذا نتعلم والعلم ليس له حدود
الكود
كود :
private void badd_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(tnum.Text) || String.IsNullOrEmpty(nmois.Text) || String.IsNullOrEmpty(cmbane.Text))
{
//do job
MessageBox.Show("معلومات غير كافية", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else
{
cmd = new SqlCommand("select * from pay where nomprenom= '" + tnomprenom.Text + "' AND annee= '" + cmbane.Text + "' AND mois= '" + nmois.Text + "'", con);
da = new SqlDataAdapter(cmd);
da.Fill(ds);
int i = ds.Tables[0].Rows.Count;
if (i > 0)
{
MessageBox.Show("" + tnomprenom.Text + "", "هذا الإسم موجود سابقا", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
ds.Clear();
return;
}
{
try
{
cmd = new SqlCommand("insert into pay(id_id,nomprenom,annee,mois,datepay) values('" + tnum.Text + "','" + tnomprenom.Text + "','" + cmbane.Text + "','" + nmois.Text + "','" + datepay.Value.ToString("yyyy/MM/dd") + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("تم السجيل بنجاح", "عملية الإضافة", MessageBoxButtons.OK, MessageBoxIcon.Information);
tnum.Text = "";
tnomprenom.Text = "";
}
catch (SqlException ex)
{
MessageBox.Show("erros" + ex.Message);
}
}
}
}
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
اخي الكريم استخدام القيم وسط النص هكذا ليس امنا من ال SQL INJECION اطلاقا
بسهولة جدا ممكن تضيع منك قاعدة البيانات ، وبسهولة يمكن التحكم بها ايضا
عليك استخدام البرامترز لتمرير القيم للاستعلام
المشاركات : 12
المواضيع 4
الإنتساب : Nov 2018
السمعة :
0
الشكر: 3
تم شكره 4 مرات في 2 مشاركات
شكرا على المعلومة القيمة جزاك الله خيرا
|