C# XmlReader其他选项
我目前正在为我工作的公司申请一份工作。此应用程序的一部分处理差异报告,并在创建新的差异编号时发送电子邮件。首先,认识到我正在将这个应用程序从VB.NET重新开发到C#是很重要的。在旧的应用程序中,开发人员选择读取几个电子邮件地址的XML文件。我已经读过使用替代选项的书,除非XML文件中充满了信息。这并不是一个固执己见的问题,如果这听起来像是一个问题,那么很抱歉。然而,我正在寻找正确的方法。是否应将这些电子邮件地址保存在数据库表中以便于添加/删除,或者是否有更标准的方法来执行此操作?请在下面查找当前代码C# XmlReader其他选项,c#,xml,winforms,C#,Xml,Winforms,我目前正在为我工作的公司申请一份工作。此应用程序的一部分处理差异报告,并在创建新的差异编号时发送电子邮件。首先,认识到我正在将这个应用程序从VB.NET重新开发到C#是很重要的。在旧的应用程序中,开发人员选择读取几个电子邮件地址的XML文件。我已经读过使用替代选项的书,除非XML文件中充满了信息。这并不是一个固执己见的问题,如果这听起来像是一个问题,那么很抱歉。然而,我正在寻找正确的方法。是否应将这些电子邮件地址保存在数据库表中以便于添加/删除,或者是否有更标准的方法来执行此操作?请在下面查找当
public void PrepareEmail(string subject, string message)
{
if (MessageBox.Show(@"Are you sure you want to save and send Discrepancy Report: " + tbxDRNumber.Text + @"?\n Click YES to save\n Click NO to cancel", @"Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
SendEmail(subject, message);
}
}
public Array AddEmail()
{
string[] dRemail = { "", "", "" };
if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"))
{
XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml");
while (emailDocument.Read())
{
var type = emailDocument.NodeType;
switch (type)
{
case XmlNodeType.Element:
if (emailDocument.Name == "DRCreatedAddEmail")
{
dRemail[0] = emailDocument.ReadInnerXml();
}
if (emailDocument.Name == "DRActionNeededAddEmail")
{
dRemail[1] = emailDocument.ReadInnerXml();
}
if (emailDocument.Name == "DRPendingAddEmail")
{
dRemail[2] = emailDocument.ReadInnerXml();
}
else
{
MessageBox.Show(@"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager");
}
break;
}
}
}
return dRemail;
}
public void SendEmail(string subjectText, string bodyText)
{
string[] email = (string[])AddEmail();
//object oOutlook = default(Microsoft.Office.Interop.Outlook.Application);
var oMessage = default(MailItem);
Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application"));
if (subjectText == "New Discrepancy Created. DR" + tbxDRNumber.Text + " ")
{
oMessage.To = email[0];
oMessage.Subject = subjectText;
oMessage.HTMLBody = bodyText;
try
{
oMessage.Send();
}
catch (System.Exception e)
{
MessageBox.Show(@"Send Failed with error: " + e);
throw;
}
}
else if (subjectText == tbxDRNumber.Text + " - Action Needed")
{
oMessage.To = email[1];
oMessage.Subject = subjectText;
oMessage.HTMLBody = bodyText;
try
{
oMessage.Send();
}
catch (System.Exception e)
{
MessageBox.Show(@"Send Failed with error: " + e);
throw;
}
}
else if (subjectText == tbxDRNumber.Text + "DR Pending Approval")
{
oMessage.To = email[2];
oMessage.Subject = subjectText;
oMessage.HTMLBody = bodyText;
try
{
oMessage.Send();
}
catch (System.Exception e)
{
MessageBox.Show(@"Send Failed with error: " + e);
throw;
}
}
}
平面文件配置文件不一定有任何问题。这实际上取决于您的用例。文件中的电子邮件多久更改一次?有多少个条目?应用程序的用户是否编辑列表?有没有复杂的规则,不同的地址会收到不同的电子邮件 如果这只是一个不经常更改的简单邮件列表,那么可以使用xml文件。您也可以只创建一个电子邮件通讯组列表发送到,比如applicationDisprepancyReport。这样,您就可以在active directory中管理收件人。如果您坚持使用XML电子邮件地址,至少我会尝试删除文件共享中XML文件的硬编码路径
如果电子邮件地址变化很大,并且被应用程序的用户更改,我建议将其移动到SQL数据库。如果收件人列表经常更改,您可能希望在编辑这些地址时添加跟踪。是否有效?别管它了,继续其他更高优先级的选项。请花点时间格式化您的代码-谢谢:)我确实格式化了代码。我的印象是,所有的标签都必须在4个空格中。它可以工作,但是我无法访问该文件。它说它不存在,但它确实存在。任何由多个人同时使用的数据都应该存储在数据库中,因为Windows上的文件共享可能会导致问题。数据库库设计用于处理多个用户同时尝试使用相同数据时的冲突。感谢所有回复。电子邮件地址没有太大变化,但我正在考虑未来。有些人会在名单上的某个时候退休,或者出于任何原因辞职。我的想法是能够给经理们一个简单的方法来更新列表。在不同的情况下,通讯组列表会根据用户在表单中输入的内容进行更改。