تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[تم الحل] مشكلة فى كود ال Update على SQL
#1
السلام عليكم 
واجهتني مشكلة وهي ان لما بعمل ابديت لاى سطر فى الدتا جريد فيو الاقي الابديت اتعمل على كل الاسطر باستنثاء الاسطر اللى كاتب فيها 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();
       }

ياريت اي حد يساعدني ويقولى المشكلة فين 

ولكم جزيل الشكر
الرد
تم الشكر بواسطة:
#2
لا اعرف طريقه 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();
}
الرد
تم الشكر بواسطة: sendbad100
#3
(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();
       }
الرد
تم الشكر بواسطة:
#4
وعليكم السلام ورحمة الله وبركاته

اسف لتاخري بالرد لعدم تواجدى تقريباً امس
على اى حال شوف ركز معايا هنا فى الشرح لتوضح ما سبب
الخطاء الذى لديك ولماذا هذا وكيف حلها والحل سيعتمد انك تفهم الفكرة
حتى لا تقع بها مجدداً

اولاً فى كود الخاص بـ : 
PHP كود :
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

فى البداية ساوضح السطر الذى يحتوى على مشكلة
لما هو بالموضوع وبعدها ساقوم بتوضيح اسطر كا 
ملاحظة بحاجة لمراجعتها منك انت شخصياً

السطر الذى يسبب مشكلة فهو :
كود :
           where NOTES = @NOTES

بالسطر ده انت كانت بتقول
ان عدل البيانات اللى انت كتبتها بنائاً على توافق جميع الملاحظات
لما هو مدخل فى textBox خاص الملاحظات

وهذا خطاء جداً
لانك يبدو لم تستوعب فكرة كلمة where فى كود التحديث

الفكرة من هذه الكلمة هو كا فكرة البحث او الفلتر تماماً
بمعنى انت محتاج تعدل بيانات على شخص واحد باسم : maxruined
والشخص ده يحمل ID رقم 34222

فهنا لاتمام تعديل بيانات للشخص ده فقط دون التعديل على اى شخص اخر
فهنا انا مطلوب ان اقوم بعمل 
كود :
where uid = @uid

والتى سيتم ارسال قيمة @uid بـ 34222

او انك تستخدم بهذا الشكل
كود :
where username = @username

والى هيكون قيمته هو maxruined
طيب ايهم افضل طريقة الـ id ولا user
بكل تاكيد وبدون اى تفكير عن طريق id

لان مش بس المساحة فى البحث اللى هيقلل من الوقت فى تنفيذ الامر
كذلك لضمان ان الرقم بطبيعة الحال غير مكرر عكس الاسم من الممكن ان يكون كا الاسم العام
وقد يكون مكرر من تشابه الاسماء بالعالم ولكن اذا كان الاسم كا اسم مستخدم غير مكرر فيمكن استخدامه
ولكن سيكون مدة تنفيذ الامر اكثر وقتاً من تنفيذ  الامر من خلال الرقم

فهنا لحل المشكلة يجب ان يكون الكود الخاص بك

لاخر سطر بهذا الشكل
كود :
where JOB_NO = @JOB_NO

وبكده يكون تم حل المشكلة
طيب بخصوص الملاحظات اللى رايتها واريد التحدث عنها

الملاحظة الاولى وهو هذا السطر من نفس الكود
كود :
JOB_NO = @JOB_NO,

من المفترض ان هذا العمود عبارة عن رقم الوظيفة
اللى ادخل اول مرة ولا يقبل للتغيير وكذلك للتكرار
بمعنى ان هذا العمود يفترض انه عبارة عن ID 
اذا كان موجود او لا فى الجدول عمود باسم ID
وياخذ رقم تلقائي عند ادخال
فايضاً عمود JOB_NO يجب ان يكون محدد بمفتاح 
حتى لا يكون به اى تكرار فى الارقام

وبعد اتمام ذلك وتنفيذ هذا الامر فهنا

ايضاً هذا السطر
كود :
JOB_NO = @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);

بكدة يكون تم حل المشكلة مع الملاحظات الموضحة لك

اتمنى ان يكون الشرح بسيط
وبه جميع ما تريده تماماً

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
#5
(09-04-19, 02:08 AM)elgokr كتب :
وعليكم السلام ورحمة الله وبركاته

اسف لتاخري بالرد لعدم تواجدى تقريباً امس
على اى حال شوف ركز معايا هنا فى الشرح لتوضح ما سبب
الخطاء الذى لديك ولماذا هذا وكيف حلها والحل سيعتمد انك تفهم الفكرة
حتى لا تقع بها مجدداً

اولاً فى كود الخاص بـ : 
PHP كود :
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

فى البداية ساوضح السطر الذى يحتوى على مشكلة
لما هو بالموضوع وبعدها ساقوم بتوضيح اسطر كا 
ملاحظة بحاجة لمراجعتها منك انت شخصياً

السطر الذى يسبب مشكلة فهو :
كود :
           where NOTES = @NOTES

بالسطر ده انت كانت بتقول
ان عدل البيانات اللى انت كتبتها بنائاً على توافق جميع الملاحظات
لما هو مدخل فى textBox خاص الملاحظات

وهذا خطاء جداً
لانك يبدو لم تستوعب فكرة كلمة where فى كود التحديث

الفكرة من هذه الكلمة هو كا فكرة البحث او الفلتر تماماً
بمعنى انت محتاج تعدل بيانات على شخص واحد باسم : maxruined
والشخص ده يحمل ID رقم 34222

فهنا لاتمام تعديل بيانات للشخص ده فقط دون التعديل على اى شخص اخر
فهنا انا مطلوب ان اقوم بعمل 
كود :
where uid = @uid

والتى سيتم ارسال قيمة @uid بـ 34222

او انك تستخدم بهذا الشكل
كود :
where username = @username

والى هيكون قيمته هو maxruined
طيب ايهم افضل طريقة الـ id ولا user
بكل تاكيد وبدون اى تفكير عن طريق id

لان مش بس المساحة فى البحث اللى هيقلل من الوقت فى تنفيذ الامر
كذلك لضمان ان الرقم بطبيعة الحال غير مكرر عكس الاسم من الممكن ان يكون كا الاسم العام
وقد يكون مكرر من تشابه الاسماء بالعالم ولكن اذا كان الاسم كا اسم مستخدم غير مكرر فيمكن استخدامه
ولكن سيكون مدة تنفيذ الامر اكثر وقتاً من تنفيذ  الامر من خلال الرقم

فهنا لحل المشكلة يجب ان يكون الكود الخاص بك

لاخر سطر بهذا الشكل
كود :
where JOB_NO = @JOB_NO

وبكده يكون تم حل المشكلة
طيب بخصوص الملاحظات اللى رايتها واريد التحدث عنها

الملاحظة الاولى وهو هذا السطر من نفس الكود
كود :
JOB_NO = @JOB_NO,

من المفترض ان هذا العمود عبارة عن رقم الوظيفة
اللى ادخل اول مرة ولا يقبل للتغيير وكذلك للتكرار
بمعنى ان هذا العمود يفترض انه عبارة عن ID 
اذا كان موجود او لا فى الجدول عمود باسم ID
وياخذ رقم تلقائي عند ادخال
فايضاً عمود JOB_NO يجب ان يكون محدد بمفتاح 
حتى لا يكون به اى تكرار فى الارقام

وبعد اتمام ذلك وتنفيذ هذا الامر فهنا

ايضاً هذا السطر
كود :
JOB_NO = @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 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز 
وتانى مره الف مليون شكر
الرد
تم الشكر بواسطة: elgokr
#6
(09-04-19, 03:06 PM)maxruined كتب : حرفياً .. من اكتر الناس اللى بتشرح بطريقه رهيبه .. شكراً جداً 
بس فيه مشكلة اخيره 
وهى اني لما عملت جدول جديد سميته S.N وحددته بمفتاح علشان ميعملش تكرار للارقام 
بس المشكلة انى لو حذفت سطر فى النص مثلاً عندى ارقام من 1 الى 10 لو حذفت الرقم 4 هلاقي زي كدا 
1.2.3.5.6.7.8.9.10 من غير رقم 4 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز 
وتانى مره الف مليون شكر

الشكر لله والحمد لله 
والحمد لله على كل حال

هذه شهادة اعتز بها
بخصوص عمود الترقيم التلقائي
لا تحتاج الى استخدامه كا استخدام رئيسي فى العرض
او الاستخدام العام فوجود الترقيم التلقائي فقط للتعامل مع التعديل والحذف فقط

بمعنى لنقول ان لديك جدول يخص المستخدمين فطبيعة الحال الاعمدة ستكون
اسم المستخدم - كلمة المرور - ملاحظات [ كمثال ]

فالان عند انشاء الجدول سيكون
PHP كود :
user-pass-note 

فبكدة تكون قمت بانشاء الاعمدة الرئيسية 
مضافاً عليهم عمود id للترقيم التلقائي

عند الاستعلام سيتم عمل الاستعلام العادي اذا كان من خلال * او تحديد اسماء الاعمدة
ولكن عند عرضها مثلاً فى الداتا جريد او ما شبه ولتجنب الترقيم كما تقول
سيتم استخدام مثل كود التالى
لنقول ان بالبداية ان كود الاستعلام بهذا الشكل
كود :
SELECT * FROM users

وتم تعريف قيمة الاستعلام الى DT

وطبعاً  كما قلنا كمثال ان الاستعلام سيتم جلب كلاً من 
كود :
id-user-pass-note

فلاحظ هنا كود ارسال القيمة DT الى DataGridView
كود :
dataGridView1.DataSource = DT;

فقط اسفل هذا السطر قم باضافة هذا الكود
كود :
           int ii = 0;
           foreach (DataGridViewRow row in dataGridView1.Rows)
           {
               ii++;
               row.Cells["id"].Value = ii;
           }

ستجد ان الترقيم فى داتا جريد مهما كان عملية البحث او الفلتر
ان الترقيم يبداء من 1 وما اعلى وليس لقيمة id فى جدول قاعدة البيانات

تذكر عند اتمام عملية التعديل والحذف
لا تقوم باخذ القيمة id الداتا جريد فهنا ستحتاج الى القيمة الفعلية للرقم التسلسلى من DT

لان كما انت قلت من الممكن ان يكون الترقيم فى قاعدة البينات بهذا الشكل
كود :
1 - 2 - 4 - 5 - 6

حيث ان رقم 3 غير موجود ولكن فى الداتا جريد بهذا الشكل
كود :
1 - 2 - 3 - 4 - 5

فطبعاً اذا كنت تريد التعديل على رقم 3 كما فى الداتا جريد فهو غير موجود
لان الرقم الصحيح للترقيمة بقاعدة البيانات هى 4 وليس 3

فهنا سيتم عمل التالى
فى حدث الكل بالداتا جريد او حسب ما تريد لاى حدث فى الداتا جريد
استخدم الكود التالى
كود :
id = DT(e.RowIndex)("id");

ولا تنسي ان تضع هذا التعريف خارج نطاق اى حدث
كود :
int id;

بكده كلما تم تحديد اى سطر من الداتا جريد
من خلال اى خلايا فسيتم ارسال قيمة ID لهذا البيان الفعلى الى المعرف ID المنشئ

فبكده عند اتمام التعديل او الحذف وما شبه سيتم استخدام
كود :
WHERE id = " + id

اتمنى ان تكون الصورة وضحت كاملاً
والشرح يكون كاملاً لما قد يخطر ببالك

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: بدري , maxruined
#7
(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 .. كنت عايزه يعمل ابديت للارقام بعد ما امسح اى سطر من الداتا بيز 
وتانى مره الف مليون شكر

الشكر لله والحمد لله 
والحمد لله على كل حال

هذه شهادة اعتز بها
بخصوص عمود الترقيم التلقائي
لا تحتاج الى استخدامه كا استخدام رئيسي فى العرض
او الاستخدام العام فوجود الترقيم التلقائي فقط للتعامل مع التعديل والحذف فقط

بمعنى لنقول ان لديك جدول يخص المستخدمين فطبيعة الحال الاعمدة ستكون
اسم المستخدم - كلمة المرور - ملاحظات [ كمثال ]

فالان عند انشاء الجدول سيكون
PHP كود :
user-pass-note 

فبكدة تكون قمت بانشاء الاعمدة الرئيسية 
مضافاً عليهم عمود id للترقيم التلقائي

عند الاستعلام سيتم عمل الاستعلام العادي اذا كان من خلال * او تحديد اسماء الاعمدة
ولكن عند عرضها مثلاً فى الداتا جريد او ما شبه ولتجنب الترقيم كما تقول
سيتم استخدام مثل كود التالى
لنقول ان بالبداية ان كود الاستعلام بهذا الشكل
كود :
SELECT * FROM users

وتم تعريف قيمة الاستعلام الى DT

وطبعاً  كما قلنا كمثال ان الاستعلام سيتم جلب كلاً من 
كود :
id-user-pass-note

فلاحظ هنا كود ارسال القيمة DT الى DataGridView
كود :
dataGridView1.DataSource = DT;

فقط اسفل هذا السطر قم باضافة هذا الكود
كود :
           int ii = 0;
           foreach (DataGridViewRow row in dataGridView1.Rows)
           {
               ii++;
               row.Cells["id"].Value = ii;
           }

ستجد ان الترقيم فى داتا جريد مهما كان عملية البحث او الفلتر
ان الترقيم يبداء من 1 وما اعلى وليس لقيمة id فى جدول قاعدة البيانات

تذكر عند اتمام عملية التعديل والحذف
لا تقوم باخذ القيمة id الداتا جريد فهنا ستحتاج الى القيمة الفعلية للرقم التسلسلى من DT

لان كما انت قلت من الممكن ان يكون الترقيم فى قاعدة البينات بهذا الشكل
كود :
1 - 2 - 4 - 5 - 6

حيث ان رقم 3 غير موجود ولكن فى الداتا جريد بهذا الشكل
كود :
1 - 2 - 3 - 4 - 5

فطبعاً اذا كنت تريد التعديل على رقم 3 كما فى الداتا جريد فهو غير موجود
لان الرقم الصحيح للترقيمة بقاعدة البيانات هى 4 وليس 3

فهنا سيتم عمل التالى
فى حدث الكل بالداتا جريد او حسب ما تريد لاى حدث فى الداتا جريد
استخدم الكود التالى
كود :
id = DT(e.RowIndex)("id");

ولا تنسي ان تضع هذا التعريف خارج نطاق اى حدث
كود :
int id;

بكده كلما تم تحديد اى سطر من الداتا جريد
من خلال اى خلايا فسيتم ارسال قيمة ID لهذا البيان الفعلى الى المعرف ID المنشئ

فبكده عند اتمام التعديل او الحذف وما شبه سيتم استخدام
كود :
WHERE id = " + id

اتمنى ان تكون الصورة وضحت كاملاً
والشرح يكون كاملاً لما قد يخطر ببالك

تحياتى لك
وتمنياتى لك التوفيق

الكلام مش كافى علشان اشكرك 
بجد شكراً اوى اوى اوى
انت لو مدرس هتبقي عظيم جداً 
مليون تحيه وشكر ليك
الرد
تم الشكر بواسطة: elgokr
#8
(10-04-19, 03:37 PM)maxruined كتب : الكلام مش كافى علشان اشكرك 
بجد شكراً اوى اوى اوى
انت لو مدرس هتبقي عظيم جداً 
مليون تحيه وشكر ليك

الشكر لله والحمد لله
والحمد لله على كل حال

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: maxruined , asemshahen5



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم