Sql 如何将CSV电子邮件数据添加到数据库表VB?
我正在尝试将电子邮件csv文件上载到我的应用程序并解析到我的数据库中。基本上,我需要的是数据库中的第一列自动分配ID,并在每次添加条目时递增1。然后我需要代码来读取我的CSV文件的前3列,然后切换到下一行。请参阅我的VB代码、数据库结构和CSV示例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
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文件中的列名与代码中的列名匹配