您的位置:首页 > 数据库

VB.Net实现将文本文件中的数据自动插入数据库的小工具

2012-11-20 00:50 471 查看
1.原因:大家都遇到过需要手动输入大量数据到数据库中的任务(例如:客户委托将其人事管理系统的资料输入到数据库中),不但耗时而且无技术含量。

2.目的:节省时间,有空余时间承接其他软件设计任务,提高上级对自身的重视程度。

3.模拟:假设 Fu Chen接到一个任务。将某部门的人员的基本信息输入到数据库中由于种种原因需要手动输入。需要添加的字段分别简化为 人员编号,用户名,口令,性别,住

址。每个人员的信息均为一个单独的文本文件。只含有上述几个字段的信息每个字段占一行,字段名称和值用空格隔开。如图所示





为方便讲解我在此外利用了大家非常熟悉的Sqlserver2005 设计此表。可根据实际情况酌情更改。

4.分析:每个文本文件相当于一条记录(Row),而文本文件中的每行内容相当于某个具体字段。可看成 M X N 形式。

5.方案: 根据以上分析,设计表如上图片所示,需要注意的是若字段长度太小,会引发异常:

****************************************************

未处理 System.Data.SqlClient.SqlException

Class=16

ErrorCode=-2146232060

LineNumber=1

Message="将截断字符串或二进制数据。 语句已终止。"

Number=8152

**************************************************************

(1)首先读取一个文本文件的内容,处按行读取,加入到ARRAYLIST 或HASHTABLE中以方便向表中插入数据。

(2)操作数据库,将每行数据依次插入到相应表中。如此循环即可。任务完成后如图所示:




OK.现在具体代码如下所示:

*@Author : Fu Chen

*@Email:detion9@163.com

*@ 'QQ: 2512909458

*********************************************

Imports System.IO
Imports System.Data.SqlClient
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Dim iipath As String = "D:\\DemoTest_0100\\用户10001009.txt"     '需要读取的文件夹

Dim ifile As FileInfo = Nothing                                   '创建文件对象
'Dim reader As StreamReader = ifile.OpenText()                    '创建输入流
Dim reader As StreamReader = Nothing
Dim ipath As String = "D:\\DemoTest_0100\\"                       '文本文件存路径(即人员基本信息)
Dim ifileArr() As String = Directory.GetFiles(ipath)                '存放文件名的数组
Dim isFinished As Boolean = False    '文件读取完成标志

Try
For i = 0 To ifileArr.Length - 1
ifile = New FileInfo(ifileArr(i))    '实例化文件对象
reader = ifile.OpenText()            '实例化StreamReader

If (Not isFinished) Then
isFinished = F_Readfile(reader)
End If
'Threading.Thread.Sleep(1000)
isFinished = False
Next
Catch ex As ApplicationException
ex.Message.ToString()
Finally

End Try

End Sub
Private Function F_Readfile(ByRef reader As StreamReader) As Boolean

Using (reader)
Dim sstr1 As String = reader.ReadLine()       '执行按行读取文件内容
Dim myArr As ArrayList = New ArrayList()      '创建ARRAYLIST对象,以加入每条记录内容
While (Not (sstr1 Is Nothing))
Try
If (Not (sstr1.Trim().Equals(""))) Then
myArr.Add(sstr1.Trim())
TextBox1.Text &= sstr1 & vbCrLf
End If
Catch ex As ApplicationException
ex.Message.ToString()
End Try

sstr1 = reader.ReadLine()
End While
'--加入到HashTable中
F_WritetoDatabase(myArr)
F_Readfile = True
End Using
F_Readfile = False
End Function
Private Function F_WritetoDatabase(ByRef myArr As ArrayList) As Boolean
Dim myhash As Hashtable = New Hashtable()
Dim myIndex As Integer          '定位索引值
For i = 0 To myArr.Count - 1    '加入到HashTable中
myIndex = myArr(i).ToString().Trim().IndexOf(" ")    '每个字段的名称和值按空格分开
myhash.Add(i + 1, Mid(myArr(i).ToString(), myIndex + 1))  'Key与Value形如 1=>Value
Next
For i = 1 To myhash.Count
TextBox2.Text &= myhash(i).ToString().Trim() & vbCrLf  '测试用
Next

'---将HashTable的Values内容加入到数据库对应的字段中
Dim connectionString As String = "Server=.\SQLEXPRESS;Initial Catalog=DemoTest_0100;Persist Security Info=True;User Id=sa;Pwd=admin123456;"
Using connection As New SqlConnection(connectionString)
'打开数据库连接
connection.Open()
If (connection.State = ConnectionState.Open) Then
'MsgBox("稻香")

End If
Dim strInsert As String = "insert into tb_User2(uId,uName,uPassword,uGender,uAddress) " & _
"values(@uId,@uName,@uPassword,@uGender,@uAddress)"        '揽入到tb_User2中的Sql语句
Dim cmdInsert As SqlCommand = New SqlCommand(strInsert, connection)    '创建Command对象

Dim strField() As String = {"OK", "@uId", "@uName", "@uPassword", "@uGender", "@uAddress"}
For i = 1 To myhash.Count
cmdInsert.Parameters.AddWithValue(strField(i), myhash(i).ToString().Trim())   '读取的每行记录插入表中
Next
Try
cmdInsert.ExecuteNonQuery()            '执行具体的插入查询动作
Catch ex As ApplicationException
ex.Message.ToString()
End Try

End Using
End Function
6.综上所述,我们在工作中难免会接到此类任务,此处愿开启思路。更希望得到大家的更简单的解决方案。此处望大家多给些建议。以完成更多更有效率的程序,更上一层楼。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: