如何将CSV电子邮件数据添加到数据库表VB?

时间:2016-04-09 12:37:39

标签: sql vb.net visual-studio

我正在尝试将Email csv文件上传到我的应用程序并解析到我的数据库中。基本上我需要的是数据库中的第一列自动分配ID,并在每次添加条目时增加1。然后我需要代码来读取我的CSV文件的前3列,然后更改为下一行。请参阅我的VB代码,数据库结构和CSV示例

Protected Sub Upload(sender As Object, e As EventArgs)

    'Upload and save the file
    Dim csvPath As String = Server.MapPath("~/Files/") + Path.GetFileName(FileUpload1.PostedFile.FileName)
    FileUpload1.SaveAs(csvPath)

    Dim dt As New DataTable()
    dt.Columns.AddRange(New DataColumn(3) {New DataColumn("ID", GetType(Integer)), New DataColumn("Subject", GetType(String)), New DataColumn("Body", GetType(String)), New DataColumn("From", GetType(String))})

    Dim csvData As String = File.ReadAllText(csvPath)
    For Each row As String In csvData.Split(ControlChars.Lf)
        If Not String.IsNullOrEmpty(row) Then
            dt.Rows.Add()
            Dim i As Integer = 0
            For Each cell As String In row.Split(","c)
                dt.Rows(dt.Rows.Count - 1)(i) = cell
                i += 1
            Next
        End If
    Next

    Dim consString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Using con As New SqlConnection(consString)
        Using sqlBulkCopy As New SqlBulkCopy(con)
            'Set the database table name
            sqlBulkCopy.DestinationTableName = "dbo.Emails"
            con.Open()
            sqlBulkCopy.WriteToServer(dt)
            con.Close()
        End Using
    End Using
End Sub

Table Structure

CSV Structure

我收到的错误消息是:

类型' System.ArgumentException'的例外情况发生在System.Data.dll中但未在用户代码中处理

附加信息:输入字符串格式不正确。无法存储<"主题">在ID列中。预期的类型是Int32。

1 个答案:

答案 0 :(得分:0)

您的表ID正在使用Identity,因此您无需将ID添加到dt.Columns.AddRange因为它会尝试插入ID列时“T