取込先のテーブル情報を先に読んでからセット。
Dim objSR As New StreamReader(strFilePath, Encoding.GetEncoding("shift-jis"))
Dim Strtbl As String = "[取り込みテーブル名]"
'テーブルの項目名をとっておく。
Dim DS As New DataSet
Std.ADONET.FillDataset(objTR, DS, "test",
& _
"SELECT name,type_name(user_type_id) AS kata FROM
Sys.Columns WHERE object_id = object_id('" & strtbl & "') ")
If DS.Tables("test").Rows.Count
= 0 Then
Throw New Exception("ERR:テーブル項目がありません。エラーが発生しました。")
End If
While (objSR.Peek() >= 0)
Dim strSQL As New
System.Text.StringBuilder
Dim stBuffer As String =
objSR.ReadLine()
'1列ずつ中身読込
If InStr(stBuffer, ",") = 0 Then
Exit While
End If
Nakami = Split (stBuffer, ",")
'項目数がなにかの理由で(主に文字化け)合わない時
If Nakami.length - 1
<> DS.Tables("test").Rows.Count
Then
Throw New Exception(cnt + 1
& "行:ERR:元データの項目数がおかしい。エラーが発生しました。")
End If
With DS.Tables("test")
strSQL.Append("INSERT INTO " & strtbl & _
"
( ")
For
i As Integer =
0 To .Rows.Count - 1
strSQL.Append("[" & .Rows(i).Item("name") & "]")
If
i <> .Rows.Count - 1 Then strSQL.Append(",")
Next
strSQL.Append(")")
strSQL.Append(" VALUES ")
strSQL.Append("(")
For
k As Integer =
0 To .Rows.Count - 1
If .Rows(k).Item("kata") = "varchar"
Then
'文字化け対策やってみる
If AscW(Nakami(k)) = 0 Then
Messagebox.show( .Rows(k).Item("name") & "["
& Nakami(k).ToString & "]が文字化けしていたようなのでスペースに置き換えました。")
Nakami(k) = ""
End If
strSQL.Append("'" & Nakami(k).ToString & "'")
Else
'文字化け対策やってみる
If AscW(Nakami(k)) = 0 Then
Messagebox.show(.Rows(k).Item("name") & "["
& Nakami(k).ToString & "]が文字化けしていたようなので0に置き換えました。"
Nakami(k) = 0
End If
strSQL.Append("" & Nakami(k).ToString & "")
End If
If k <> .Rows.Count - 1 Then strSQL.Append(",")
Next
strSQL.Append(")")
End With
Call Std.ADONET.ExecuteNonQuery(objTR, strSQL.ToString)
End While
objSR.Close()
0 件のコメント:
コメントを投稿