سلام دوستان
میخواستم نحوه ی ایجاد دیتابیس xml را توضیح بدید و نحوه ی ایجاد جدول و فیلد و چهار عمل درج،حذف؛بروزرسانی و جستجو
سلام دوستان
میخواستم نحوه ی ایجاد دیتابیس xml را توضیح بدید و نحوه ی ایجاد جدول و فیلد و چهار عمل درج،حذف؛بروزرسانی و جستجو
اینا دیده بودم ولی درمورد جول و فیلد چیزی نگفته
بعدش وقتی یه رکورد جدید اضافه میکنم قبلیه پاک میشه
این مثال رو قبلا با VS2008 نوشته بودم
امیدوارم کمکتون کنه
ایا در xml چیزی به اسم جدول مثل sql وجود داره؟
نه به اونصورت. در xml با node(گره)ها کار میکنید.
من نمیخوام از linq استفاده کنم میشه روش دیگه را بگید مثلا EF بیا . . .
سلام
من یک فایل xml با نود های ایدی و نام و فامیل و سن و جنس و تلفن دارم
توی ذخیره اطلاعات در این فرم مشکلی ندارم
اما می خوام وقتی کاربر در تکس باکس ایدی رو وارد میکنه مثلا 3 اطلاعات مربوط به اون ایدی از فایل xml حذف بشه در ضمن از گرید هم استفاده نکردم
و
اینکه بتونم تمام اطلاعات یکی مونده به اخر رو (شامل ایدی و نام و فامیل و جنس و سن ) که در فایل xml ذخیره شه رو در تکس باکس ها لود کنم
ممنون میشم کمکم کنید
راستش من میتونم ذخیره کنم ولی برای بار دوم قبلیا پاک میشه و جایگزین میشه یعنی یک نود بیشتر نمیتونم درج کنم مشکل کجاست
اینم کدم
XmlTextWriter XmlWrt = new XmlTextWriter("my database.xml", System.Text.Encoding.UTF8);
XmlWrt.Formatting = Formatting.Indented;
XmlWrt.WriteStartDocument();
XmlWrt.WriteStartElement("", textBox1.Text);
XmlWrt.WriteElementString("Name", textBox2.Text);
XmlWrt.WriteElementString("Familly", textBox3.Text);
XmlWrt.WriteElementString("age", textBox4.Text);
XmlWrt.WriteEndElement();
XmlWrt.WriteEndDocument();
XmlWrt.Close();
برای اضافه کردن ابتدا باید کل سند را لود کنید، بعد بهش اضافه کنید و ذخیره کنید.
مثال(ثبت مشخصات فردی):
string xmlPath = Path.Combine(Application.StartupPath, "MyDatabase.xml");
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = null;
if (File.Exists(xmlPath))
{
xmlDoc.Load(xmlPath);
rootNode = xmlDoc.DocumentElement;
}
else
{
rootNode = xmlDoc.CreateElement("Root");
xmlDoc.AppendChild(rootNode);
}
XmlNode personNode = xmlDoc.CreateNode(XmlNodeType.Element, "Person", null);
XmlNode nameNode = xmlDoc.CreateNode(XmlNodeType.Element, "Name", null);
XmlNode famillyNode = xmlDoc.CreateNode(XmlNodeType.Element, "Familly", null);
XmlNode ageNode = xmlDoc.CreateNode(XmlNodeType.Element, "Age", null);
nameNode.InnerText = textBox1.Text;
famillyNode.InnerText = textBox2.Text;
ageNode.InnerText = textBox3.Text;
personNode.AppendChild(nameNode);
personNode.AppendChild(famillyNode);
personNode.AppendChild(ageNode);
rootNode.AppendChild(personNode);
xmlDoc.Save(xmlPath);
آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 28 تیر 1392 در 10:43 صبح
ممنون
من از کد زیر برای حذف استفاده میکنم ایا مشکلی نداره
XmlDocument doc = new XmlDocument();
doc.Load("my database.xml");
XmlElement elmRoot = doc.DocumentElement;
string xPath = "/Root/Person[@code='"+textBox10.Text+"']";
XmlNode findnode = elmRoot.SelectSingleNode(xPath);
if(findnode!=null )
elmRoot.RemoveChild(findnode);
doc.Save("my database.xml");
بعد کد ویرایش و جستجو و لود کردن داخل گریدویو را میشه بزارید
کدهای زیر براساس پست قبلیم هست.
برای جستجو هم فرقی نداره. بهتره یک کلاس ایجاد کنی تا با ایجاد یک شئ از آن اطلاعات رو در اون بریزید و اونو هم در یک لیست ذخیره کنید و لیست رو به دیتاگریدویو بدید.
class Person
{
string name;
public string Name
{
get { return name; }
set { name = value; }
}
string familly;
public string Familly
{
get { return familly; }
set { familly = value; }
}
UInt16 age;
public UInt16 Age
{
get { return age; }
set { age = value; }
}
}
فرض کنید اشخاصی رو میخواهیم که سن آنها بین 20 تا 30 هست:
string xmlPath = Path.Combine(Application.StartupPath, "MyDatabase.xml");
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode;
if (File.Exists(xmlPath))
{
xmlDoc.Load(xmlPath);
rootNode = xmlDoc.DocumentElement;
}
else
{
MessageBox.Show("File is not exist!");
return;
}
XmlNodeList personNodes = xmlDoc.GetElementsByTagName("Person");
List<Person> personList = new List<Person>();
foreach (XmlNode node in personNodes)
{
string ageStr = node["Age"].InnerText;
if (!string.IsNullOrWhiteSpace(ageStr))
{
UInt16 age = Convert.ToUInt16(ageStr);
if (age >= 20 && age <= 30)
{
Person p = new Person()
{
Name = node["Name"].InnerText,
Familly = node["Familly"].InnerText,
Age = age
};
personList.Add(p);
}
}
}
dataGridView1.DataSource = personList;
برای حذف به اینصورت:
XmlNodeList personNodes = xmlDoc.GetElementsByTagName("Person");
if (personNodes.Count > 0)
{
for (int i = personNodes.Count - 1; i >= 0; i--)
{
XmlNode node = personNodes[i];
string name = node["Name"].InnerText;
string familly = node["Familly"].InnerText;
string age = node["Age"].InnerText;
if (name == textBox1.Text && familly == textBox2.Text && age == textBox3.Text)
{
rootNode.RemoveChild(node);
break;
}
}
xmlDoc.Save(xmlPath);
}
برای آپدیت هم مشابه همینه منتها به جای حذف باید InnerText رو تغییر بدید.
فرض کنید نام و فامیل رو داریم و میخواهیم سن رو آپدیت کنیم:
XmlNodeList personNodes = xmlDoc.GetElementsByTagName("Person");
foreach(XmlNode node in personNodes)
{
string name = node["Name"].InnerText;
string familly = node["Familly"].InnerText;
if (name == textBox1.Text && familly == textBox2.Text)
{
node["Age"].InnerText = textBox3.Text;
break;
}
}
xmlDoc.Save(xmlPath);
آخرین ویرایش به وسیله Mahmoud.Afrad : شنبه 29 تیر 1392 در 10:27 صبح
جواب هر دوتا سوال شما در کد حذف موجود است
سلام
ممنونم از راهنماییت
من کد حذف رو این جوری نوشتم
اما روی خط
rootNode.RemoveChild(node);
این خطا رو میده
Use of unassigned local variable 'rootNode'
نمیدونم چطوری حلش کنم؟؟؟
ممنون میشم راهنمایی کنید..و
چطور با دادن ایدی رکورد یکی مونده به قبلش رو در تکس باکس ها لود کنم؟؟؟
string xmlPath = Path.Combine(Application.StartupPath, "MyDatabase1.xml");
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode;
XmlNodeList personNodes = xmlDoc.GetElementsByTagName("Person");
for (int i = personNodes.Count - 1; i >= 0; i--)
{
XmlNode node = personNodes[i];
string name = node["Name"].InnerText;
string familly = node["Familly"].InnerText;
string age = node["Age"].InnerText;
if (name == textBox1.Text && familly == textBox2.Text && age == textBox3.Text)
{
rootNode.RemoveChild(node);
break;
}
}
xmlDoc.Save(xmlPath);
آخرین ویرایش به وسیله Mahmoud.Afrad : شنبه 15 خرداد 1395 در 06:04 صبح
break point زدم
مشکل اینه که با وجود ایتم های زیادی که درفایل xml دارم
اما در کد
for (int i = personNodes.Count - 1; i >= 0; i--)
i رو منفی یک میده
مشکل چیه؟؟؟
حلقه رو بزار داخل یک if چک کن تعداد بزرگتر از 0 باشه. کد حذف رو اصلاح کردم دوباره ببین.
بازم همون خطا رو میده
انگار بی تاثیره..
؟؟؟
ممنون