منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
قاعدة بيانات مضمنة مع البرنامج - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : قاعدة بيانات مضمنة مع البرنامج (/showthread.php?tid=24922)



قاعدة بيانات مضمنة مع البرنامج - viv - 12-05-18

اخطاءت بوضع الموضوع هنا مع ان فيه أمثلة ولكن كنت اريده بموضوع المقالات

الموقع 

PHP كود :
https://archive.codeplex.com/?p=dbfdotnet 


باختصار اذا كنت تتحدث عن السرعة dBase او DbfDotNet هي ما نتحدث عنه .
هي قاعدة بيانات تتعامل مع القرص وتستطيع التعامل مع قواعد بيانات عديدة بنفس الوقت وهي لا تتعامل مع الذاكرة .

اذا لدينا كلمتين هنا ، سرعة ، ومساحة صغيرة .

في DbfDotNet يتم إجراء جميع أعمال تحويل البيانات تلقائيًا.
إطار كيان بسيط للغاية
حجم ملف Dll اخر مرة كان حجمه 50 كيلو 

باجراء مقارنة صغيرة لنرى قاعدة بياناتنا هذه


PHP كود :
Dbf.Net 

Opening DbfDotNetDatabase
185 ms
Insert 1000 individuals
39 ms
Read individuals sequentially
5 ms
Read individual randomly
3 ms
Modifying individuals
21 ms
Create DateOfBirth index
77 ms
     Michael Simmons 22
/07/1909
     Mark Adams 21
/09/1909
     Charles Edwards 28
/09/1909
     
... total 1000 records
Enumerate Individuals by age
36 ms
Closing DbfDotNetDatabase
44 ms 

اذا ماذا عن Ado.net


PHP كود :
Opening ADO.Net Database459 ms
Insert 1000 individuals
80601 ms
Read individuals sequentially
1655 ms
Read individual randomly
1666 ms
Modifying individuals
75574 ms
Create DateOfBirth index
80 ms
     Michael Simmons 22
/07/1909
     Mark Adams 21
/09/1909
     Charles Edwards 28
/09/1909
     
... total 1000 records
Enumerate Individuals by age
29 ms
Closing ADO
.Net Database0 ms 

فرق رهيب أليس كذلك

أنها اسرع بحوالي 400 مرة من ثقنية Ado.net ولو كانت على SqlServer نفسه وبشحمه ولحمه

أنشاء الجداول في قاعدة بياناتنا هذه


PHP كود :
DbfTable<dbfdotnetindividualmIndividuals;

void CreateIndividualTable()
{
 
 mIndividuals 
 
   new DbfTable<dbfdotnetindividual>(
 
     @"individuals.dbf"
 
     Encoding.ASCII
 
     DbfDotNet.DbfVersion.dBaseIV);
}


class 
Individual
 
DbfDotNet.DbfRecordIIndividual
 
{
 
 [DbfDotNet.Column(Width 20)]
 
 public string FIRSTNAME;
 
 [DbfDotNet.Column(Width 20)]
 
 public string MIDDLENAME;
 
 [DbfDotNet.Column(Width 20)]
 
 public string LASTNAME;
 
 public DateTime DOB;
 
 [DbfDotNet.Column(Width 20)]
 
 public string STATE;
 } 


في Ado.net


PHP كود :
Connection _cnn null;


void ITestDatabase.CreateIndividualTable()
{
 
 _cnn = new System.Data.Connection(
"Data Source=adoNetTest.db");
 
 _cnn.Open();
 
 using (DbCommand cmd _cnn.CreateCommand())
 {
 
  cmd.CommandText "CREATE TABLE 
     INDIVIDUAL (ID int primary key, 
     FIRSTNAME VARCHAR(20), 
     MIDDLENAME VARCHAR(20), 
     LASTNAME VARCHAR(20), 
     DOB DATE, 
     STATE VARCHAR(20))"
;

 
   cmd.ExecuteNonQuery();
 
 }



ادخال البيانات في فيها


PHP كود :
void InsertNewIndividual(
 
  int id
 
  string firstname,
 
  string middlename,
 
  string lastname,
 
  DateTime dob,
 
  string state)
{
 
 var indiv mIndividuals.NewRecord();
 
 indiv.FIRSTNAME firstname;
 
 indiv.MIDDLENAME middlename;
 
 indiv.LASTNAME lastname;
 
 indiv.DOB dob;
 
 indiv.STATE state;
 
 indiv.SaveChanges();


أما في Ado.net


PHP كود :
void InsertNewIndividual(
 
 int id
 
 string firstname
 
 string middlename
 
 string lastname,
 
 DateTime dob
 
 string state)
{
 
using (DbCommand cmd =
 
  _cnn.CreateCommand())
 {
 
 cmd.CommandText string.Format(
 
  "INSERT INTO INDIVIDUAL (ID,
    FIRSTNAME, MIDDLENAME, LASTNAME, 
    DOB, STATE) VALUES({0},
    '{1}', '{2}', '{3}', 
    '{4}', '{5}');"
,
 
  idfirstnamemiddlename,
 
  lastname,
 
  dob.ToString("yyyy-MM-dd HH:mm:ss"),
 
  state);
 
 cmd.ExecuteNonQuery();
 }


فرق كبير في الكود وفي حجمه لاحظ NewRecord وايضا SaveChange في الاعلى


الاستعلام برقم الـ ID في قاعدة بياناتنا


PHP كود :
IIndividual GetIndividualById(int id)
{
 
 DbfDotNetIndividual result =
 
   mIndividuals.GetRecord(id);
 
   return result;


في Ado.net


PHP كود :
IIndividual GetIndividualById(int id)
{
 
using (DbCommand cmd =
 
  _cnn.CreateCommand())
 {
 
 cmd.CommandText string.Format(
 
   "SELECT * FROM INDIVIDUAL
     WHERE ID=" 
id);
 
 var reader cmd.ExecuteReader();
 
 try
  
{
 
  if (reader.Read())
 
   return GetNewIndividual(reader);
 
  else return null;
 
 }
 
 finally
  
{
 
  reader.Close();
 
 }
 }
}

Individual GetNewIndividual(
DbDataReader reader)
{
 var 
res = new Individual();
 
res.ID reader.GetInt32(0);
 
res.FirstName reader.GetString(1); 
 
res.MiddleName reader.GetString(2);
 
res.LastName reader.GetString(3);
 
res.Dob reader.GetDateTime(4);
 
res.State reader.GetString(5);
 return 
res;
}

 class 
Individual IIndividual
 
{
 
 public int ID getset; }
 
 public string FirstName getset; }
 
 public string MiddleName getset; }
 
 public string LastName getset; }
 
 public DateTime Dob getset; }
 
 public string State getset; }
 } 


حفظ التغييرات


PHP كود :
void SaveIndividual(
 
 Individual individual)
{
 
 individual.SaveChanges();


في Ado.net


PHP كود :
void SaveIndividual(
 
 IIndividual individual)
{
 
using (DbCommand cmd =
 
  _cnn.CreateCommand())
 {
 
 cmd.CommandText string.Format(
 
   "UPDATE INDIVIDUAL
 SET DOB='{1}' WHERE ID={0};"
,
 
individual.ID,
 
individual.Dob.ToString(
 
  "yyyy-MM-dd HH:mm:ss"));
 
 cmd.ExecuteNonQuery();
 }



لترتيب البيانات

PHP كود :
IEnumerable<Individual>
 
 IndividualsByAge()
{
 
 foreach (Individual indiv
    in mDobIndex
)
 
 {
 
   yield return indiv;
 
 }


في Ado.net


PHP كود :
IEnumerable<Individual
 
 IndividualsByAge()
{
 
using (DbCommand cmd =
 
  _cnn.CreateCommand())
 {
 
 cmd.CommandText string.Format(
 
   "SELECT * FROM INDIVIDUAL
    ORDER BY DOB"
);
 
 var reader cmd.ExecuteReader();
 
 try
  
{
 
  while (reader.Read())
 
  {
 
   yield return 
 
     GetNewIndividual(reader);
 
  }
 
 }
 
 finally
  
{
 
  reader.Close();
 
 }
 }


سوف ارفق ملف Demo وملف مشروع مفتوح لاتنسي تضمين الملف DbfDotNet.dll مع المشروع ليعمل

لمزيد من المعلومات يمكن مراجعة المصدر هنا


PHP كود :
https://www.codeproject.com/Articles/36895/Building-an-embedded-database-engine-in-C 



RE: قاعدة بيانات مضمنة مع البرنامج - viv - 12-05-18

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

اجل اخ كودور انا قمت بتجربتها اليوم فقط وتأكدت من سرعتها الكبيرة فعلا

ووضعت في بداية الصفحة رابط للموقع وفي نهاية الصفحة رابط لشرح عنها 
وهناك مثالين في المرفقات

ومن يتحصل على فيديوهات او مزيد من الشرح سوف نضعه هنا


RE: قاعدة بيانات مضمنة مع البرنامج - princelovelorn - 12-05-18

جزاك الله خيرا وبارك فيك أخي الفاضل


RE: قاعدة بيانات مضمنة مع البرنامج - sendbad100 - 12-05-18

السلام عليكم 

الله يعطيك الصحة والعافية 

ويبارك فيك وفي عملك 

لم استطع متاعبعت كل موضوعاتك اليوم  "اقصد تحميل الامثلة والتجربة"  لانه كثيرة


تم نقل الموضوع حسب رغبتك  لقسم المقالات



RE: قاعدة بيانات مضمنة مع البرنامج - viv - 27-09-18

يبدو حتى الان لا يوجد من تكلم عن قاعدة البيانات هذه بالمواقع العربية

إقتباس :https://www.google.com.ly/search?q=DbfDotNet&safe=strict&source=lnt&tbs=lr:lang_1ar&lr=lang_ar&sa=X&ved=0ahUKEwi0qOflxtvdAhUliaYKHbqXAB4QpwUIHg&biw=1400&bih=874