簡體   English   中英

無法將數據從CSV插入SQL表

[英]Cannot insert Data from CSV into SQL table

我有以下代碼將數據從CSV文件導入到sql表中。 當我運行代碼時,不會顯示錯誤。 但是,沒有任何內容插入到SQL表中。

    Dim folder = "C:\Users\Administrator\Desktop\SKEDULERING\Data\"
    Dim CnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & folder & ";Extended Properties=""text;HDR=No;FMT=Delimited"";"
    Dim dt As New DataTable

    Using Adp As New OleDbDataAdapter("select * from [labanal2.csv]", CnStr)

        Adp.Fill(dt)
    End Using


    Dim strsql As String = "insert into ontledings (PLAASNO,PLAASNAAM,BLOKNO,AREA,NAME3,KULTIVAR,WINGKLAS,ANALISEDATUM,SUIKER,pH,SUUR) values (@PLAASNO,@PLAASNAAM,@BLOKNO,@AREA,@NAME3,@KULTIVAR,@WINGKLAS,@ANALISEDATUM,@SUIKER,@pH,@SUUR)"

    Dim SqlconnectionString As String = "Data Source=GIDEON-E-LAPTOP\SQLEXPRESS2014;Initial Catalog=SkeduleringDatabasis;Integrated Security=True"

    Using connection As New SqlClient.SqlConnection(SqlconnectionString)

        Dim cmd As New SqlClient.SqlCommand(strsql, connection)

        With cmd.Parameters



            .Add("@PLAASNO", SqlDbType.VarChar, 50, "PLAASNO")
            .Add("@PLAASNAAM", SqlDbType.VarChar, 50, "PLAASNAAM")
            .Add("@BLOKNO", SqlDbType.VarChar, 50, "BLOKNO")
            .Add("@AREA", SqlDbType.VarChar, 50, "AREA")
            .Add("@ANALISEDATUM", SqlDbType.Date, 50, "ANALISEDATUM")
            .Add("@NAME3", SqlDbType.VarChar, 50, "NAME3")
            .Add("@KULTIVAR", SqlDbType.VarChar, 50, "KULTIVAR")
            .Add("@WINGKLAS", SqlDbType.VarChar, 50, "WINGKLAS")
            .Add("@SUIKER", SqlDbType.Decimal, 50, "SUIKER")
            .Add("@pH", SqlDbType.Decimal, 50, "pH")
            .Add("@SUUR", SqlDbType.Decimal, 50, "SUUR")


        End With

        Dim adapter As New SqlClient.SqlDataAdapter()
        adapter.InsertCommand = cmd
        Dim iRowsInserted As Int32 = adapter.Update(dt)

        MsgBox("Klaar OLEB")
    End Using

我想念什么?

該問題是由於您的數據表中的每一行都有RowState = DataRowState.Unchanged而引起的。 這意味着當您調用Update時,每一行都將被忽略。

這是Update方法所預期的正常行為,對於Insert,Update或Delete命令,僅考慮處於添加,更改或已刪除狀態的行。

您可以在調用更新之前添加此循環

For Each row As DataRow In dt.Rows
    row.SetAdded()
Next

或者,如下面Plutonix所述,將Fill方法的行為更改為將屬性AcceptChangesDuringFill設置為False。

Using Adp As New OleDbDataAdapter("select * from [labanal2.csv]", CnStr)
    Adp.AcceptChangesDuringFill = False
    Adp.Fill(dt)
End Using

這將使RowState屬性的DataRowState.Added標志處於活動狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM