สอบถามหน่อยครับโปรเจคเกี่ยวกับC#จะใช้ฐานข้อมูลตัวไหนดี
เป็นผมจะเขียนเป็น config.xml แหละ
เริ่มแรกถ้าไม่มีก็ให้โปรแกรมสร้างไฟล์ ส่วนค่าก็ให้มัน generate
เป็น default value ออกมา จะเรียก connection หรืออะไรก็เรียกผ่าน xml เอา
จะแก้ก็แก้ที่ xml
การสร้าง xml ก็ทำให้หลายวิธีเลย จะสร้างจาก xmldocument ก็ได้ เห็นภาพโคางสร้างง่ายดี
หรือจะใช้ xmlwriter ก็ได้ ซึ่งจะเหมาะกับการเขียน xml ไฟล์ใหญ่ๆ
ส่วนเวลาเรียกใช้ หรือ update ผมจะใช้ linq
ง่ายๆ และสะดวกเหมือนการ query, update ฐานข้อมูล
เขียนด้วย xmldocument
public bool WriteInfo()
{
XmlDocument info = new XmlDocument();
if (File.Exists(string.Format("{0}\\xml\\info.xml", System.Windows.Forms.Application.StartupPath)))
{
File.Delete(string.Format("{0}\\xml\\info.xml", System.Windows.Forms.Application.StartupPath));
}
XmlDeclaration xmldecl = info.CreateXmlDeclaration("1.0", "UTF-8", null);
info.AppendChild(xmldecl);
XmlElement dataroot = info.CreateElement("dataroot");
dataroot.SetAttribute("xmlns:od", "urn:schemas-microsoft-com:officedata");
dataroot.SetAttribute("generated", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"));
info.AppendChild(dataroot);
XmlElement newElem = info.CreateElement("FileInfo");
info.DocumentElement.AppendChild(newElem);
XmlElement FileName = info.CreateElement("FileName");
FileName.InnerText = fileName;
newElem.AppendChild(FileName);
XmlElement ReadExcel = info.CreateElement("ReadExcel");
ReadExcel.InnerText = "True";
newElem.AppendChild(ReadExcel);
XmlElement CheckData = info.CreateElement("CheckData");
CheckData.InnerText = "False";
newElem.AppendChild(CheckData);
XmlElement CheckLocation = info.CreateElement("CheckLocation");
CheckLocation.InnerText = "False";
newElem.AppendChild(CheckLocation);
XmlElement CheckProduct = info.CreateElement("CheckProduct");
CheckProduct.InnerText = "False";
newElem.AppendChild(CheckProduct);
XmlElement CheckSection = info.CreateElement("CheckSection");
CheckSection.InnerText = "False";
newElem.AppendChild(CheckSection);
XmlElement CheckName = info.CreateElement("CheckName");
CheckName.InnerText = "False";
newElem.AppendChild(CheckName);
info.Save(string.Format("{0}\\xml\\info.xml", System.Windows.Forms.Application.StartupPath));
return true;
}
เขียนด้วย xmlwriter (ค่อยๆ ส่งมาเขียนทีละ 1000 record)
public bool WriteCircuit(int StartIndex)
{
byte[] endtag = System.Text.Encoding.UTF8.GetBytes("</dataroot>");
XmlTextWriter writer;
bool fileExist = File.Exists(string.Format("{0}\\xml\\circuit.xml", System.Windows.Forms.Application.StartupPath));
if (fileExist)
{
FileStream fileStream = File.OpenWrite(string.Format("{0}\\xml\\circuit.xml", System.Windows.Forms.Application.StartupPath));
fileStream.Seek(-endtag.Length, SeekOrigin.End);
writer = new XmlTextWriter(fileStream, Encoding.UTF8);
}
else
{
writer = new System.Xml.XmlTextWriter(string.Format("{0}\\xml\\circuit.xml", System.Windows.Forms.Application.StartupPath), System.Text.Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("dataroot");
writer.WriteAttributeString("xmlns", "od", null, "urn:schemas-microsoft-com:officedata");
writer.WriteAttributeString("generated", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"));
}
writer.Indentation = 1;
writer.IndentChar = Convert.ToChar(" ");
writer.Formatting = Formatting.Indented;
for (int i = StartIndex; i < StartIndex + 1000; i++)
{
if (i < circuitData.Rows.Count)
{
System.Data.DataRow newCircuit = circuitData.Rows[i];
writer.WriteStartElement("Circuit");
writer.WriteElementString("InvoiceDate", invoiceDate.ToShortDateString());
writer.WriteElementString("CircuitID", newCircuit["CircuitID"].ToString());
writer.WriteElementString("ProductName", newCircuit["ProductName"].ToString());
writer.WriteElementString("ProductCode", newCircuit["ProductCode"].ToString());
writer.WriteElementString("CustomerName", newCircuit["CustomerName"].ToString().Trim());
writer.WriteElementString("CustomerCode", newCircuit["CustomerCode"].ToString());
writer.WriteElementString("CustomerType", newCircuit["CustomerType"].ToString());
writer.WriteElementString("InstallDate", (newCircuit["InstallDate"] != DBNull.Value) ? Convert.ToDateTime(newCircuit["InstallDate"]).ToShortDateString() : string.Empty);
writer.WriteElementString("Origin", newCircuit["Origin"].ToString());
writer.WriteElementString("Destination", newCircuit["Destination"].ToString());
writer.WriteElementString("Amount", newCircuit["Amount"].ToString());
writer.WriteElementString("Discount", newCircuit["Discount"].ToString());
writer.WriteElementString("Balance", newCircuit["Balance"].ToString());
writer.WriteElementString("Vat", newCircuit["Vat"].ToString());
writer.WriteEndElement();
}
}
if (!fileExist)
{
writer.WriteEndElement();
writer.WriteEndDocument();
}
else
{
writer.Flush();
writer.BaseStream.Write(endtag, 0, endtag.Length);
}
if (writer != null)
{
writer.Flush();
}
if (writer.WriteState != WriteState.Closed)
{
writer.Close();
}
return true;
}
เวลาเรียกใช้ก็ linq
Uri infoPath = new Uri(string.Format("{0}\\xml\\info.xml", System.Windows.Forms.Application.StartupPath));
XElement xInfo = (from x in XElement.Load(infoPath.LocalPath).Elements("FileInfo")
select x).First();
เวลา update
private void UpdateInfo()
{
Uri infoPath = new Uri(string.Format("{0}\\xml\\info.xml", System.Windows.Forms.Application.StartupPath));
try
{
XElement xInfo = XElement.Load(infoPath.LocalPath);
var info = from xi in xInfo.Elements("FileInfo")
select xi;
foreach (XElement xe in info)
{
xe.Element("CheckData").ReplaceWith(new XElement("CheckData", "True"));
xe.Element("CheckLocation").ReplaceWith(new XElement("CheckLocation", "True"));
xe.Element("CheckProduct").ReplaceWith(new XElement("CheckProduct", "False"));
xe.Element("CheckSection").ReplaceWith(new XElement("CheckSection", "False"));
xe.Element("CheckName").ReplaceWith(new XElement("CheckName", "False"));
}
xInfo.Save(infoPath.LocalPath);
}
catch { }
}
Date :
2012-10-25 14:06:51
By :
ห้ามตอบเกินวันละ 2 กระทู้
Load balance : Server 02