📄 processor.vb
字号:
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.Serialization
'Imports System.Data.SqlClient
Imports System.Web
Imports System.Web.Mail
Imports System.Data
'引入数据库操作类命名空间
Imports System.Data.OleDb
'引入ADO.NET操作命名空间
Public Class Process
'类成员
Public Const WatchFolder As String = "C:\Order" ' 监控的文件夹
' Public Shared DbString As String = "Initial Catalog=NorthwindSQL;Data Source=NET-MONKEY\NetSDK;User ID=sa"
Private watcher As FileSystemWatcher '定义watcher类
Public Sub Start()
watcher = New FileSystemWatcher(WatchFolder) '实例化监控类
AddHandler watcher.Created, AddressOf Me.ProcessOrder
watcher.Filter = "*.xml" '开始监控
watcher.EnableRaisingEvents = True
Log("监控 '" & WatchFolder & "'") '通知用户
SavetoDatabase()
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.ToLongTimeString & ": " & buf) '监控日志
End Sub
Public Sub ProcessOrder(ByVal sender As Object, _
ByVal e As FileSystemEventArgs)
'订单处理
Log("处理订单 '" & e.FullPath & "'...") '通知用户
SendEmail()
Log("完成处理 '" & e.FullPath & "'...") '通知用户
End Sub
Public Function GetEmailAddress(ByVal filename As String) As String
Dim reader As New XmlTextReader(filename) '打开订单文件
reader.MoveToContent() '定位到文档的开头
Do While reader.Read '搜索整个文档
Select Case reader.NodeType '节点类型
Case XmlNodeType.Element '一个元素的开始6
If reader.Name <> "Email" Then '
Exit Select
End If
Case XmlNodeType.Text '元素的文本内容
Return reader.Value '返回Email地址
End Select
Loop
End Function
Public Function SendEmail()
Dim EmailAddress As String = Me.GetEmailAddress("c:\Order\Order.xml")
'获得Email地址
Try
SmtpMail.Send("server@ChinaDrag.com", EmailAddress, "你的订单已经收到", "订单已经收到")
'发送邮件
Log("回复客户订单到: '" & EmailAddress & "'")
'写日志信息
Catch ex As Exception
ReportException(ex) '错误处理
End Try
End Function
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 SavetoDatabase()
Dim order As Order = _
Process.ReadOrder("C:\Order\Order.xml", GetType(Order))
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, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Order\Order.mdb")
'建立ADODataSetCommand对象
ADOcmd.Fill(ds, "tbOrder") '取得表单
mytable = ds.Tables.Item(0) '取得名为table的表
'rownumber = 0 '设置为第一行
'myrow = mytable.Rows.Item(rownumber)
'取得第一行数据
Dim newrow As DataRow
newrow = mytable.NewRow
newrow.Item(0) = Order.CustomerNo '给第一个字段赋值
newrow.Item(1) = Order.CompanyName '给第二个字段赋值
newrow.Item(2) = Order.ShippingMethod
newrow.Item(3) = Order.Quantity
newrow.Item(4) = Order.City
newrow.Item(5) = Order.PostalCode
newrow.Item(6) = Order.Country
newrow.Item(7) = Order.Email
mytable.Rows.Add(newrow) '添加新用户
cmd = New OleDbCommandBuilder(ADOcmd)
'使用自动生成的SQL语句
ADOcmd.Update(ds, "tbOrder")
'对数据库进行更新
Log("已经完成将客户订单保存到数据库")
End Sub
Public Shared Function ReadOrder(ByVal filename As String, _
ByVal newType As Type) As Object
Dim fileInfo As New FileInfo(filename)
If fileInfo.Exists = False Then
'判断文件是否存在
Return System.Activator.CreateInstance(newType) '建立一个对象
End If
Dim stream As New FileStream(filename, FileMode.Open) '打开文件
Dim newObject As Object = ReadOrder(stream, newType) '从流中加载对象
stream.Close() '关闭流
Return newObject '返回对象
End Function
Public Shared Function ReadOrder(ByVal stream As Stream, _
ByVal newType As Type) As Object
Dim serializer As New XmlSerializer(newType) '建立XmlSerializer对象
Dim newObject As Object = serializer.Deserialize(stream)
Return newObject
End Function
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -