📄 clscsharpcoder.cls
字号:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "clsCSharpCoder"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Private adtAdoType As AdoNetType
Private AdoName As String
Private XMLSource As String
Private sNameSpace As String
Public Event InitCompleted(ByVal MaxValue As Long)
Public Event ExportStep(ByVal Value As Long)
Public Event ExportCompleted()
Public Event ExportingClass(ByVal ClassName As String)
Public Event ClassExported(ByVal ClassName As String)
Public Event MakingExtends(Cancel As Boolean) '正在输出扩展实体类
Public Sub Init(ByVal AdoType As AdoNetType, ByVal SrcXmlPath As String, ByVal NameSpace As String)
Dim tmpText As String
adtAdoType = AdoType
XMLSource = ""
sNameSpace = NameSpace
Open SrcXmlPath For Input As #1
While Not EOF(1)
tmpText = ""
Input #1, tmpText
XMLSource = XMLSource & tmpText & vbCrLf
Wend
Close #1
If adtAdoType = OleDb Then
AdoName = "OleDb"
ElseIf adtAdoType = Sql Then
AdoName = "Sql"
End If
End Sub
Private Sub MakeFolders(Path As String, DetailsPath As String, BasePath As String, EntityBasePath As String, _
QPCPath As String, SPCPath As String)
On Error Resume Next
Call MkDir(DetailsPath) '创建文件夹
Call MkDir(BasePath) '创建文件夹
Call MkDir(EntityBasePath) '创建文件夹
Call MkDir(QPCPath) '创建文件夹
Call MkDir(SPCPath) '创建文件夹
End Sub
Public Sub ExportCode(ByVal Path As String)
Dim Conn As String
Dim Doc As New DOMDocument
Dim DetailsPath As String '实体描述路径
Dim BasePath As String '基类路径
Dim EntityBasePath As String '基础实体路径
Dim QPCPath As String 'PQC路径
Dim SPCPath As String 'SQC路径
Dim Codes As String
Dim strName As String
Dim ClassName As String
Dim ObjectName As String
Dim ID As String
Dim IDType As String
Doc.loadXML XMLSource
DetailsPath = Path & "\Details"
BasePath = Path & "\Base"
EntityBasePath = Path & "\EntityBase"
QPCPath = Path & "\Base\QPC"
SPCPath = Path & "\Base\SPC"
MakeFolders Path, DetailsPath, BasePath, EntityBasePath, QPCPath, SPCPath
RaiseEvent InitCompleted(Doc.firstChild.childNodes.length)
For i = 0 To Doc.firstChild.childNodes.length - 1
'新建描述类
DoEvents
strName = Doc.firstChild.childNodes(i).Attributes(0).Text
ClassName = GetClassName(strName)
ObjectName = GetObjectName(strName)
RaiseEvent ExportingClass(ClassName)
IDType = Doc.firstChild.childNodes(i).childNodes(0).Attributes(0).Text
ID = Doc.firstChild.childNodes(i).childNodes(0).Attributes(1).Text
Codes = "using System;" & vbCrLf
Codes = Codes & vbCrLf
Codes = Codes & "namespace " & sNameSpace & "DataAS.Details" & vbCrLf
Codes = Codes & "{" & vbCrLf
Codes = Codes & vbTab & "[Serializable]" & vbCrLf
Codes = Codes & vbTab & "public class " & ClassName & "Details" & vbCrLf
Codes = Codes & vbTab & "{" & vbCrLf
For j = 0 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & "protected " & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & _
" _" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & ";" & vbCrLf
Next j
Codes = Codes & vbCrLf
'属性
For j = 0 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & "public " & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & _
" " & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & vbCrLf & _
vbTab & vbTab & "{" & vbCrLf & _
vbTab & vbTab & vbTab & "get" & vbCrLf & _
vbTab & vbTab & vbTab & "{" & vbCrLf & _
vbTab & vbTab & vbTab & vbTab & "return _" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & ";" & vbCrLf & _
vbTab & vbTab & vbTab & "}" & vbCrLf & _
vbTab & vbTab & vbTab & "set" & vbCrLf & _
vbTab & vbTab & vbTab & "{" & vbCrLf & _
vbTab & vbTab & vbTab & vbTab & "_" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & " = value;" & vbCrLf & _
vbTab & vbTab & vbTab & "}" & vbCrLf & _
vbTab & vbTab & "}" & vbCrLf & vbCrLf
Next j
If Doc.firstChild.childNodes(i).childNodes.length > 1 Then
'填充方法 1
Codes = Codes & vbTab & vbTab & "/// <summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// 部分填充" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// </summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "public void Fill("
Codes = Codes & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(1).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(1).Attributes(1).Text
For j = 2 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & "," & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text
Next j
Codes = Codes & ")" & vbCrLf
Codes = Codes & vbTab & vbTab & "{" & vbCrLf
For j = 1 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & vbTab & "this._" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & " = " & _
Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & ";" & vbCrLf
Next j
Codes = Codes & vbTab & vbTab & "}" & vbCrLf '填充方法结束
Codes = Codes & vbCrLf
End If
'填充方法 2
Codes = Codes & vbTab & vbTab & "/// <summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// 全部填充" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// </summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "public void Fill("
Codes = Codes & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(0).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(0).Attributes(1).Text
For j = 1 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & "," & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text
Next j
Codes = Codes & ")" & vbCrLf
Codes = Codes & vbTab & vbTab & "{" & vbCrLf
For j = 0 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & vbTab & "this._" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & " = " & _
Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & ";" & vbCrLf
Next j
Codes = Codes & vbTab & vbTab & "}" & vbCrLf '填充方法结束
Codes = Codes & vbCrLf
'构造函数 1
Codes = Codes & vbTab & vbTab & "/// <summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// 无参数构造" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// </summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "public " & ClassName & "Details()" & vbCrLf
Codes = Codes & vbTab & vbTab & "{" & vbCrLf
Codes = Codes & vbTab & vbTab & "}" & vbCrLf '构造函数结束
Codes = Codes & vbCrLf
'构造函数 2
If Doc.firstChild.childNodes(i).childNodes.length > 1 Then
Codes = Codes & vbTab & vbTab & "/// <summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// 部分填充" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// </summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "public " & ClassName & "Details("
Codes = Codes & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(1).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(1).Attributes(1).Text
For j = 2 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & "," & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text
Next j
Codes = Codes & ")" & vbCrLf
Codes = Codes & vbTab & vbTab & "{" & vbCrLf
For j = 1 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & vbTab & "this._" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & " = " & _
Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & ";" & vbCrLf
Next j
Codes = Codes & vbTab & vbTab & "}" & vbCrLf '构造函数结束
Codes = Codes & vbCrLf
End If
'构造函数 3
Codes = Codes & vbTab & vbTab & "/// <summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// 全部填充" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// </summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "public " & ClassName & "Details("
Codes = Codes & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(0).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(0).Attributes(1).Text
For j = 1 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & "," & FilterToCSharp(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & " " & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text
Next j
Codes = Codes & ")" & vbCrLf
Codes = Codes & vbTab & vbTab & "{" & vbCrLf
For j = 0 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & vbTab & "this._" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & " = " & _
Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & ";" & vbCrLf
Next j
Codes = Codes & vbTab & vbTab & "}" & vbCrLf '构造函数结束
Codes = Codes & vbCrLf
'构造函数 4
Codes = Codes & vbTab & vbTab & "/// <summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// 构造通过数据行转换" & vbCrLf
Codes = Codes & vbTab & vbTab & "/// </summary>" & vbCrLf
Codes = Codes & vbTab & vbTab & "public " & ClassName & "Details(System.Data.DataRow dataRow)" & vbCrLf
Codes = Codes & vbTab & vbTab & "{" & vbCrLf
For j = 0 To Doc.firstChild.childNodes(i).childNodes.length - 1
Codes = Codes & vbTab & vbTab & vbTab & "this._" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & " = " & _
GetCSharpType(Doc.firstChild.childNodes(i).childNodes(j).Attributes(0).Text) & "(dataRow[""" & Doc.firstChild.childNodes(i).childNodes(j).Attributes(1).Text & """]);" & vbCrLf
Next j
Codes = Codes & vbTab & vbTab & "}" & vbCrLf '构造函数结束
Codes = Codes & vbCrLf
Codes = Codes & vbCrLf
Codes = Codes & vbTab & "}" & vbCrLf '类结束
Codes = Codes & "}" & vbCrLf '命名空间结束
'保存 Details 文件
Call SaveFile(DetailsPath & "\" & ClassName & "Details.cs", Codes)
'新建操作类
Dim IdentityColumnDataType As String
Codes = Empty
Codes = Codes & "using System;" & vbCrLf
Codes = Codes & "using System.Collections;" & vbCrLf
Codes = Codes & "using System.Data;" & vbCrLf
If adtAdoType = OleDb Then
Conn = "System.Data.OleDb.OleDbConnection"
Codes = Codes & "using System.Data.OleDb;" & vbCrLf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -