每日自动将货币汇率更新到您的数据库。





4.00/5 (3投票s)
2004年4月19日
2分钟阅读

48875

867
从 xe.com 获取货币信息,自动更新您的数据库。
引言
您是否正在运营在线商店,并希望保持货币转换汇率的最新状态?那么这个程序可以为您节省一些时间。我将其开发为一个原型,以展示如何加载此类数据。
该程序可以接收来自 xe.com 的货币信息。只需访问 xe.com 并订阅电子邮件更新即可,点击此处。
系统框图
该程序将连接到 xe.com 发送更新的邮箱,检索电子邮件,解析它并更新 SQL 数据库。可以使用 Windows 计划任务来安排此程序,以使您的数据库保持最新的货币信息。请随意编辑源代码并按需使用。这就是该功能简而言之。
让我们看看细节。
xe.com 电子邮件更新包含以下文本布局。
Rates as of 2002.03.14 21:20:02 UTC (GMT). Base currency is USD.
Currency Unit USD per Unit Units per USD
================ =============== ===============
USD United States Dollars 1.00000 1.00000
EUR Euro 0.882525 1.13311
GBP United Kingdom Pounds 1.42053 0.703961
......ZMK Zambia Kwacha 0.000223339 4477.50
该系统的核心是一个名为 CurrencyUpdater
的类。
该类有一个构造函数。它不接受任何参数。构造函数从 App.config 文件加载有关邮箱用户名、密码和 POP3 服务器名称的配置信息。
public CurrencyUpdater()
{
user=
System.Configuration.ConfigurationSettings.AppSettings.Get("currency_mailbox_user");
...
}
然后,主例程调用 CurrencyUpdater
类上的 UpdateCurrency()
方法。此函数执行以下操作:
- 调用
GetUpdateString()
并从 POP3 邮箱获取汇率字符串。 - 调用
ProcessEmailString()
,该函数处理字符串并生成适当的 SQL 并将其执行到数据库。public string GetUpdateString() { Log("Connecting to mailbox...."); // Connect to XeRates Currency update email box string body=null; string subject; long messagecount=0; try { p=new Pop3Client(user,password,server); if(p!=null) { p.OpenInbox(); messagecount=p.MessageCount; for(int i=1;i<messagecount;i++) { p.NextEmail(); subject=p.Subject; if(subject!="") { if(subject.StartsWith("Today's Currency Update (SGD)")) { body=p.Body; break; } } } } } catch(Exception ex) { body=null; throw ex; } if(p!=null) p.CloseConnection(); Log("Got string from mailbox..."); return body; }
配置 App.config 文件。这非常简单。
<add key="currency_mailbox_user" value="<<mailbox user name>>" />
<add key="currency_mailbox_password" value="<<mail password>>" />
<add key="currency_mailbox_server" value="<<mail server>>" />
<add key="constring" value="<<connection string>>" />
<add key="MailServer" value="<<mail server>>" />
<add key="NOTIFY_SUCCESS" value="1" />
<add key="NOTIFY_FAIL" value="1" />
<add key="SUCCESS_FROM" value="<<from email for success>>" />
<add key="SUCCESS_TO" value="<<to email for successful run>>" />
<add key="SUCCESS_CC" value="<<cc email for successful run>>" />
<add key="FAIL_FROM" value="<<from email for failures>>" />
<add key="FAIL_TO" value="<<to email for failures>>" />
<add key="FAIL_CC" value="<<cc email for failures>>" />
<add key="SQL_1"
value="select Rate from tbCurrency where Currency='[[CURRENCY_CODE]]'" />
<add key="SQL_2"
value="update tbCurrency set Rate=[[RATE]],
UpdatedOn=getdate() where Currency='[[CURRENCY_CODE]]'" />
在上述键中,需要进一步说明的键是 SQL_1
和 SQL_2
SQL_1
- 这是从表中检索当前货币汇率的 SQL。用于发送包含旧汇率的更新成功电子邮件。SQL_2
- 这是更新 SQL。请注意,[[RATE]]
和[[CURRENCY_CODE]]
将在运行时被替换。
编译项目。
就这样了……
该项目使用了 Desmond McCarter 开发并托管在 此处 的 POP3 组件。