将数据导出到文本文件,并从文本文件导入数据

来源:互联网 发布:环境污染数据 编辑:程序博客网 时间:2024/04/19 11:40
将数据导出到文本文件,并从文本文件导入数据
 
所谓把数据导出到文本文件,其实就是把数据作为文本以一定格式写入文本文件。然后,把文件里的文本读出来,还原成一行一行一列一列的数据,之后放入数据集。下面这段程序定义了一个窗体。窗体中有两个DataGrid和两个DataSet。第一个DataGrid绑定到第一个DataSetemployees表,第二个DataGrid绑定到第二个DataSetemployees表。方法OutputData()用于把第一个DataSet的employees表的数据组合成文本,然后输出到文本文件里,而方法InputData()把文本文件里的文本读出来,分解成一个一个的数据,然后送入第二个DataSet的employees表。
 
可以把整个代码粘贴到项目文件里,就可以运行。重点看一下OutputData()和InputData()方法。如下所示:
 
'从数据集把数据导出到文本文件
    Private Sub OutputData()
        '文件名
        Dim fileName As String = "test.txt"
        '如果该文件存在就删除
        If File.Exists(fileName) Then
            File.Delete(fileName)
        End If
        '创建新的文件
        Dim fs As FileStream = File.Create(fileName)
        fs.Close()
        '打开文件并建立stream writer
        fs = File.OpenWrite(fileName)
        Dim sw As New StreamWriter(fs)
 
        '得到datatable
        Dim dtEmp As DataTable = Me.dsHR.Tables.Item("employees")
        '利用双循环把数据一行一列的写到stream writer
        For Each row As DataRow In dtEmp.Rows
            Dim str As String = ""
            For Each col As DataColumn In dtEmp.Columns
                str = str & row.Item(col.ColumnName).ToString() & "*"
            Next
            sw.WriteLine(str)
        Next
 
        sw.Flush() '清理缓冲区并写入基础流
        sw.Close() '关闭stream writer       
    End Sub
 
    '从文本文件把数据导入数据集
    Private Sub InputData()
        '文件名
        Dim fileName As String = "test.txt"
        If Not File.Exists(fileName) Then
            Return
        End If
 
        Dim sr As StreamReader = File.OpenText(fileName)
 
        Dim dtEmp As DataTable = Me.dsHR2.Tables("employees")
 
        Dim str As String = sr.ReadLine()
        '如果文件里还有行就继续
        While Not (str Is Nothing)
            '得到新行
            Dim row As DataRow = dtEmp.NewRow()
            Dim startIndex As Integer = 0
            Dim endIndex As Integer = 0
            '给新行的每一个字段写入数据
            For Each col As DataColumn In dtEmp.Columns
                endIndex = str.IndexOf("*", startIndex)
                Dim colStr As String
                If endIndex > startIndex Then
                    colStr = str.Substring(startIndex, endIndex - startIndex)
                End If
                row.Item(col.ColumnName) = colStr
                endIndex += 1
                startIndex = endIndex
            Next
            '如果主键没有重复就加入到表里
            Dim rows() As DataRow = dtEmp.Select("emp_id =" & row.Item("emp_id").ToString())
            If rows.Length < 1 Then
                dtEmp.Rows.Add(row)
            End If
            '读下一行文本
            str = sr.ReadLine()
        End While
 
        sr.Close()
    End Sub
 
下面给出了全部的代码,作为参考。
 
Imports System.IO
Imports System.Text
 
Public Class Form1
    Inherits System.Windows.Forms.Form
 
#Region " Windows 窗体设计器生成的代码 "
 
    Public Sub New()
        MyBase.New()
 
        '该调用是 Windows 窗体设计器所必需的。
        InitializeComponent()
 
        '在 InitializeComponent() 调用之后添加任何初始化
 
    End Sub
 
    '窗体重写 dispose 以清理组件列表。
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
 
    'Windows 窗体设计器所必需的
    Private components As System.ComponentModel.IContainer
 
    '注意: 以下过程是 Windows 窗体设计器所必需的
    '可以使用 Windows 窗体设计器修改此过程。
    '不要使用代码编辑器修改它。
    Friend WithEvents adptEmp As System.Data.OleDb.OleDbDataAdapter
    Friend WithEvents OleDbSelectCommand1 As System.Data.OleDb.OleDbCommand
    Friend WithEvents OleDbInsertCommand1 As System.Data.OleDb.OleDbCommand
    Friend WithEvents OleDbUpdateCommand1 As System.Data.OleDb.OleDbCommand
    Friend WithEvents OleDbDeleteCommand1 As System.Data.OleDb.OleDbCommand
    Friend WithEvents conn As System.Data.OleDb.OleDbConnection
    Friend WithEvents dsHR As TxtData.DataSetHR
    Friend WithEvents dgEmp As System.Windows.Forms.DataGrid
    Friend WithEvents dvEmp As System.Data.DataView
    Friend WithEvents btnOutput As System.Windows.Forms.Button
    Friend WithEvents btnInput As System.Windows.Forms.Button
    Friend WithEvents dgEmp2 As System.Windows.Forms.DataGrid
    Friend WithEvents dsHR2 As TxtData.DataSetHR
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.adptEmp = New System.Data.OleDb.OleDbDataAdapter
        Me.OleDbDeleteCommand1 = New System.Data.OleDb.OleDbCommand
        Me.conn = New System.Data.OleDb.OleDbConnection
        Me.OleDbInsertCommand1 = New System.Data.OleDb.OleDbCommand
        Me.OleDbSelectCommand1 = New System.Data.OleDb.OleDbCommand
        Me.OleDbUpdateCommand1 = New System.Data.OleDb.OleDbCommand
        Me.dsHR = New TxtData.DataSetHR
        Me.dgEmp = New System.Windows.Forms.DataGrid
        Me.dvEmp = New System.Data.DataView
        Me.btnOutput = New System.Windows.Forms.Button
        Me.btnInput = New System.Windows.Forms.Button
        Me.dgEmp2 = New System.Windows.Forms.DataGrid
        Me.dsHR2 = New TxtData.DataSetHR
        CType(Me.dsHR, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.dgEmp, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.dvEmp, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.dgEmp2, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.dsHR2, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'adptEmp
        '
        Me.adptEmp.DeleteCommand = Me.OleDbDeleteCommand1
        Me.adptEmp.InsertCommand = Me.OleDbInsertCommand1
        Me.adptEmp.SelectCommand = Me.OleDbSelectCommand1
        Me.adptEmp.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("Table", "employees", New System.Data.Common.DataColumnMapping() {New System.Data.Common.DataColumnMapping("emp_age", "emp_age"), New System.Data.Common.DataColumnMapping("emp_dateofbirth", "emp_dateofbirth"), New System.Data.Common.DataColumnMapping("emp_department", "emp_department"), New System.Data.Common.DataColumnMapping("emp_id", "emp_id"), New System.Data.Common.DataColumnMapping("emp_name", "emp_name"), New System.Data.Common.DataColumnMapping("emp_sex", "emp_sex"), New System.Data.Common.DataColumnMapping("emp_single", "emp_single")})})
        Me.adptEmp.UpdateCommand = Me.OleDbUpdateCommand1
        '
        'OleDbDeleteCommand1
        '
        Me.OleDbDeleteCommand1.CommandText = "DELETE FROM employees WHERE (emp_id = ?) AND (emp_age = ? OR ? IS NULL AND emp_ag" & _
        "e IS NULL) AND (emp_dateofbirth = ? OR ? IS NULL AND emp_dateofbirth IS NULL) AN" & _
        "D (emp_department = ? OR ? IS NULL AND emp_department IS NULL) AND (emp_name = ?" & _
        " OR ? IS NULL AND emp_name IS NULL) AND (emp_sex = ?) AND (emp_single = ?)"
        Me.OleDbDeleteCommand1.Connection = Me.conn
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_id", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_id", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_age", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_age", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_age1", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_age", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_dateofbirth", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_dateofbirth", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_dateofbirth1", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_dateofbirth", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_department", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_department", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_department1", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_department", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_name", System.Data.OleDb.OleDbType.VarWChar, 10, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_name", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_name1", System.Data.OleDb.OleDbType.VarWChar, 10, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_name", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_sex", System.Data.OleDb.OleDbType.Boolean, 2, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_sex", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbDeleteCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_single", System.Data.OleDb.OleDbType.Boolean, 2, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_single", System.Data.DataRowVersion.Original, Nothing))
        '
        'conn
        '
        Me.conn.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database L" & _
        "ocking Mode=1;Data Source=""E:/everyday/VS/HELPREN/hr.mdb"";Jet OLEDB:Engine Type=" & _
        "5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=Fa" & _
        "lse;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OL" & _
        "EDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don'" & _
        "t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Us" & _
        "er ID=Admin;Jet OLEDB:Global Bulk Transactions=1"
        '
        'OleDbInsertCommand1
        '
        Me.OleDbInsertCommand1.CommandText = "INSERT INTO employees(emp_age, emp_dateofbirth, emp_department, emp_name, emp_sex" & _
        ", emp_single) VALUES (?, ?, ?, ?, ?, ?)"
        Me.OleDbInsertCommand1.Connection = Me.conn
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_age", System.Data.OleDb.OleDbType.Integer, 0, "emp_age"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_dateofbirth", System.Data.OleDb.OleDbType.DBDate, 0, "emp_dateofbirth"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_department", System.Data.OleDb.OleDbType.Integer, 0, "emp_department"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_name", System.Data.OleDb.OleDbType.VarWChar, 10, "emp_name"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_sex", System.Data.OleDb.OleDbType.Boolean, 2, "emp_sex"))
        Me.OleDbInsertCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_single", System.Data.OleDb.OleDbType.Boolean, 2, "emp_single"))
        '
        'OleDbSelectCommand1
        '
        Me.OleDbSelectCommand1.CommandText = "SELECT emp_age, emp_dateofbirth, emp_department, emp_id, emp_name, emp_sex, emp_s" & _
        "ingle FROM employees"
        Me.OleDbSelectCommand1.Connection = Me.conn
        '
        'OleDbUpdateCommand1
        '
        Me.OleDbUpdateCommand1.CommandText = "UPDATE employees SET emp_age = ?, emp_dateofbirth = ?, emp_department = ?, emp_na" & _
        "me = ?, emp_sex = ?, emp_single = ? WHERE (emp_id = ?) AND (emp_age = ? OR ? IS " & _
        "NULL AND emp_age IS NULL) AND (emp_dateofbirth = ? OR ? IS NULL AND emp_dateofbi" & _
        "rth IS NULL) AND (emp_department = ? OR ? IS NULL AND emp_department IS NULL) AN" & _
        "D (emp_name = ? OR ? IS NULL AND emp_name IS NULL) AND (emp_sex = ?) AND (emp_si" & _
        "ngle = ?)"
       Me.OleDbUpdateCommand1.Connection = Me.conn
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_age", System.Data.OleDb.OleDbType.Integer, 0, "emp_age"))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_dateofbirth", System.Data.OleDb.OleDbType.DBDate, 0, "emp_dateofbirth"))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_department", System.Data.OleDb.OleDbType.Integer, 0, "emp_department"))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_name", System.Data.OleDb.OleDbType.VarWChar, 10, "emp_name"))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_sex", System.Data.OleDb.OleDbType.Boolean, 2, "emp_sex"))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("emp_single", System.Data.OleDb.OleDbType.Boolean, 2, "emp_single"))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_id", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_id", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_age", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_age", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_age1", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_age", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_dateofbirth", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_dateofbirth", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_dateofbirth1", System.Data.OleDb.OleDbType.DBDate, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_dateofbirth", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_department", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_department", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_department1", System.Data.OleDb.OleDbType.Integer, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_department", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_name", System.Data.OleDb.OleDbType.VarWChar, 10, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_name", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_name1", System.Data.OleDb.OleDbType.VarWChar, 10, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_name", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_sex", System.Data.OleDb.OleDbType.Boolean, 2, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_sex", System.Data.DataRowVersion.Original, Nothing))
        Me.OleDbUpdateCommand1.Parameters.Add(New System.Data.OleDb.OleDbParameter("Original_emp_single", System.Data.OleDb.OleDbType.Boolean, 2, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "emp_single", System.Data.DataRowVersion.Original, Nothing))
        '
        'dsHR
        '
        Me.dsHR.DataSetName = "DataSetHR"
        Me.dsHR.Locale = New System.Globalization.CultureInfo("zh-CN")
        '
        'dgEmp
        '
        Me.dgEmp.DataMember = ""
        Me.dgEmp.Dock = System.Windows.Forms.DockStyle.Top
        Me.dgEmp.HeaderForeColor = System.Drawing.SystemColors.ControlText
        Me.dgEmp.Location = New System.Drawing.Point(0, 0)
        Me.dgEmp.Name = "dgEmp"
        Me.dgEmp.Size = New System.Drawing.Size(416, 224)
        Me.dgEmp.TabIndex = 0
        '
        'btnOutput
        '
        Me.btnOutput.Location = New System.Drawing.Point(8, 232)
        Me.btnOutput.Name = "btnOutput"
        Me.btnOutput.Size = New System.Drawing.Size(200, 23)
        Me.btnOutput.TabIndex = 1
        Me.btnOutput.Text = "把数据集的数据导出到文本文件"
        '
        'btnInput
        '
        Me.btnInput.Location = New System.Drawing.Point(224, 232)
        Me.btnInput.Name = "btnInput"
        Me.btnInput.Size = New System.Drawing.Size(184, 23)
        Me.btnInput.TabIndex = 2
        Me.btnInput.Text = "从文本文件把数据导入数据集"
        '
        'dgEmp2
        '
        Me.dgEmp2.DataMember = ""
        Me.dgEmp2.Dock = System.Windows.Forms.DockStyle.Bottom
        Me.dgEmp2.HeaderForeColor = System.Drawing.SystemColors.ControlText
        Me.dgEmp2.Location = New System.Drawing.Point(0, 262)
        Me.dgEmp2.Name = "dgEmp2"
        Me.dgEmp2.Size = New System.Drawing.Size(416, 184)
        Me.dgEmp2.TabIndex = 3
        '
        'dsHR2
        '
        Me.dsHR2.DataSetName = "DataSetHR"
        Me.dsHR2.Locale = New System.Globalization.CultureInfo("zh-CN")
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
        Me.ClientSize = New System.Drawing.Size(416, 446)
        Me.Controls.Add(Me.dgEmp2)
        Me.Controls.Add(Me.btnInput)
        Me.Controls.Add(Me.btnOutput)
        Me.Controls.Add(Me.dgEmp)
        Me.Name = "Form1"
        Me.Text = "Form1"
        CType(Me.dsHR, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.dgEmp, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.dvEmp, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.dgEmp2, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.dsHR2, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)
 
    End Sub
 
#End Region
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.InitDataSet()
        Me.InitDataGrid()
    End Sub
 
    Private Sub InitDataSet()
        Me.adptEmp.Fill(Me.dsHR, "employees")
        Me.dvEmp.Table = Me.dsHR.Tables.Item("employees")
    End Sub
 
    Private Sub InitDataGrid()
        Me.dgEmp.SetDataBinding(Me.dvEmp, "")
        Me.dgEmp2.SetDataBinding(Me.dsHR2.Tables("employees"), "")
    End Sub
 
    '从数据集把数据导出到文本文件
    Private Sub OutputData()
        '文件名
        Dim fileName As String = "test.txt"
        '如果该文件存在就删除
        If File.Exists(fileName) Then
            File.Delete(fileName)
        End If
        '创建新的文件
        Dim fs As FileStream = File.Create(fileName)
        fs.Close()
        '打开文件并建立stream writer
        fs = File.OpenWrite(fileName)
        Dim sw As New StreamWriter(fs)
 
        '得到datatable
        Dim dtEmp As DataTable = Me.dsHR.Tables.Item("employees")
        '利用双循环把数据一行一列的写到stream writer
        For Each row As DataRow In dtEmp.Rows
            Dim str As String = ""
            For Each col As DataColumn In dtEmp.Columns
                str = str & row.Item(col.ColumnName).ToString() & "*"
            Next
            sw.WriteLine(str)
        Next
 
        sw.Flush() '清理缓冲区并写入基础流
        sw.Close() '关闭stream writer       
    End Sub
 
    '从文本文件把数据导入数据集
    Private Sub InputData()
        '文件名
        Dim fileName As String = "test.txt"
        If Not File.Exists(fileName) Then
            Return
        End If
 
        Dim sr As StreamReader = File.OpenText(fileName)
 
        Dim dtEmp As DataTable = Me.dsHR2.Tables("employees")
 
        Dim str As String = sr.ReadLine()
        '如果文件里还有行就继续
        While Not (str Is Nothing)
            '得到新行
            Dim row As DataRow = dtEmp.NewRow()
            Dim startIndex As Integer = 0
            Dim endIndex As Integer = 0
            '给新行的每一个字段写入数据
            For Each col As DataColumn In dtEmp.Columns
                endIndex = str.IndexOf("*", startIndex)
                Dim colStr As String
                If endIndex > startIndex Then
                    colStr = str.Substring(startIndex, endIndex - startIndex)
                End If
                row.Item(col.ColumnName) = colStr
                endIndex += 1
                startIndex = endIndex
            Next
            '如果主键没有重复就加入到表里
            Dim rows() As DataRow = dtEmp.Select("emp_id =" & row.Item("emp_id").ToString())
            If rows.Length < 1 Then
                dtEmp.Rows.Add(row)
            End If
            '读下一行文本
            str = sr.ReadLine()
        End While
 
        sr.Close()
    End Sub
 
    Private Sub btnOutput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOutput.Click
        Me.OutputData()
    End Sub
 
    Private Sub btnInput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInput.Click
        Me.InputData()
    End Sub
End Class
 
原创粉丝点击