- - PR -
CSVデータの更新処理について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-09-15 13:38
現在CSVファイルをDBへ取り込むアプリを作成しています。
環境はVS2005 VBにて作成、ウェブアプリです。 DBにはSQL2005を使用しています。 画面よりファイル選択しdatatebleへ格納後同じレイアウトのSQLのテーブルへ書き込む処理を行うものを作成していますが、同じ条件での抽出したCSVを再度取り込む際に 現在あるSQLのテーブルを同じ該当データを削除し、改めて取り込みたいと考えています。 その際にdatatebleより書き込む前に判断が必要だと思うのですが、どのようにして判断し書き込みや削除を行ったら良いかがわかりません。 一応本人なりにHPで探してみましたが、うまく見つけることができませんでした。 どなたかご教授しただけないでしょうか? よろしくお願いします。 Imports System.Data.SqlClient Imports System.IO Imports System.Text Partial Class test004 Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cnStr As String = System.Configuration.ConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString Using bc As New SqlBulkCopy(cnStr) With bc .DestinationTableName = "T_CSV" Dim dt As Data.DataTable = GetT_CSVDataTable("File1") .WriteToServer(dt) End With End Using End Sub Private Function GetT_CSVDataTable(ByVal File1 As String) As Data.DataTable Dim dt As Data.DataTable = Me.CreateDataTable Dim row As Data.DataRow Using sr As New StreamReader(File1, Encoding.GetEncoding(932)) Dim strLine As String Dim strFields() As String strLine = sr.ReadLine() While (strLine <> "") row = dt.NewRow strFields = Split(strLine, ",") For i As Integer = 0 To strFields.Length - 1 row.Item(i) = strFields(i).Replace("""", "") Next dt.Rows.Add(row) strLine = sr.ReadLine() End While End Using Return dt End Function Private Function CreateDataTable() As Data.DataTable Dim dt As New Data.DataTable With dt .Columns.Add("komoku1", Type.GetType("System.numeric")) .Columns.Add("komoku2", Type.GetType("System.numeric")) .Columns.Add("komoku3", Type.GetType("System.numeric")) .Columns.Add("komoku4", Type.GetType("System.numeric")) .Columns.Add("komoku5", Type.GetType("System.numeric")) End With Return dt End Function End Class [ メッセージ編集済み 編集者: ひとひら 編集日時 2008-09-15 13:43 ] | ||||
|
投稿日時: 2008-09-15 13:50
こんにちわ
これは、ひとひらさんしかわからないことであると思います。 まず、他者には「現在あるSQLのテーブルを同じ該当データ」が、 何をもって同じデータであるというのかはわかりません。 ひとつの例として、「コード(レコードの一項目)が同じであれば一致する データとみなす」 そういうシステムもあります。 この値が同じであれば同じもの(データ)なんだ、ということを明確にすれば 答えは自ずと見つかるのではないでしょうか。 [ メッセージ編集済み 編集者: Toshi 編集日時 2008-09-15 13:51 ] | ||||
|
投稿日時: 2008-09-15 14:03
toshiさんご指摘ありがとうございます。
説明不足でした。 取り込むCSVのフォーマット "1","001","11101","12345","9678" "1","001","11102","34521","8678" "1","001","11103","13567","8678" "1","001","11104","45123","6678" SQLSERVER T_CSVのフォーマット [komoki1] [numeric](3, 0) NOT NULL, [komoku2] [numeric](3, 0) NOT NULL, [komoku3] [numeric](5, 0) NOT NULL, [komoku4] [numeric](5, 0) NULL, [komoku5] [numeric](5, 0) NULL, komoku1、komoku2,komoku3に主キーが設定されています。 この3つのキーと同一のデータだった場合、一度削除し再度取り込みたいと考えています。 よろしくお願いします。 | ||||
|
投稿日時: 2008-09-15 17:18
無条件に主キーで削除してから挿入すれば。削除の対象なしは無視。
|
1