الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أسجل ما يحدث على قاعدة البيانات في ملف Log ؟

مغلق
بدأه eng_seham في 21 يونيو 2007 · 7 رد · 671 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أريد في برنامجي عمل لوج فايل بحيث أرى اي تعديل يحدث على الداتا بيز كل ثانية من تعديل او حذف او اضافة

فهل يعرف الفكرة في عمل الـ LogFile

#2

السلام عليكم

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

public static void println(String msg)
 {
  StreamWriter sw = File.AppendText(FileName_Out);
  sw.WriteLine(msg);
  sw.Close();
 }

FileName_Out : إسم الملف الذي تريد الكتابة فيه

ومن المستحسن إستعمال ملفان أحدهما لتسجيل المخرجات المنتظرة والآخر للإستثناآت

public static void printStackTrace(Exception msg)
 {
  StreamWriter sw = File.AppendText(FileName_Stack);
  sw.WriteLine(msg);
  sw.Close();		   
 }

في كلتا الدالتين يتم تحدث محتويات الملفات لذلك ينبغي التأكد من وجودهما وإنشأهما في حال عدم العثور عليهما.

FileName_Stack: : إسم الملف الذي تريد الكتابة فيه

 public void creater(string FileName_Stack, string FileName_Out)
{ // Create the files SystemOut and stack
 try
  {
   StreamWriter swStack = File.CreateText(FileName_Stack);
   StreamWriter sw = File.CreateText(FileName_Out);
   sw.Close(); swStack.Close();
  }
   catch (UnauthorizedAccessException UNexp) { MessageBox.Show(UNexp.Message); }
}

بإمكانك مناداة هذه الدالة داخل الدالةInitializeComponent للواجة الرئيسة لكود البرنامج. علما أن بهذه الطريقة سيتم إنشاء ملف جديد وحذف السابق في كل مرة.

#3

وعليكم السلام ورحمة الله وبركاته

اشكرك أخ Ben_Laiid

الكود ده اضن بيقرا من ملف وبيكتب في ملف آخر

بس أنا محتاجة ازاي اقرا التعديل الي حصل على الداتا بيز كل ثانية واعرضها بمعنى يظهر لي كل مستخدم امتى دخل وامتى خرج و عمل ايه

وشكرا جدا لحضرتك

#4

هل لديك التحكم في عمليات الدخول والخروج والخ ؟

أقصد كيف يدخل المستخدمون إلى قاعدة البيانات ؟ كيف يعدلون البيانات ؟ كيف يحذفون البيانات ؟ هل من خلال تطبيقك ؟ اذا كان الأمر كذلك فاكتب كود يسجل هذه العمليات في ملف نصي مثلا وضع الكود في كل الـ Methods اللي عندك.

ان كان المستخدمون يدخول على قاعدة البيانات مباشرة بدون استخدام برنامجك ويقومون بالعمليات المختلفة أيضا مباشرة بدون استخدام برنامجك, فالأمر برمجيا أظنه صعب ! لا أدري كيف يمكن استعمل ملف الـ LOG الخاص بقاعدة البيانات لاستخراج هذه المعلومات منه ! كل ما أعرفه أنه يمكنك القراءة من الـ Event Logs الخاص بالويندوز (التي يمكن مشاهدتها من الـ Event Viewer ) لمعرفة بعض الأحداث التي تحدث على قاعدة البيانات مثل عمليات الدخول الخاطئ والخ. يمكنك أيضا استخدام الـ Performance Counters مثل SQL Server Databases و SQL Server Errors و الخ في مراقبة ما يحدث في قاعدة البيانات.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#5

من خلال برنامجي طبعا بس مش عارفة ماذا تقصد بالضبط !!!

#6

السلام عليكم

اقتباس
الكود ده اضن بيقرا من ملف وبيكتب في ملف آخر

:blink:

Log file هو ملف تكتب فيه بصفة متكررة وكل مرة معطيات من جزء ما من الكود لذلك عليك أولا إنشاء الملف ثم فتحه كل مرة الكتابة فيه ثم إغلاقه

تقم بإستدعاء الدالة printlnإثر الحدث sqlConnectمثال بالشكل التالي

println("Connection at", DateTime.Now.ToString("y"));

ثم عند تسجيل بيانات جديدة وعند محاولة المستعمل الدخول ...

#7

نعم, اذا كنت تستخدم مثلا SqlDataSource في أداء المهام, يمكنك التعامل مع أحدث Deleting, Inserting, Selecting, Updating و Deleted , Inserted, Selected, Updated !

وفي كل حدث من هذه تلك الأحداث استدعي دالة كالتي كتبها الأخ Ben_Laiid لتسجيل ما يحدث في ملف مثلا. ويمكنك وأنت داخل الدوال التي تتعامل مع تلك الأحداث معرفة بعض المعلومات مثل الـ Command والـ Connection والخ.

للتعامل مع حالة الحذف, مثلا, يمكن التعامل مع حدث Deleting هكذا :

protected void YourDataSource_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{

StringBuilder log = new StringBuilder();

log.Append("User is trying to delete something.\r\n");

log.Append("Command is: ");
log.Append(e.Command.CommandText);
log.Append(Environment.NewLine);

log.Append("Connection is: ");
log.Append(e.Command.Connection.ConnectionString);

// if you are interested in paramaters, you can use e.Command.Parameters..

println(log.ToString());
}

ثم التعامل مع حدث Deleted هكذا :

protected void YourDataSource_Deleted(object sender, SqlDataSourceStatusEventArgs e)
{
StringBuilder log = new StringBuilder();

if (e.Exception != null)
{
log.Append("Number of deleted rows: ");
log.Append(e.AffectedRows);
println(log.ToString());
}

else
{
log.Append("EXCEPTION: row(s) have not been deleted!");

log.Append("Command is: \r\n");
log.Append(e.Command.CommandText);
log.Append(Environment.NewLine);

log.Append("Exception is: \r\n");
log.Append(e.Exception.Message);

// you may set e.ExceptionHandled = true and direct the user to a custom error-page.
}

println(log.ToString());

}

ملحوظة: الدالة println هي التي كتبها الأخ Ben_Laiid.

ملحوظة: يمكنك كتابة دالتين فقط لكتابة الـ Log للتعامل مع معظم الأحداث, واحده تستقبل أوبجكت و SqlDataSourceStatusEventArgs للتعامل مع الأحداث التي تنتهي بحرفين ed مثل Deleted و Inserted والخ, وأخرى تستقبل أوبجكت و SqlDataSourceStatusEventArgs للتعامل مع الأحداث التي تنتهي بـ ing مثل Inserting و Deleting والخ.

تم تعديل هذه المشاركة بواسطة معتز شمس في 22 يونيو 2007 في 18:25 — السبب: كدا !

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#8

السلام عليكم ورحمة الله وبركاته

شكرا جزيلا للأخ Ben_Laiid والأخ معتز على المساعدة وجاري المحاولة

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…