[英]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.