⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processor.vb

📁 Visual Basic.NET控件时尚编程百例
💻 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 + -