2017-03-20 18 views
0

次のコードを使用して、CSVファイルからSQLテーブルにデータをインポートします。コードを実行するとエラーは表示されません。ただし、SQLテーブルには何も挿入されません。CSVから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 

私は何をしないのですか?

+0

あなたはどのデータベースを使用していますか? "SQL"はクエリ言語であり、データベース製品ではありません。 –

+0

executenonqueryを使用してください – Alex

答えて

1

この問題は、DataTableの各行にRowState = DataRowState.Unchangedが設定されているために発生します。つまり、Updateを呼び出すと、各行は単に無視されます。

これはUpdateメソッドで期待される通常の動作です。追加、変更、または削除された状態の行のみが挿入、更新、または削除コマンドの対象となります。

あなたが更新

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

を呼び出す前に、このループを追加したり、Plutonixにより以下に説明するように、偽

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

これをするプロパティAcceptChangesDuringFillを設定Fillメソッドの動作を変更することができますDataRowState.Addedフラグがアクティブな状態でRowStateプロパティを終了します。

+1

読み込み時にDataAdapterにAcceptChangesを通知しないでください。 DataTableを読み込む前に: 'myDA.AcceptChangesDuringFill = False' – Plutonix

+1

@Plutonixそれはもっと良く、答えを更新しました。 – Steve

+0

ありがとうSteveとPlutonix。 – Gideon

関連する問題