PDA

View Full Version : ذخیره در xml وبازخوانی آن



titi1363
سه شنبه 28 شهریور 1391, 11:02 صبح
سلام
من توی برنامه یه تکست باکس دارم که می خوام وقتی کاربر هر نامی را در آن وارد می کند در یک فایل xml ذخیره کند و وقتی دوباره کاربر همان اسم را وارد می کند براش بیاره ،بدون اینکه همه ی اسم را تایپ کند در واقع باید توی فایل xml جستجو کند و بیاره و اگه نبود به فایل xml اضافه کند.تو سایت سرچ کردم نوشتن از
ReadXml,WriteXml,ReadXmlSchema,WriteXmlSchema استفاده کنیم چطور؟

navid_8x
سه شنبه 28 شهریور 1391, 12:34 عصر
از linqToXML استفاده کن

titi1363
سه شنبه 28 شهریور 1391, 18:43 عصر
خوب منم نوشتم چطور از این تابع ها استفاده کنم؟یعنی کد میخوام
مرسی

danialafshari
سه شنبه 28 شهریور 1391, 19:21 عصر
اول یک دیتا تیبل می سازی و فیلداتم درست می کنی

ذخیره جدید

private void btnAdd_Click(object sender, EventArgs e)
{
ds.DataTable1.Rows.Add(new object[] { مقدار, مقدار });
ds.DataTable1.WriteXml(@"c:\1.xml");
}


خواندن

ds.DataTable1.ReadXml(@"c:\1.xml");
dataGridView1.DataSource = ds.DataTable1;

titi1363
چهارشنبه 29 شهریور 1391, 12:01 عصر
مرسی danialafshari (http://barnamenevis.org/member.php?68467-danialafshari)
ببینید تو فرم ورودم ,ی کمبوباکس دارم که میخوام نام کاربرو تو کمبوباکس وارد کنم این نام بره توی ی فایل xml ذخیره بشه(اولین بار بره تو درایو c ی فولدر ایجاد کنه و ی فایل xml ,دفعه دوم چک کنه اگر وجود داشت دیگه ایجاد نکنه ) دفعه بعد وقتی میخوام نام کاربر بعدی را وارد کنم اسم کاربر قبلی که تو فایل xml ذخیره کردمو تو کمبو باکس برام لود کنه (ومن فقط پسورد بدم وارد برنامه بشم) واین قابلیتو داشته باشه هربار که کاربرو از کمبوباکس انتخاب میکنم نام کاربر تو فایل xml بره ردیف آخر قرار بگیره
البته من برای حالت عادی تو برنامه خودم ی تیبل users دارم که نام کاربر ,کدکاربری,نوع کاربری,پسوردو ذخیره میکنه.الان برای ذخیره کاربران با استفاده از xml ,ی دیتاتیبل درست کردم به نام User
(DataTable dtb = new DataTable("User");)
و فیلد name از تیبل users رو گرفتم که تو این تیبل نام کاربرانو ذخیره کنم
(SqlCommand a = new SqlCommand("select name from Users where id=-1",sqlCon);).
البته نمیدونم چطور سطر اضافه کنم به دیتاتیبلم l(فکر کنم برای سطر اضافه کردن این کدباشه:DataRow dr = dtb.NewRow();)و نام کاربرانو به اون نسبت بدم,بره تو xmlو دوباره از اون تو کمبوباکس لود بشه.لطفا راهنمایی کنید.مرسی

danialafshari
چهارشنبه 29 شهریور 1391, 13:37 عصر
با سلام دوست عزیز
این کد برای اضافه کرئت سطر جدید در XML هست

راستی ds = dataset1 هست که در محل کلاس نویسی بالای فرم اضافه می کنی

dataset1 ds=new dataset1();



private void btnAdd_Click(object sender, EventArgs e)
{
ds.DataTable1.Rows.Add(new object[] { مقدار, مقدار });
ds.DataTable1.WriteXml(@"c:\1.xml");
}


دوست عزیز به نظر من بهتره این کار رو با بانک اطلاعاتی انجام بدی خیلی مغرون به صرفه تره. دقیقا کار برنامت چیه ؟

titi1363
چهارشنبه 29 شهریور 1391, 17:55 عصر
ببینید برای فرم loginبرناممونه.فرممون مثل همه ی فرم ها یوزر و پسورد میدیم وارد میشیم .میخوام کسی که اسمشو تو قسمت یوزر وارد میکنه بره تو xml ذخیره بشه , که بعدا بتونیم ببینیم چه یوزرهایی وارد سیستم شدند...
الان تو فایل xml درج میشه ولی فقط یک یوزر نمیتونم یوزر بعدیو اضافه کنم..
برای خوندن از xml و لود کردن در کمبوباکس هم مشکل دارم.لطفا راهنمایی کنید

titi1363
چهارشنبه 29 شهریور 1391, 18:15 عصر
دوست عزیز danialafshari (http://barnamenevis.org/member.php?68467-danialafshari)
من میخوام کدمو بذارم همش نامرتب میشه,چطور مثل شما کدو تو کادر بذارم ؟ یکی از دوستان گفت گزینه #c انتخاب کن انتخاب کردم میاد بین [] میذارم ,خارج از [] میذارم بازم نامرتب میشه چیکار کنم؟

aslan
چهارشنبه 29 شهریور 1391, 20:20 عصر
برای ارسال صحیح کد از تگ CODE ( عکس ضمیمه ) استفاده کنید

danialafshari
چهارشنبه 29 شهریور 1391, 21:19 عصر
به این صورت!
بعد صفحه رو رفرش کن

titi1363
پنج شنبه 30 شهریور 1391, 09:58 صبح
if (!File.Exists("@c:\test\test.xml"))
{

SqlDataAdapter da = new SqlDataAdapter("select name from Users where id=-1", sqlCon);
da.Fill(dtb);

dtb.WriteXml(@"c:\test\test.xml");
}

dtb.ReadXml(@"c:\test\test.xml");
DataRow dr = dtb.NewRow();
dr["name"] = userName_combo.Text;
dtb.Rows.Add(dr);
dtb.WriteXml(@"c:\test\test.xml");

مرسی danialafshari (http://barnamenevis.org/member.php?68467-danialafshari).من این کدو نوشتم فقط یک نام کاربری در xml ذخیره میشه میخوام بیشتر از یک کاربر ثبت بشه چیکار کنم؟ برای خوندن از xml هم مشکل دارم

titi1363
پنج شنبه 30 شهریور 1391, 10:17 صبح
if (File.Exists(@"c:\test\test.xml"))
{
dtb.Clear();
dtb.ReadXml(@"c:\test\test.xml");

userName_combo.DataSource = dtb;
userName_combo.DisplayMember = "name";
}

برای خوندن ازxml و لود کردن در کمبوباکس این کدو نوشتم درست کار نمیکنه!

titi1363
پنج شنبه 30 شهریور 1391, 12:10 عصر
درج صحیح در Xml



DataTable dtb = new DataTable("User");
if (!File.Exists("@c:\test\test.xml"))
{
SqlDataAdapter da = new SqlDataAdapter("select name from Users where id=-1", sqlCon);
da.Fill(dtb);
dtb.WriteXml(@"c:\test\test.xml");
}

dtb.ReadXml(@"c:\test\test.xml");
DataRow dr = dtb.NewRow();
dr["name"] = userName_combo.Text;
dtb.Rows.Add(dr);
//dtb.WriteXml(@"c:\test\test.xml");
XmlTextWriter write = new XmlTextWriter(@"c:\test\test.xml", Encoding.UTF8);

write.WriteStartDocument();
write.WriteStartElement("name");//start name
write.WriteString("\n");

write.WriteStartElement("user");
write.WriteString(userName_combo.Text);
write.WriteEndElement();
write.WriteString("\n");

foreach (string item in userName_combo.Items)
{
write.WriteString("\t");
write.WriteStartElement("Item");
write.WriteString(item);
write.WriteEndElement();
write.WriteString("\n");
}

write.WriteEndElement();//End name
write.WriteEndDocument();
write.Close();

این کد کاملا درسته و تو xml درج میشه.
البته با فضای نامی :
using System.IO;
using System.Xml;
using System.Text;
حالا من دوتا مشکل دارم:1-نمیخوام تکراری درج کنه
2-میخوام آخرین یوزری که وارد میکنم در اولین سطر قرار بگیره
لطفا راهنمایی کنید.مرسی

danialafshari
پنج شنبه 30 شهریور 1391, 22:32 عصر
دسترسی به C# ندارم...

1-نمیخوام تکراری درج کنه
خوب باید قبل از اینکه ذخیرش کنی جستجو کنی در بانکت که تکراری نباشه. راهش همینه

2-میخوام آخرین یوزری که وارد میکنم در اولین سطر قرار بگیره
همیشه و همیشه یک فیلد ID به صورت Autonumber بزار برای حذف،ویرایش و... و اینجا هم می تونی استفاده کنی

آخرش هم کار برنامت رو نگفتی بازم می گم برنامه ات رو با بانک اطلاعاتی بساز خیلی بهتره