业务处理层LINQ
对于业务处理层采用什么样的数据处理方式我一直很纠结。Sql 还是 LINQ呢,不过现在感觉各有各的优缺点。LINQ编程操作简单方便,简化众多内容;SQL相对处理就比较复杂;但是LINQ查询结果输出到报表的过程是几乎没办法完成的(RDLC除外),有时还需要将查询结果转换成SQL语句,然后到导入报表查询中,相当于写了两次查询。让人颇是头晕。在LINQ还没有被众多用户接受的情况下,还是采用SQL更好,还有一个速度上,SQL在大多数的情况下,要比LINQ快。
由于在设计过程中,感觉到系统不是多复杂,没有采用接口类来实现,从今天的来看是不正确的,为自己日后的管理带来诸多不便,所以在后来的数据处理方式上,更多是采用接口类来现的。后来接口类主要采用如下方式 :
Public Interface IFDataBase
'定义公共的接口类型
Function Add() As Boolean '添加数据
Function Update() As Boolean '更新数据
Function Delete() As Boolean '删除数据
Function NameExist() As Boolean '判断名称是否在
Function Find() As ArrayList '查找
.......
End Interface
采用这种相同接口类,为统一管理和操作带来很大便利。我会再以后系统设计中加以说明的。
书归正传,以tbledinfo表建立一个DbtbLedInfo.dbml文件,如果所示。
然后组建处理灯信息的类,详细代码如下:
Imports System.Data.Linq
Imports System.Data.Linq.Mapping
Imports System.Text
Public Class ClsTbLedInfo
Public Const cId As String = "序号"
Public Const cLedTitle As String = "灯名称" '标题
Public Const cLedAddress As String = "模块地址" '模块地址
Public Const cLedChl As String = "通道数" '模块通道数
Public Const cLedDirection1 As String = "通道方向1" '输出通道
Public Const cLedDirection2 As String = "通道方向2" '输出通道
Public Const cLedDirection3 As String = "通道方向3" '输出通道
Public Const cLedDirection4 As String = "通道方向4" '输出通道
Public Const cLedEnabled As String = "启动状态" '启动状态
Public Const cMemos As String = "备注" '备注
Dim MyDc As New DbtbLedInfoDataContext
‘返回全部数据
Public Function ReadALl() As IEnumerable
Return From MytbInfo In MyDc.tbLedInfo Select MytbInfo
End Function
‘添加数据过程
Public Function Add(ByVal pLedInfo As tbLedInfo) As Boolean
Try
Dim myIp As New tbLedInfo
myIp.灯名称 = pLedInfo.灯名称
myIp.模块地址 = pLedInfo.模块地址
myIp.通道数 = pLedInfo.通道数
myIp.通道方向1 = pLedInfo.通道方向1
myIp.通道方向2 = pLedInfo.通道方向2
myIp.通道方向3 = pLedInfo.通道方向3
myIp.通道方向4 = pLedInfo.通道方向4
myIp.启动状态 = pLedInfo.启动状态
myIp.备注 = pLedInfo.备注
MyDc.tbLedInfo.InsertOnSubmit(myIp)
MyDc.SubmitChanges()
Return True
Catch ex As Exception
msgBox(ex.ToString)
Return False
End Try
End Function
Public Function ModifyLedInfo(ByVal NewValue As tbLedInfo) As Boolean
Try
Dim MyQuery = From MyLed In MyDc.tbLedInfo Where MyLed.序号 = NewValue.序号 Select MyLed
For Each c In MyQuery
' c.序号 = NewValue.序号
c.灯名称 = NewValue.灯名称
c.模块地址 = NewValue.模块地址
c.通道数 = NewValue.通道数
c.启动状态 = NewValue.启动状态
c.通道方向1 = NewValue.通道方向1
c.通道方向2 = NewValue.通道方向2
c.通道方向3 = NewValue.通道方向3
c.通道方向4 = NewValue.通道方向4
Next
MyDc.SubmitChanges()
Return True
Catch ex As Exception
MsgBox(ex.ToString)
Return False
End Try
End Function
Public Function ExistBy(ByVal pLedTitle As String) As Boolean
Try
Dim MyQuery = From myLedIp In MyDc.tbLedInfo Select myLedIp Where myLedIp.灯名称 = pLedTitle
If MyQuery.Count < 1 Then
Return False
Else
Return True
End If
Catch ex As Exception
MsgBox(ex.ToString)
Return False
End Try
End Function
Public Function Del(ByVal pLedTitle As String) As Boolean
Try
Dim MyQuery = From MyLedIp In MyDc.tbLedInfo Where MyLedIp.灯名称.Equals(pLedTitle) Select MyLedIp
While (MyQuery.Count() > 0)
MyDc.tbLedInfo.DeleteOnSubmit(MyQuery.First())
MyDc.SubmitChanges()
End While
Return True
Catch ex As Exception
MsgBox(ex.ToString)
Return False
End Try
End Function
Public Function ReadLed() As ArrayList
Try
Dim MyQuery = From myLedIp In MyDc.tbLedInfo Select New With {.LedIp = myLedIp.灯名称} Distinct
Dim MyLst As New ArrayList
Dim P As New Collection
'Console.WriteLine(MyQuery.Count.ToString)
For Each c In MyQuery
MyLst.Add(c.LedIp.Trim)
Next
Return MyLst
Catch ex As Exception
Return Nothing
End Try
End Function
'只有此处用到ledName
Public Function Find(ByVal pLedTitle As String) As tbLedInfo
Dim MyIp As New tbLedInfo
Dim MyQuery = From myLedIp In MyDc.tbLedInfo Where myLedIp.灯名称.Equals(pLedTitle) Select myLedIp
If MyQuery Is Nothing Then
Return Nothing
End If
MyIp = MyQuery.FirstOrDefault
Return MyIp
End Function
Public Function Find(ByVal pLedChl As Integer) As tbLedInfo
Dim MyIp As New tbLedInfo
Dim MyQuery = From myLedIp In MyDc.tbLedInfo Where myLedIp.模块地址 = pLedChl Select myLedIp
If MyQuery Is Nothing Then
Return Nothing
End If
MyIp = MyQuery.FirstOrDefault
Return MyIp
End Function
Public Overloads Function FindLedName() As ArrayList
Try
Dim MyQuery = From myLedIp In MyDc.tbLedInfo Select myLedIp
Dim MyLst As New ArrayList
Dim P As New ArrayList
For Each c In MyQuery
P.Add(c.灯名称)
Next
Return P
Catch ex As Exception
Return Nothing
End Try
End Function
End Class