【问题标题】:Inserting contents of CSV file into database loses 1 record将 CSV 文件的内容插入数据库会丢失 1 条记录
【发布时间】:2016-04-22 08:52:20
【问题描述】:

我有一个导入 CSV 文件(无标题行)并将内容写入数据表的应用程序。然后将数据表作为参数传递给我的 DAL 中的一个函数,该函数使用 sqlBulkCopy 命令将数据写入 SQL Server 数据库。

我已经将代码作为 Webforms 和 Windows Forms 环境运行测试,并注意到在这两种情况下第一行数据都丢失了。有谁知道为什么会这样以及我该如何纠正它?感谢您的帮助。

我应该补充一点,如果 CSV 文件有标题行,则不会发生这种情况。

用户界面

Dim csvFileFolder As String = "D:\PROJECTS\Letters(DOTNET)\TextFiles\"
Dim csvFileName As String = "quad1a.txt"

    Dim connString As String = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" _
        & csvFileFolder & ";Extended Properties=""Text;HDR=No;FMT=Delimited"""
    Dim conn As New Odbc.OdbcConnection(connString)

    'Open a data adapter, specifying the file name to load
    Dim da As New Odbc.OdbcDataAdapter("SELECT * FROM [" & csvFileName & "]", conn)
    'Then fill a data table, which can be bound to a grid

    Dim dt As New DataTable

    da.Fill(dt)

    grdQuad.DataSource = dt
    grdQuad.DataBind()

    LettersBLL.TemporaryPatientManager.InsertIntoBulkTable(dt)

DAL

Public Shared Function InsertIntoBulkTable(dt As DataTable) As DataTable

    Using myConnection As New SqlConnection(ApplicationConfiguration.ConnectionString)

        Using sqlBulkCopy As New SqlBulkCopy(myConnection)
            'Set the database table name
            sqlBulkCopy.DestinationTableName = "tblBulkInsert"

            myConnection.Open()
            sqlBulkCopy.WriteToServer(dt)
            myConnection.Close()

        End Using

    End Using
    Return Nothing

End Function

【问题讨论】:

    标签: sql-server vb.net csv


    【解决方案1】:

    试试这个...

    Dim connString As String = "Driver={Microsoft Text Driver (*.txt; *.csv)};HDR=No;Dbq=" _& csvFileFolder & ";Extended Properties=""Text;HDR=No;FMT=Delimited"""
    

    在您的连接字符串中添加了“HDR=No”

    或者尝试指定您的 sqlbulkcopy 列映射。

    msdn.....

    https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.columnmappings.aspx

    例子.....

    http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

    【讨论】:

    • 感谢您的回复。不过还是同样的问题。已在 Web 表单和 Windows 表单中尝试过。
    • 已决定在插入之前在文本文件中添加标题行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多