📄 processor.vb
字号:
Imports System.IO
Imports System.Xml
Imports System.Web
Imports System.Data
Imports System.Web.Mail
Imports System.Data.OleDb
'引入ADO.NET操作命名空间
Imports System.Xml.Schema
Imports System.Xml.Serialization
Public Class Processor
Public strFolder As String = "C:\Order"
Private watcher As FileSystemWatcher
Public DBstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Order\tbOrder.mdb"
Public Sub StartUp()
watcher = New FileSystemWatcher(strFolder)
'实例化监控类
AddHandler watcher.Created, AddressOf Me.ProcessOrder
watcher.Filter = "*.xml"
'开始监控
watcher.EnableRaisingEvents = True
Log("正在监控 '" & strFolder & "'")
'通知用户
End Sub
Public Sub ShutDown()
'停止监控
If Not watcher Is Nothing Then
watcher.EnableRaisingEvents = False '
watcher = Nothing
Log("关闭后台监控程序")
End If
End Sub
Public Sub Log(ByVal buf As String)
Console.WriteLine(Date.Now.ToShortTimeString & ":" & buf)
End Sub
Public Function ProcessOrder(ByVal filename As String) _
As OrderGenerator.OrderResponse
Dim reader As New XmlTextReader(filename)
Dim response As OrderGenerator.OrderResponse = ProcessOrder(reader)
reader.Close()
Return response
End Function
Public Function ProcessOrder(ByVal reader As XmlTextReader) _
As OrderGenerator.OrderResponse
Dim response As New OrderGenerator.OrderResponse()
Dim request As New OrderGenerator.OrderGenerator()
request.ReadXML(reader)
Dim conn As New OleDbConnection(DBstr)
conn.Open()
response.ProcessorDate = Date.Now
response.ExcuteDate = Date.Now.AddDays(5)
response.FreightCharge = 10
response.OrderID = GetOrder(conn, request, response.FreightCharge)
Dim requestdetail As New OrderGenerator.Requestdetail()
For Each requestdetail In request.Details
Dim responsedetail As New OrderGenerator.ResponseDetail()
response.Detail.Add(responsedetail)
responsedetail.ProductID = requestdetail.ProductID
responsedetail.Quantity = requestdetail.Quantity
responsedetail.UnitPrice = 12.35
responsedetail.Discount = 0.2
responsedetail.UnitPrice = responsedetail.UnitPrice * _
(1 - responsedetail.Discount)
responsedetail.Total = responsedetail.Quantity * _
responsedetail.UnitPrice
AddOrderDetail(conn, response.OrderID, requestdetail, _
responsedetail.Discount, responsedetail.UnitPrice)
response.SubTotal += responsedetail.Total
Next
response.Total = response.SubTotal + response.FreightCharge
conn.Close()
SendResponse(response)
Return response
End Function
Public Sub SendResponse(ByVal response As OrderGenerator.OrderResponse)
Dim stream As New MemoryStream()
Dim serializer As New XmlSerializer(response.GetType)
serializer.Serialize(stream, response)
stream.Seek(0, SeekOrigin.Begin)
Dim reader As New StreamReader(stream)
Dim responseXML As String
responseXML = reader.ReadToEnd
reader.Close()
stream.Close()
Dim EmailAddress As String
EmailAddress = GetEmailAddress("c:\Order\TestOrder.xml")
'获得Email地址
SendEmail(EmailAddress, response, responseXML)
End Sub
Public Function GetEmailAddress(ByVal filename As String) As String
Dim reader As New XmlTextReader(filename)
'打开订单文件
reader.MoveToContent()
'定位到文档的开头
Dim index As Integer = 0
Dim tempstr As String
Dim count As Integer = 0
Do While reader.Read
Select Case reader.NodeType
'节点类型
Case XmlNodeType.Element
'一个元素的开始
If reader.Name <> "ReponseEmail" Then
count += 1
Exit Select
End If
Case XmlNodeType.Text
index += 1
If index <= count Then
tempstr = ""
Else
tempstr = reader.Value
End If
If tempstr <> "" Then
Return tempstr
'返回Email地址
Exit Select
reader.Close()
End If
End Select
Loop
End Function
Public Sub SendEmail(ByVal EmailAddress As String, _
ByVal response As OrderGenerator.OrderResponse, _
ByVal message As String)
Try
SmtpMail.Send("server@WebShop.com", EmailAddress, _
"订单已收到,订单序号:" & response.OrderID, message) '发送邮件
Log("回复客户订单到: '" & EmailAddress & "'")
'写日志信息
Catch ex As Exception
ReportException(ex)
'错误处理
End Try
End Sub
Public Sub ReportException(ByVal ex As Exception)
Do While Not ex.InnerException Is Nothing
ex = ex.InnerException
Loop
Log("An exception occured: " & ex.Message)
'报告错误
Console.WriteLine(ex.Source)
Console.WriteLine(ex.StackTrace)
End Sub
Public Sub ProcessOrder(ByVal sender As Object, _
ByVal e As FileSystemEventArgs)
'订单处理
Log("处理订单 '" & e.FullPath & "'...")
'通知用户
Dim response As OrderGenerator.OrderResponse
response = ProcessOrder(e.FullPath)
Log("完成处理 '" & e.FullPath & "'...")
'通知用户
End Sub
Public Function GetOrder(ByVal conn As OleDbConnection, _
ByVal order As OrderGenerator.OrderGenerator, _
ByVal freightCharge As Single) As Integer
Dim ADOcmd As OleDbDataAdapter
'建立ADODataSetCommand对象
Dim ds As DataSet = New DataSet()
'建立DataSet对象
Dim mytable As Data.DataTable
'建立表单对象
Dim myrow As Data.DataRow
'建立数据行对象
Dim rownumber As Integer
'定义一个整型变量来存放当前行数
Dim SearchSQL As String
Dim cmd As OleDbCommandBuilder
SearchSQL = "SELECT * FROM tbOrder"
'构造查询
ADOcmd = New OleDbDataAdapter(SearchSQL, DBstr)
'建立ADODataSetCommand对象
ADOcmd.Fill(ds, "tbOrder")
'取得表单
mytable = ds.Tables.Item(0)
'取得名为table的表
If ds Is Nothing Then
rownumber = 1
Else
rownumber = mytable.Rows.Count + 1
End If
Dim newrow As DataRow
newrow = mytable.NewRow
newrow.Item(1) = order.CustomerID
newrow.Item(2) = order.PreferShopMethod
newrow.Item(3) = order.ShopAddress.Address
newrow.Item(4) = order.ShopAddress.Name
newrow.Item(5) = order.ShopAddress.City
newrow.Item(6) = order.ShopAddress.PostalCode
newrow.Item(7) = order.ShopAddress.Country
newrow.Item(8) = order.ShopAddress.Region
newrow.Item(9) = order.ReponseEmail
mytable.Rows.Add(newrow)
cmd = New OleDbCommandBuilder(ADOcmd)
'使用自动生成的SQL语句
ADOcmd.Update(ds, "tbOrder")
'对数据库进行更新
Log("已经完成将客户订单保存到数据库")
Return rownumber
End Function
Public Sub AddOrderDetail(ByVal conn As OleDbConnection, _
ByVal orderid As Integer, ByVal detail As _
OrderGenerator.Requestdetail, ByVal discount As Single, _
ByVal unitprice As Single)
Dim ADOcmd As OleDbDataAdapter
'建立ADODataSetCommand对象
Dim ds As DataSet = New DataSet()
'建立DataSet对象
Dim mytable As Data.DataTable
'建立表单对象
Dim myrow As Data.DataRow
'建立数据行对象
Dim cmd As OleDbCommandBuilder
Dim SQLstr As String
SQLstr = "SELECT * FROM OrderID"
ADOcmd = New OleDbDataAdapter(SQLstr, conn)
'建立ADODataSetCommand对象
ADOcmd.Fill(ds, "OrderID")
'取得表单
mytable = ds.Tables.Item(0)
'取得名为table的表
Dim newrow As DataRow
newrow = mytable.NewRow
newrow.Item(0) = orderid
newrow.Item(1) = detail.ProductID
newrow.Item(2) = detail.Quantity
newrow.Item(3) = discount
newrow.Item(4) = unitprice
mytable.Rows.Add(newrow)
cmd = New OleDbCommandBuilder(ADOcmd)
'使用自动生成的SQL语句
ADOcmd.Update(ds, "OrderID")
'对数据库进行更新
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -