@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

CSVデータの更新処理について

1
投稿者投稿内容
ひとひら
常連さん
会議室デビュー日: 2006/05/09
投稿数: 33
投稿日時: 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 ]
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-09-15 13:50
こんにちわ

引用:

画面よりファイル選択しdatatebleへ格納後同じレイアウトのSQLのテーブルへ
書き込む処理を行うものを作成していますが、同じ条件での抽出したCSVを再度
取り込む際に 現在あるSQLのテーブルを同じ該当データを削除し、
改めて取り込みたいと考えています。

その際にdatatebleより書き込む前に判断が必要だと思うのですが、
どのようにして判断し書き込みや削除を行ったら良いかがわかりません。



これは、ひとひらさんしかわからないことであると思います。
まず、他者には「現在あるSQLのテーブルを同じ該当データ」が、
何をもって同じデータであるというのかはわかりません。

ひとつの例として、「コード(レコードの一項目)が同じであれば一致する
データとみなす」
そういうシステムもあります。

この値が同じであれば同じもの(データ)なんだ、ということを明確にすれば
答えは自ずと見つかるのではないでしょうか。

[ メッセージ編集済み 編集者: Toshi 編集日時 2008-09-15 13:51 ]
ひとひら
常連さん
会議室デビュー日: 2006/05/09
投稿数: 33
投稿日時: 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つのキーと同一のデータだった場合、一度削除し再度取り込みたいと考えています。

よろしくお願いします。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-09-15 17:18
無条件に主キーで削除してから挿入すれば。削除の対象なしは無視。
1

スキルアップ/キャリアアップ(JOB@IT)