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

Sql 如何将CSV电子邮件数据添加到数据库表VB?,sql,vb.net,visual-studio,Sql,Vb.net,Visual Studio,我正在尝试将电子邮件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.MapP

我正在尝试将电子邮件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

我收到的错误消息是:

System.Data.dll中发生“System.ArgumentException”类型的异常,但未在用户代码中处理


其他信息:输入字符串的格式不正确。无法存储在ID列中。所需类型为Int32。

从您的表中
ID
正在使用
Identity
,因此您不需要将
ID
添加到
dt.Columns.AddRange
,因为它会在不应该插入ID列时尝试插入其中。

您好,谢谢您的回复。当我现在调试时,我从dt.Columns.AddRange中删除了ID,我得到了以下错误:是否将数组大小更改为2,就像新的DataColumn(2)一样?是的,我将其更改为
dt.Columns.AddRange(新的DataColumn(2)
。问题在于CSV文件第3列的标题文本,它不是代码中的名称,而是附加了一些额外的文本。请确保CSV文件中的列名与代码中的列名匹配