当前代码实现根据选择的文本文件,读取标题列创建对应的表,赋值对应的表字段值,也可实现对应的文件目录下批量导入数据,代码略显繁琐,老师们是否可以帮忙精简一下代码呢?
Dim dlg As new OpenFileDialog
dlg.Filter = "文本文件|*.txt"
Dim t2 As WinForm.TextBox = e.Form.Controls("TextBox2")
Dim t1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim ck As WinForm.CheckBox = e.Form.Controls("是否批量导入")
If dlg.ShowDialog = DialogResult.OK Then
If ck.Checked=True Then '选择批量导入
'先从其中一个文本里面读取字段列,然后判断表是否存在数据库中,如果不存在,就创建,反之就不创建表
Dim Multi As String
Dim strs As String = FileSys.ReadAllText(dlg.FileName, Encoding.Default)
t2.text=dlg.FileName
Dim Values11() As String = strs.Replace(vbcr,"").split(vblf)
For i1 As Integer = 0 To 0
Dim rs As String = Values11(0)
For i As Integer = 0 To 0
Dim cs() As String = rs.Split(vbtab)
output.Show(cs(0))
Multi = cs(0)
Next
Next
Dim ab As String="否"
Dim lst1 As List(Of String)
lst1 = Connections(" 委").GetTableNames
For Each nm1 As String In lst1
output.show(nm1)
If t1.text=nm1 Then
ab="是"
End If
Next
Dim Values() As String
Values = Multi.split("|")
If ab="是" Then
Else
Dim Builder As New ADOXBuilder(" 委") '要指定数据源名称
Dim tbl As ADOXTable
Builder.Open()
tbl = Builder.NewTable(t1.text) '创建表
With tbl
For Index1 As Integer = 0 To Values.Length - 1
.AddColumn(Values(Index1) ,ADOXType.String, 255)
Next
End With
Builder.AddTable(tbl, True, True) '增加表
Builder.Close()
Dim Builder1 As New ADOXBuilder(" 委") '要指定数据源名称
Builder1.Open() '打开ADOXBuilder
With Builder1.Tables(t1.text)
.AddColumn("日期" ,ADOXType.DateTime) '增加日期型列
End With
Builder1.Close() '关闭ADOXBuilder
End If
'遍历选择的文件所在根目录,然后遍历目录下的所有文件,然后开始赋值
For Each File As String In FileSys.GetFiles(FileSys.GetParentPath(dlg.FileName))
Dim strs1 As String = FileSys.ReadAllText(File, Encoding.Default)
t2.text=FileSys.GetParentPath(dlg.FileName)
Dim Values111() As String = strs1.Replace(vbcr,"").split(vblf)
Dim cmd As New SQ LCo mmand
cmd.Conne ction Name = " 委"
Dim dt As DataTable
Dim bbb As String ="SEL ECT * From {" & t1.text & "}"" "
cmd.Comm andText = bbb
dt = cmd.ExecuteReader()
Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
tb1.Table.DataSource = dt
tb1.Table.StopRedraw
For i As Integer = 1 To Values111.length - 1
Dim cs() As String = Values111(i).split("|")
Dim r As Row = tb1.Table.AddNew
For i1 As Integer = 0 To math.min(cs.Length-1, tb1.Table.cols.count - 1)
Dim bb As String=cs(i1).trim()
If bb > "" Then
If Values(i1).Contains("时间") OrElse Values(i1).Contains("日期") Then
Dim d As Date = cdate(bb)
r("日期")= Format(d, "yyyy-MM-dd")
r(i1) = cs(i1)
Else
r(i1) = cs(i1)
End If
End If
Next
Next
tb1.Table.ResumeRedraw
Next
Else
Dim Multi As String
Dim strs As String = FileSys.ReadAllText(dlg.FileName, Encoding.Default)
t2.text=dlg.FileName
Dim Values11() As String = strs.Replace(vbcr,"").split(vblf)
For i1 As Integer = 0 To 0
Dim rs As String = Values11(0)
For i As Integer = 0 To 0
Dim cs() As String = rs.Split(vbtab)
output.Show(cs(0))
Multi = cs(0)
Next
Next
Dim ab As String="否"
Dim lst As List(Of String)
lst = Connections(" 委").GetTableNames
For Each nm As String In lst
output.show(nm)
If t1.text=nm Then
ab="是"
End If
Next
Dim Values() As String
Values = Multi.split("|")
If ab="是" Then
Else
Dim Builder As New ADOXBuilder(" 委") '要指定数据源名称
Dim tbl As ADOXTable
Builder.Open()
tbl = Builder.NewTable(t1.text) '创建表
With tbl
For Index1 As Integer = 0 To Values.Length - 1
.AddColumn(Values(Index1) ,ADOXType.String, 255)
Next
End With
Builder.AddTable(tbl, True, True) '增加表
Builder.Close()
Dim Builder1 As New ADOXBuilder(" 委") '要指定数据源名称
Builder1.Open() '打开ADOXBuilder
With Builder1.Tables(t1.text)
.AddColumn("日期" ,ADOXType.DateTime) '增加日期型列
End With
Builder1.Close() '关闭ADOXBuilder
End If
Dim cmd As New SQ LC o mmand
cmd.Conn ection Name = " 委"
Dim dt As DataTable
Dim bbb As String ="SEL E CT * From {" & t1.text & "}"" "
cmd.Comma ndText = bbb
dt = cmd.ExecuteReader()
Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
tb1.Table.DataSource = dt
tb1.Table.StopRedraw
For i As Integer = 1 To Values11.length - 1
Dim cs() As String = Values11(i).split("|")
Dim r As Row = tb1.Table.AddNew
For i1 As Integer = 0 To math.min(cs.Length-1, tb1.Table.cols.count - 1)
Dim bb As String=cs(i1).trim()
If bb > "" Then
If Values(i1).Contains("时间") OrElse Values(i1).Contains("日期") Then
Dim d As Date = cdate(bb)
r("日期")= Format(d, "yyyy-MM-dd")
r(i1) = cs(i1)
Else
r(i1) = cs(i1)
End If
End If
Next
Next
tb1.Table.ResumeRedraw
End If
End If