使用 LINQ 从 CSV 上传多条记录
Uploading Multiple Records from a CSV using LINQ
我正在尝试使用 CSV 文件向数据库 table 添加多条记录。如果我删除 try/catch,我会收到此错误:
System.IO.FileNotFoundException
HResult=0x80070002
Message=Could not find file 'C:\Program Files (x86)\IIS Express\BJ_and_TS.csv'.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
为什么不保存文件?我还做错了什么?这是我的代码隐藏:
Private Sub BTN_Upload_Click(sender As Object, e As EventArgs) Handles BTN_Upload.Click
Dim context As New MusicContext
Try
If FU_CSV.HasFile Then
FU_CSV.SaveAs(Server.MapPath("~/Content/Docs/Data/" & FU_CSV.FileName))
Dim csvData = From line As String In File.ReadAllLines(FU_CSV.FileName)
Skip 1
Let CR = line.Split(",")
Select New Album With {
.AlbumName = CR(0),
.ImagePath = CR(1),
.ReleaseDate = CDate(CR(2)),
.UnitPrice = CDec(CR(3)),
.BandID = CInt(CR(4)),
.GenreID = CInt(CR(5))
}
For Each a As Album In csvData
context.Albums.Add(a)
context.SaveChanges()
Next
'ClientScript.RegisterStartupScript(Page.GetType(), "BulkAlbums", "$('#BulkRecords').modal();", True)
End If
Catch ex As Exception
End Try
End Sub
您正在保存包含路径的文件,但随后试图仅使用文件名访问它。然后代码尝试从 运行 目录访问该文件作为默认目录,而不是您保存文件的目录,这就是为什么您收到错误路径的 "could not find file" 错误。
您应该可以通过在调用 File.ReadAllLines
:
时指定完整路径来解决此问题
Dim filenameWithPath as string = Server.MapPath("~/Content/Docs/Data/" & FU_CSV.FileName)
FU_CSV.SaveAs(filenameWithPath)
Dim csvData = From line As String In File.ReadAllLines(filenameWithPath)
我正在尝试使用 CSV 文件向数据库 table 添加多条记录。如果我删除 try/catch,我会收到此错误:
System.IO.FileNotFoundException
HResult=0x80070002
Message=Could not find file 'C:\Program Files (x86)\IIS Express\BJ_and_TS.csv'.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
为什么不保存文件?我还做错了什么?这是我的代码隐藏:
Private Sub BTN_Upload_Click(sender As Object, e As EventArgs) Handles BTN_Upload.Click
Dim context As New MusicContext
Try
If FU_CSV.HasFile Then
FU_CSV.SaveAs(Server.MapPath("~/Content/Docs/Data/" & FU_CSV.FileName))
Dim csvData = From line As String In File.ReadAllLines(FU_CSV.FileName)
Skip 1
Let CR = line.Split(",")
Select New Album With {
.AlbumName = CR(0),
.ImagePath = CR(1),
.ReleaseDate = CDate(CR(2)),
.UnitPrice = CDec(CR(3)),
.BandID = CInt(CR(4)),
.GenreID = CInt(CR(5))
}
For Each a As Album In csvData
context.Albums.Add(a)
context.SaveChanges()
Next
'ClientScript.RegisterStartupScript(Page.GetType(), "BulkAlbums", "$('#BulkRecords').modal();", True)
End If
Catch ex As Exception
End Try
End Sub
您正在保存包含路径的文件,但随后试图仅使用文件名访问它。然后代码尝试从 运行 目录访问该文件作为默认目录,而不是您保存文件的目录,这就是为什么您收到错误路径的 "could not find file" 错误。
您应该可以通过在调用 File.ReadAllLines
:
Dim filenameWithPath as string = Server.MapPath("~/Content/Docs/Data/" & FU_CSV.FileName)
FU_CSV.SaveAs(filenameWithPath)
Dim csvData = From line As String In File.ReadAllLines(filenameWithPath)