المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
07-04-19, 06:41 PM
(آخر تعديل لهذه المشاركة : 10-04-19, 03:37 PM {2} بواسطة maxruined.)
السلام عليكم
واجهتني مشكلة وهي ان لما بعمل ابديت لاى سطر فى الدتا جريد فيو الاقي الابديت اتعمل على كل الاسطر باستنثاء الاسطر اللى كاتب فيها notes
زي كدا
وهذا هو الكود المستخدم فى ال stored procedure
كود :
ALTER proc [dbo].[Update_Invoice]
@JOB_NO int,
@ENGINEER_RESPOSIBLE varchar(250),
@DATE datetime,
@COMPANY_NAME varchar(250),
@CUSTOMER_NAME varchar(250),
@SUBJECT varchar(250),
@REFERENCE varchar(250),
@ACKNOWLEDGMENT_COPY varchar(250),
@ACKNOWLEDGMENT_DATE varchar(250),
@NOTES varchar(250)
as
update INVOICES
set NOTES=@NOTES,
JOB_NO=@JOB_NO,
ENGINEER_RESPOSIBLE=@ENGINEER_RESPOSIBLE,
date=@DATE,
COMPANY_NAME=@COMPANY_NAME,
CUSTOMER_NAME=@CUSTOMER_NAME,
SUBJECT=@SUBJECT,
REFERENCE=@REFERENCE,
ACKNOWLEDGMENT_COPY=@ACKNOWLEDGMENT_COPY,
ACKNOWLEDGMENT_DATE=@ACKNOWLEDGMENT_DATE
where NOTES=@NOTES
وهذا هو الكود المستخدم فى السي شارب
كود :
public void Update_Invoice(int JOB_NO, string ENGINEER_RESPOSIBLE, DateTime DATE,
string COMPANY_NAME, string CUSTOMER_NAME, string SUBJECT, string REFERENCE,
string ACKNOWLEDGMENT_COPY, string ACKNOWLEDGMENT_DATE, string NOTES)
{
DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
DAL.open();
SqlParameter[] param = new SqlParameter[10];
param[0] = new SqlParameter("@JOB_NO", SqlDbType.Int);
param[0].Value = JOB_NO;
param[1] = new SqlParameter("@ENGINEER_RESPOSIBLE", SqlDbType.VarChar, 250);
param[1].Value = ENGINEER_RESPOSIBLE;
param[2] = new SqlParameter("@DATE", SqlDbType.DateTime);
param[2].Value = DATE;
param[3] = new SqlParameter("@COMPANY_NAME", SqlDbType.VarChar, 250);
param[3].Value = COMPANY_NAME;
param[4] = new SqlParameter("@CUSTOMER_NAME", SqlDbType.VarChar, 250);
param[4].Value = CUSTOMER_NAME;
param[5] = new SqlParameter("@SUBJECT", SqlDbType.VarChar, 250);
param[5].Value = SUBJECT;
param[6] = new SqlParameter("@REFERENCE", SqlDbType.VarChar, 250);
param[6].Value = REFERENCE;
param[7] = new SqlParameter("@ACKNOWLEDGMENT_COPY", SqlDbType.VarChar, 250);
param[7].Value = ACKNOWLEDGMENT_COPY;
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.VarChar, 250);
param[8].Value = ACKNOWLEDGMENT_DATE;
param[9] = new SqlParameter("@NOTES", SqlDbType.VarChar, 250);
param[9].Value = NOTES;
DAL.ExecuteCommand("Update_Invoice", param);
DAL.close();
}
ياريت اي حد يساعدني ويقولى المشكلة فين
ولكم جزيل الشكر
المشاركات : 100
المواضيع 1
الإنتساب : Jan 2019
السمعة :
35
الشكر: 189
تم شكره 249 مرات في 107 مشاركات
لا اعرف طريقه DAL.DataAccessLayer
ولكن هذه الطريقه التي اعرفها جربها فقد جربتها لدي
وتعمل على تحديث السطر حسب شرط NOTES=@NOTES
ولو ان الشرط غريب لان العاده الشرط يكون برقم id او code
SqlConnection con = new SqlConnection(@"..............");
public void Update_Invoice(int JOB_NO, string ENGINEER_RESPOSIBLE, DateTime DATE,
string COMPANY_NAME, string CUSTOMER_NAME, string SUBJECT, string REFERENCE,
string ACKNOWLEDGMENT_COPY, string ACKNOWLEDGMENT_DATE, string NOTES)
{
if (con.State != ConnectionState.Open) con.Open();
SqlCommand cmd = new SqlCommand("Update_Invoice", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@JOB_NO", JOB_NO);
cmd.Parameters.AddWithValue("@ENGINEER_RESPOSIBLE", ENGINEER_RESPOSIBLE);
cmd.Parameters.AddWithValue("@DATE", DATE);
cmd.Parameters.AddWithValue("@COMPANY_NAME", COMPANY_NAME);
cmd.Parameters.AddWithValue("@CUSTOMER_NAME", CUSTOMER_NAME);
cmd.Parameters.AddWithValue("@SUBJECT", SUBJECT);
cmd.Parameters.AddWithValue("@REFERENCE", REFERENCE);
cmd.Parameters.AddWithValue("@ACKNOWLEDGMENT_COPY", ACKNOWLEDGMENT_COPY);
cmd.Parameters.AddWithValue("@ACKNOWLEDGMENT_DATE", ACKNOWLEDGMENT_DATE);
cmd.Parameters.AddWithValue("@NOTES", NOTES);
int ret = cmd.ExecuteNonQuery();
con.Close();
}
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
08-04-19, 02:49 PM
(آخر تعديل لهذه المشاركة : 08-04-19, 02:51 PM {2} بواسطة maxruined.)
(08-04-19, 03:10 AM)بدري كتب : لا اعرف طريقه DAL.DataAccessLayer
ولكن هذه الطريقه التي اعرفها جربها فقد جربتها لدي
وتعمل على تحديث السطر حسب شرط NOTES=@NOTES
ولو ان الشرط غريب لان العاده الشرط يكون برقم id او code
SqlConnection con = new SqlConnection(@"..............");
public void Update_Invoice(int JOB_NO, string ENGINEER_RESPOSIBLE, DateTime DATE,
string COMPANY_NAME, string CUSTOMER_NAME, string SUBJECT, string REFERENCE,
string ACKNOWLEDGMENT_COPY, string ACKNOWLEDGMENT_DATE, string NOTES)
{
if (con.State != ConnectionState.Open) con.Open();
SqlCommand cmd = new SqlCommand("Update_Invoice", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@JOB_NO", JOB_NO);
cmd.Parameters.AddWithValue("@ENGINEER_RESPOSIBLE", ENGINEER_RESPOSIBLE);
cmd.Parameters.AddWithValue("@DATE", DATE);
cmd.Parameters.AddWithValue("@COMPANY_NAME", COMPANY_NAME);
cmd.Parameters.AddWithValue("@CUSTOMER_NAME", CUSTOMER_NAME);
cmd.Parameters.AddWithValue("@SUBJECT", SUBJECT);
cmd.Parameters.AddWithValue("@REFERENCE", REFERENCE);
cmd.Parameters.AddWithValue("@ACKNOWLEDGMENT_COPY", ACKNOWLEDGMENT_COPY);
cmd.Parameters.AddWithValue("@ACKNOWLEDGMENT_DATE", ACKNOWLEDGMENT_DATE);
cmd.Parameters.AddWithValue("@NOTES", NOTES);
int ret = cmd.ExecuteNonQuery();
con.Close();
}
مش فاهمك كويس يا استاذ بدرى ياريت توضيح اكتر ...
للعلم انا بستخدم ال SQL stored procedure
ف بتمني انك تقدر تساعدني
بالنسبه ل DAL
دا class عندي .. اهو
كود :
class DataAccessLayer
{
SqlConnection sqlconnection;
public DataAccessLayer()
{
sqlconnection = new SqlConnection(@"server=.\; Database=sam-steel; Integrated Security=true");
}
public void open()
{
if (sqlconnection.State != ConnectionState.Open)
{
sqlconnection.Open();
}
}
public void close()
{
if (sqlconnection.State == ConnectionState.Open)
{
sqlconnection.Close();
}
}
public DataTable SelectData(string stored_procedure, SqlParameter[] param)
{
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = stored_procedure;
sqlcmd.Connection = sqlconnection;
if (param != null)
{
for (int i = 0; i < param.Length; i++)
{
sqlcmd.Parameters.Add(param[i]);
}
}
SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
public void ExecuteCommand(string stored_procedure, SqlParameter[] param)
{
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = stored_procedure;
sqlcmd.Connection = sqlconnection;
if (param != null)
{
sqlcmd.Parameters.AddRange(param);
}
sqlcmd.ExecuteNonQuery();
}
المشاركات : 3,815
المواضيع 36
الإنتساب : Mar 2014
السمعة :
724
الشكر: 7238
تم شكره 6709 مرات في 3265 مشاركات
وعليكم السلام ورحمة الله وبركاته
اسف لتاخري بالرد لعدم تواجدى تقريباً امس
على اى حال شوف ركز معايا هنا فى الشرح لتوضح ما سبب
الخطاء الذى لديك ولماذا هذا وكيف حلها والحل سيعتمد انك تفهم الفكرة
حتى لا تقع بها مجدداً
اولاً فى كود الخاص بـ :
انت تستخدم على هذا النحو
كود :
ALTER proc [dbo].[Update_Invoice]
@JOB_NO int,
@ENGINEER_RESPOSIBLE varchar(250),
@DATE datetime,
@COMPANY_NAME varchar(250),
@CUSTOMER_NAME varchar(250),
@SUBJECT varchar(250),
@REFERENCE varchar(250),
@ACKNOWLEDGMENT_COPY varchar(250),
@ACKNOWLEDGMENT_DATE varchar(250),
@NOTES varchar(250)
as
update INVOICES
set NOTES=@NOTES,
JOB_NO=@JOB_NO,
ENGINEER_RESPOSIBLE=@ENGINEER_RESPOSIBLE,
date=@DATE,
COMPANY_NAME=@COMPANY_NAME,
CUSTOMER_NAME=@CUSTOMER_NAME,
SUBJECT=@SUBJECT,
REFERENCE=@REFERENCE,
ACKNOWLEDGMENT_COPY=@ACKNOWLEDGMENT_COPY,
ACKNOWLEDGMENT_DATE=@ACKNOWLEDGMENT_DATE
where NOTES=@NOTES
فى البداية ساوضح السطر الذى يحتوى على مشكلة
لما هو بالموضوع وبعدها ساقوم بتوضيح اسطر كا
ملاحظة بحاجة لمراجعتها منك انت شخصياً
السطر الذى يسبب مشكلة فهو :
كود :
where NOTES = @NOTES
بالسطر ده انت كانت بتقول
ان عدل البيانات اللى انت كتبتها بنائاً على توافق جميع الملاحظات
لما هو مدخل فى textBox خاص الملاحظات
وهذا خطاء جداً
لانك يبدو لم تستوعب فكرة كلمة where فى كود التحديث
الفكرة من هذه الكلمة هو كا فكرة البحث او الفلتر تماماً
بمعنى انت محتاج تعدل بيانات على شخص واحد باسم : maxruined
والشخص ده يحمل ID رقم 34222
فهنا لاتمام تعديل بيانات للشخص ده فقط دون التعديل على اى شخص اخر
فهنا انا مطلوب ان اقوم بعمل
والتى سيتم ارسال قيمة @uid بـ 34222
او انك تستخدم بهذا الشكل
كود :
where username = @username
والى هيكون قيمته هو maxruined
طيب ايهم افضل طريقة الـ id ولا user
بكل تاكيد وبدون اى تفكير عن طريق id
لان مش بس المساحة فى البحث اللى هيقلل من الوقت فى تنفيذ الامر
كذلك لضمان ان الرقم بطبيعة الحال غير مكرر عكس الاسم من الممكن ان يكون كا الاسم العام
وقد يكون مكرر من تشابه الاسماء بالعالم ولكن اذا كان الاسم كا اسم مستخدم غير مكرر فيمكن استخدامه
ولكن سيكون مدة تنفيذ الامر اكثر وقتاً من تنفيذ الامر من خلال الرقم
فهنا لحل المشكلة يجب ان يكون الكود الخاص بك
لاخر سطر بهذا الشكل
كود :
where JOB_NO = @JOB_NO
وبكده يكون تم حل المشكلة
طيب بخصوص الملاحظات اللى رايتها واريد التحدث عنها
الملاحظة الاولى وهو هذا السطر من نفس الكود
من المفترض ان هذا العمود عبارة عن رقم الوظيفة
اللى ادخل اول مرة ولا يقبل للتغيير وكذلك للتكرار
بمعنى ان هذا العمود يفترض انه عبارة عن ID
اذا كان موجود او لا فى الجدول عمود باسم ID
وياخذ رقم تلقائي عند ادخال
فايضاً عمود JOB_NO يجب ان يكون محدد بمفتاح
حتى لا يكون به اى تكرار فى الارقام
وبعد اتمام ذلك وتنفيذ هذا الامر فهنا
ايضاً هذا السطر
لم يعد وجود وسط الكود اى اهمية
فقط يكفي ان يكون تواجده بهذا السطر فقط
كود :
where JOB_NO = @JOB_NO
طيب الملاحظة الثانية وبنفس الكود
وهو عن هذا السطر
كود :
ACKNOWLEDGMENT_DATE = @ACKNOWLEDGMENT_DATE
ما الاحظه انه من المفترض ان يكون هذا العمود تاريخ
ولكن مع ذلك تم تعريف قيمة المدخلة لهذا العمود نص من خلال هذا السطر
كود :
@ACKNOWLEDGMENT_DATE varchar(250),
وهذا خطاء اذا كان العمود فعلياً تاريخ
فيجب ان يكون السطر بهذا الشكل
كود :
@ACKNOWLEDGMENT_DATE datetime,
فالامر هنا يتطلب مراجعتك والتاكد من صحة الامر
طيب الملاحظة الاخيرة
وهى بناءاً ما تم الشرح بخصوص عمود JOB_NO
فهنا عند اتمام تحرير البيانات فيجب ان تكون textBox الخاص بقيمة JOB_NO
ان تجعل خصائصه للقراءة فقط اى غير قابل للتعديل عليه من قبل المستخدم
لان كما تم الشرح انه سيكون مستخدم فى سطر
كود :
where JOB_NO = @JOB_NO
وهذا يعنى ان القيمة هنا موجودة فعلياً قبل اتمام التعديل وبعده
الا اذا كنت تريد اتمام التعديل و تريد ايضاً تكرار الارقام بهذا العمود
فيجب عليك اضاً استخدام عمود ID للترقيم التسلسلى التلقائي
بالنهاية الكود الخاص بـ stored procedure سيكون بهذا الشكل
وتذكر بانى جعلت تعريف ACKNOWLEDGMENT_DATE بكونه تاريخ فعدله فقط لما هو لديك
كود :
ALTER proc[dbo].[Update_Invoice]
@JOB_NO int,
@ENGINEER_RESPOSIBLE varchar(250),
@DATE datetime,
@COMPANY_NAME varchar(250),
@CUSTOMER_NAME varchar(250),
@SUBJECT varchar(250),
@REFERENCE varchar(250),
@ACKNOWLEDGMENT_COPY varchar(250),
@ACKNOWLEDGMENT_DATE datetime,
@NOTES varchar(250)
as
update INVOICES
set JOB_NO = @JOB_NO,
ENGINEER_RESPOSIBLE = @ENGINEER_RESPOSIBLE,
date = @DATE,
COMPANY_NAME = @COMPANY_NAME,
CUSTOMER_NAME = @CUSTOMER_NAME,
SUBJECT = @SUBJECT,
REFERENCE = @REFERENCE,
ACKNOWLEDGMENT_COPY = @ACKNOWLEDGMENT_COPY,
ACKNOWLEDGMENT_DATE = @ACKNOWLEDGMENT_DATE,
NOTES = @NOTES
where JOB_NO = @JOB_NO
وبالنهاية بعد مراجعة عمود ACKNOWLEDGMENT_DATE
وان صح التعبير بانه من نوع تاريخ وليس نص
فستاتى فى كود الـ C#
وتاتى على هذا السطر
كود :
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.VarChar, 250);
وتجعله على هذا النحو
كود :
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.DateTime);
بكدة يكون تم حل المشكلة مع الملاحظات الموضحة لك
اتمنى ان يكون الشرح بسيط
وبه جميع ما تريده تماماً
تحياتى لك
وتمنياتى لك التوفيق
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
09-04-19, 03:06 PM
(آخر تعديل لهذه المشاركة : 09-04-19, 07:58 PM {2} بواسطة maxruined.)
(09-04-19, 02:08 AM)elgokr كتب : وعليكم السلام ورحمة الله وبركاته
اسف لتاخري بالرد لعدم تواجدى تقريباً امس
على اى حال شوف ركز معايا هنا فى الشرح لتوضح ما سبب
الخطاء الذى لديك ولماذا هذا وكيف حلها والحل سيعتمد انك تفهم الفكرة
حتى لا تقع بها مجدداً
اولاً فى كود الخاص بـ :
انت تستخدم على هذا النحو
كود :
ALTER proc [dbo].[Update_Invoice]
@JOB_NO int,
@ENGINEER_RESPOSIBLE varchar(250),
@DATE datetime,
@COMPANY_NAME varchar(250),
@CUSTOMER_NAME varchar(250),
@SUBJECT varchar(250),
@REFERENCE varchar(250),
@ACKNOWLEDGMENT_COPY varchar(250),
@ACKNOWLEDGMENT_DATE varchar(250),
@NOTES varchar(250)
as
update INVOICES
set NOTES=@NOTES,
JOB_NO=@JOB_NO,
ENGINEER_RESPOSIBLE=@ENGINEER_RESPOSIBLE,
date=@DATE,
COMPANY_NAME=@COMPANY_NAME,
CUSTOMER_NAME=@CUSTOMER_NAME,
SUBJECT=@SUBJECT,
REFERENCE=@REFERENCE,
ACKNOWLEDGMENT_COPY=@ACKNOWLEDGMENT_COPY,
ACKNOWLEDGMENT_DATE=@ACKNOWLEDGMENT_DATE
where NOTES=@NOTES
فى البداية ساوضح السطر الذى يحتوى على مشكلة
لما هو بالموضوع وبعدها ساقوم بتوضيح اسطر كا
ملاحظة بحاجة لمراجعتها منك انت شخصياً
السطر الذى يسبب مشكلة فهو :
كود :
where NOTES = @NOTES
بالسطر ده انت كانت بتقول
ان عدل البيانات اللى انت كتبتها بنائاً على توافق جميع الملاحظات
لما هو مدخل فى textBox خاص الملاحظات
وهذا خطاء جداً
لانك يبدو لم تستوعب فكرة كلمة where فى كود التحديث
الفكرة من هذه الكلمة هو كا فكرة البحث او الفلتر تماماً
بمعنى انت محتاج تعدل بيانات على شخص واحد باسم : maxruined
والشخص ده يحمل ID رقم 34222
فهنا لاتمام تعديل بيانات للشخص ده فقط دون التعديل على اى شخص اخر
فهنا انا مطلوب ان اقوم بعمل
والتى سيتم ارسال قيمة @uid بـ 34222
او انك تستخدم بهذا الشكل
كود :
where username = @username
والى هيكون قيمته هو maxruined
طيب ايهم افضل طريقة الـ id ولا user
بكل تاكيد وبدون اى تفكير عن طريق id
لان مش بس المساحة فى البحث اللى هيقلل من الوقت فى تنفيذ الامر
كذلك لضمان ان الرقم بطبيعة الحال غير مكرر عكس الاسم من الممكن ان يكون كا الاسم العام
وقد يكون مكرر من تشابه الاسماء بالعالم ولكن اذا كان الاسم كا اسم مستخدم غير مكرر فيمكن استخدامه
ولكن سيكون مدة تنفيذ الامر اكثر وقتاً من تنفيذ الامر من خلال الرقم
فهنا لحل المشكلة يجب ان يكون الكود الخاص بك
لاخر سطر بهذا الشكل
كود :
where JOB_NO = @JOB_NO
وبكده يكون تم حل المشكلة
طيب بخصوص الملاحظات اللى رايتها واريد التحدث عنها
الملاحظة الاولى وهو هذا السطر من نفس الكود
من المفترض ان هذا العمود عبارة عن رقم الوظيفة
اللى ادخل اول مرة ولا يقبل للتغيير وكذلك للتكرار
بمعنى ان هذا العمود يفترض انه عبارة عن ID
اذا كان موجود او لا فى الجدول عمود باسم ID
وياخذ رقم تلقائي عند ادخال
فايضاً عمود JOB_NO يجب ان يكون محدد بمفتاح
حتى لا يكون به اى تكرار فى الارقام
وبعد اتمام ذلك وتنفيذ هذا الامر فهنا
ايضاً هذا السطر
لم يعد وجود وسط الكود اى اهمية
فقط يكفي ان يكون تواجده بهذا السطر فقط
كود :
where JOB_NO = @JOB_NO
طيب الملاحظة الثانية وبنفس الكود
وهو عن هذا السطر
كود :
ACKNOWLEDGMENT_DATE = @ACKNOWLEDGMENT_DATE
ما الاحظه انه من المفترض ان يكون هذا العمود تاريخ
ولكن مع ذلك تم تعريف قيمة المدخلة لهذا العمود نص من خلال هذا السطر
كود :
@ACKNOWLEDGMENT_DATE varchar(250),
وهذا خطاء اذا كان العمود فعلياً تاريخ
فيجب ان يكون السطر بهذا الشكل
كود :
@ACKNOWLEDGMENT_DATE datetime,
فالامر هنا يتطلب مراجعتك والتاكد من صحة الامر
طيب الملاحظة الاخيرة
وهى بناءاً ما تم الشرح بخصوص عمود JOB_NO
فهنا عند اتمام تحرير البيانات فيجب ان تكون textBox الخاص بقيمة JOB_NO
ان تجعل خصائصه للقراءة فقط اى غير قابل للتعديل عليه من قبل المستخدم
لان كما تم الشرح انه سيكون مستخدم فى سطر
كود :
where JOB_NO = @JOB_NO
وهذا يعنى ان القيمة هنا موجودة فعلياً قبل اتمام التعديل وبعده
الا اذا كنت تريد اتمام التعديل و تريد ايضاً تكرار الارقام بهذا العمود
فيجب عليك اضاً استخدام عمود ID للترقيم التسلسلى التلقائي
بالنهاية الكود الخاص بـ stored procedure سيكون بهذا الشكل
وتذكر بانى جعلت تعريف ACKNOWLEDGMENT_DATE بكونه تاريخ فعدله فقط لما هو لديك
كود :
ALTER proc[dbo].[Update_Invoice]
@JOB_NO int,
@ENGINEER_RESPOSIBLE varchar(250),
@DATE datetime,
@COMPANY_NAME varchar(250),
@CUSTOMER_NAME varchar(250),
@SUBJECT varchar(250),
@REFERENCE varchar(250),
@ACKNOWLEDGMENT_COPY varchar(250),
@ACKNOWLEDGMENT_DATE datetime,
@NOTES varchar(250)
as
update INVOICES
set JOB_NO = @JOB_NO,
ENGINEER_RESPOSIBLE = @ENGINEER_RESPOSIBLE,
date = @DATE,
COMPANY_NAME = @COMPANY_NAME,
CUSTOMER_NAME = @CUSTOMER_NAME,
SUBJECT = @SUBJECT,
REFERENCE = @REFERENCE,
ACKNOWLEDGMENT_COPY = @ACKNOWLEDGMENT_COPY,
ACKNOWLEDGMENT_DATE = @ACKNOWLEDGMENT_DATE,
NOTES = @NOTES
where JOB_NO = @JOB_NO
وبالنهاية بعد مراجعة عمود ACKNOWLEDGMENT_DATE
وان صح التعبير بانه من نوع تاريخ وليس نص
فستاتى فى كود الـ C#
وتاتى على هذا السطر
كود :
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.VarChar, 250);
وتجعله على هذا النحو
كود :
param[8] = new SqlParameter("@ACKNOWLEDGMENT_DATE", SqlDbType.DateTime);
بكدة يكون تم حل المشكلة مع الملاحظات الموضحة لك
اتمنى ان يكون الشرح بسيط
وبه جميع ما تريده تماماً
تحياتى لك
وتمنياتى لك التوفيق
حرفياً .. من اكتر الناس اللى بتشرح بطريقه رهيبه .. شكراً جداً
بس فيه مشكلة اخيره
وهى اني لما عملت جدول جديد سميته S.N وحددته بمفتاح علشان ميعملش تكرار للارقام
بس المشكلة انى لو حذفت سطر فى النص مثلاً عندى ارقام من 1 الى 10 لو حذفت الرقم 4 هلاقي زي كدا
1.2.3.5.6.7.8.9.10 من غير رقم 4 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز
وتانى مره الف مليون شكر
المشاركات : 3,815
المواضيع 36
الإنتساب : Mar 2014
السمعة :
724
الشكر: 7238
تم شكره 6709 مرات في 3265 مشاركات
(09-04-19, 03:06 PM)maxruined كتب : حرفياً .. من اكتر الناس اللى بتشرح بطريقه رهيبه .. شكراً جداً
بس فيه مشكلة اخيره
وهى اني لما عملت جدول جديد سميته S.N وحددته بمفتاح علشان ميعملش تكرار للارقام
بس المشكلة انى لو حذفت سطر فى النص مثلاً عندى ارقام من 1 الى 10 لو حذفت الرقم 4 هلاقي زي كدا
1.2.3.5.6.7.8.9.10 من غير رقم 4 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز
وتانى مره الف مليون شكر
الشكر لله والحمد لله
والحمد لله على كل حال
هذه شهادة اعتز بها
بخصوص عمود الترقيم التلقائي
لا تحتاج الى استخدامه كا استخدام رئيسي فى العرض
او الاستخدام العام فوجود الترقيم التلقائي فقط للتعامل مع التعديل والحذف فقط
بمعنى لنقول ان لديك جدول يخص المستخدمين فطبيعة الحال الاعمدة ستكون
اسم المستخدم - كلمة المرور - ملاحظات [ كمثال ]
فالان عند انشاء الجدول سيكون
فبكدة تكون قمت بانشاء الاعمدة الرئيسية
مضافاً عليهم عمود id للترقيم التلقائي
عند الاستعلام سيتم عمل الاستعلام العادي اذا كان من خلال * او تحديد اسماء الاعمدة
ولكن عند عرضها مثلاً فى الداتا جريد او ما شبه ولتجنب الترقيم كما تقول
سيتم استخدام مثل كود التالى
لنقول ان بالبداية ان كود الاستعلام بهذا الشكل
كود :
SELECT * FROM users
وتم تعريف قيمة الاستعلام الى DT
وطبعاً كما قلنا كمثال ان الاستعلام سيتم جلب كلاً من
فلاحظ هنا كود ارسال القيمة DT الى DataGridView
كود :
dataGridView1.DataSource = DT;
فقط اسفل هذا السطر قم باضافة هذا الكود
كود :
int ii = 0;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
ii++;
row.Cells["id"].Value = ii;
}
ستجد ان الترقيم فى داتا جريد مهما كان عملية البحث او الفلتر
ان الترقيم يبداء من 1 وما اعلى وليس لقيمة id فى جدول قاعدة البيانات
تذكر عند اتمام عملية التعديل والحذف
لا تقوم باخذ القيمة id الداتا جريد فهنا ستحتاج الى القيمة الفعلية للرقم التسلسلى من DT
لان كما انت قلت من الممكن ان يكون الترقيم فى قاعدة البينات بهذا الشكل
حيث ان رقم 3 غير موجود ولكن فى الداتا جريد بهذا الشكل
فطبعاً اذا كنت تريد التعديل على رقم 3 كما فى الداتا جريد فهو غير موجود
لان الرقم الصحيح للترقيمة بقاعدة البيانات هى 4 وليس 3
فهنا سيتم عمل التالى
فى حدث الكل بالداتا جريد او حسب ما تريد لاى حدث فى الداتا جريد
استخدم الكود التالى
كود :
id = DT(e.RowIndex)("id");
ولا تنسي ان تضع هذا التعريف خارج نطاق اى حدث
بكده كلما تم تحديد اى سطر من الداتا جريد
من خلال اى خلايا فسيتم ارسال قيمة ID لهذا البيان الفعلى الى المعرف ID المنشئ
فبكده عند اتمام التعديل او الحذف وما شبه سيتم استخدام
اتمنى ان تكون الصورة وضحت كاملاً
والشرح يكون كاملاً لما قد يخطر ببالك
تحياتى لك
وتمنياتى لك التوفيق
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
(10-04-19, 09:54 AM)elgokr كتب : (09-04-19, 03:06 PM)maxruined كتب : حرفياً .. من اكتر الناس اللى بتشرح بطريقه رهيبه .. شكراً جداً
بس فيه مشكلة اخيره
وهى اني لما عملت جدول جديد سميته S.N وحددته بمفتاح علشان ميعملش تكرار للارقام
بس المشكلة انى لو حذفت سطر فى النص مثلاً عندى ارقام من 1 الى 10 لو حذفت الرقم 4 هلاقي زي كدا
1.2.3.5.6.7.8.9.10 من غير رقم 4 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز
وتانى مره الف مليون شكر
الشكر لله والحمد لله
والحمد لله على كل حال
هذه شهادة اعتز بها
بخصوص عمود الترقيم التلقائي
لا تحتاج الى استخدامه كا استخدام رئيسي فى العرض
او الاستخدام العام فوجود الترقيم التلقائي فقط للتعامل مع التعديل والحذف فقط
بمعنى لنقول ان لديك جدول يخص المستخدمين فطبيعة الحال الاعمدة ستكون
اسم المستخدم - كلمة المرور - ملاحظات [ كمثال ]
فالان عند انشاء الجدول سيكون
فبكدة تكون قمت بانشاء الاعمدة الرئيسية
مضافاً عليهم عمود id للترقيم التلقائي
عند الاستعلام سيتم عمل الاستعلام العادي اذا كان من خلال * او تحديد اسماء الاعمدة
ولكن عند عرضها مثلاً فى الداتا جريد او ما شبه ولتجنب الترقيم كما تقول
سيتم استخدام مثل كود التالى
لنقول ان بالبداية ان كود الاستعلام بهذا الشكل
كود :
SELECT * FROM users
وتم تعريف قيمة الاستعلام الى DT
وطبعاً كما قلنا كمثال ان الاستعلام سيتم جلب كلاً من
فلاحظ هنا كود ارسال القيمة DT الى DataGridView
كود :
dataGridView1.DataSource = DT;
فقط اسفل هذا السطر قم باضافة هذا الكود
كود :
int ii = 0;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
ii++;
row.Cells["id"].Value = ii;
}
ستجد ان الترقيم فى داتا جريد مهما كان عملية البحث او الفلتر
ان الترقيم يبداء من 1 وما اعلى وليس لقيمة id فى جدول قاعدة البيانات
تذكر عند اتمام عملية التعديل والحذف
لا تقوم باخذ القيمة id الداتا جريد فهنا ستحتاج الى القيمة الفعلية للرقم التسلسلى من DT
لان كما انت قلت من الممكن ان يكون الترقيم فى قاعدة البينات بهذا الشكل
حيث ان رقم 3 غير موجود ولكن فى الداتا جريد بهذا الشكل
فطبعاً اذا كنت تريد التعديل على رقم 3 كما فى الداتا جريد فهو غير موجود
لان الرقم الصحيح للترقيمة بقاعدة البيانات هى 4 وليس 3
فهنا سيتم عمل التالى
فى حدث الكل بالداتا جريد او حسب ما تريد لاى حدث فى الداتا جريد
استخدم الكود التالى
كود :
id = DT(e.RowIndex)("id");
ولا تنسي ان تضع هذا التعريف خارج نطاق اى حدث
بكده كلما تم تحديد اى سطر من الداتا جريد
من خلال اى خلايا فسيتم ارسال قيمة ID لهذا البيان الفعلى الى المعرف ID المنشئ
فبكده عند اتمام التعديل او الحذف وما شبه سيتم استخدام
اتمنى ان تكون الصورة وضحت كاملاً
والشرح يكون كاملاً لما قد يخطر ببالك
تحياتى لك
وتمنياتى لك التوفيق
الكلام مش كافى علشان اشكرك
بجد شكراً اوى اوى اوى
انت لو مدرس هتبقي عظيم جداً
مليون تحيه وشكر ليك
المشاركات : 3,815
المواضيع 36
الإنتساب : Mar 2014
السمعة :
724
الشكر: 7238
تم شكره 6709 مرات في 3265 مشاركات
(10-04-19, 03:37 PM)maxruined كتب : الكلام مش كافى علشان اشكرك
بجد شكراً اوى اوى اوى
انت لو مدرس هتبقي عظيم جداً
مليون تحيه وشكر ليك
الشكر لله والحمد لله
والحمد لله على كل حال
تحياتى لك
وتمنياتى لك التوفيق
|