- 題名: MDBからSQLserverへの移行
- 日時: 2009/12/11 10:20:21
- ID: 26019
- この記事の返信元:
- (なし)
- この記事への返信:
- [26021] Re[1]: MDBからSQLserverへの移行2009/12/11 10:59:24
- [26029] Re[1]: MDBからSQLserverへの移行2009/12/11 14:33:00
- ツリーを表示
■No26044に返信(勉強中さんの記事)
> ここのあたりの『ループさせてまわす』という事は考えておりinsert文も使うというのも調べているうちにわかったのですが、では実際にどう組み立てるのかとなるとまったく手が出ません。自分で考える分にはもう限界を感じており、よろしければヒントではなく正解を教えていただけると幸いです。
SQL Server側はテーブル構造は存在しデータが無い状態と言う前提なら・・・
例えばこんな風・・・
Imports System.Data
Imports System.Text
Private Function GetMdbConnection(ByVal MdbPath As String) As String
Dim OleSQL As OleDb.OleDbConnectionStringBuilder
OleSQL = New OleDb.OleDbConnectionStringBuilder
With OleSQL
.Provider = "Microsoft.Jet.OLEDB.4.0"
.DataSource = MdbPath
End With
Return OleSQL.ToString
End Function
Private Function GetDBConnectString() As String
Dim AdoSQL As SqlClient.SqlConnectionStringBuilder
AdoSQL = New SqlClient.SqlConnectionStringBuilder
With AdoSQL
.DataSource = "LocalHost"
.InitialCatalog = "TEST"
.IntegratedSecurity = False
.UserID = "sa"
.Password = "hogehoge"
.ConnectTimeout = 2
End With
Return AdoSQL.ToString
End Function
Private Sub MdbToSql(ByVal MdbPath As String)
Dim bRet As Boolean
Using dsMdb As DataSet = New DataSet
Using OleMdb As OleDb.OleDbConnection = New OleDb.OleDbConnection(GetMdbConnection(MdbPath))
Try
OleMdb.Open()
bRet = True
Catch ex As Exception
bRet = False
End Try
If bRet Then
Using da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
Dim OleSQL As StringBuilder
OleSQL = New StringBuilder
With OleSQL
.Length = 0
.Append("select ")
.Append("* ")
.Append("from ")
.Append("ItemMaster")
End With
Using OleCMD As OleDb.OleDbCommand = OleMdb.CreateCommand
With OleCMD
.CommandType = CommandType.Text
.CommandTimeout = OleMdb.ConnectionTimeout
.CommandText = OleSQL.ToString
End With
da.SelectCommand = OleCMD
Try
da.Fill(dsMdb, "ItemMaster")
Catch ex As Exception
bRet = False
End Try
End Using
End Using
OleMdb.Close()
End If
End Using
If bRet And dsMdb.Tables("ItemMaster").Rows.Count > 0 Then
Using SqlDB As SqlClient.SqlConnection = New SqlClient.SqlConnection(GetDBConnectString())
Try
SqlDB.Open()
bRet = True
Catch ex As Exception
bRet = False
End Try
If bRet Then
Dim iRet As Integer
Using dsSql As DataSet = New DataSet
Using da As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
Dim AdoSQL As StringBuilder
AdoSQL = New StringBuilder
With AdoSQL
.Length = 0
.Append("select ")
.Append("ItemName,")
.Append("Input,")
.Append("Output ")
.Append("from ")
.Append("ItemMaster ")
End With
Using AdoCMD As SqlClient.SqlCommand = SqlDB.CreateCommand
With AdoCMD
.CommandType = CommandType.Text
.CommandTimeout = SqlDB.ConnectionTimeout
.CommandText = AdoSQL.ToString
End With
da.SelectCommand = AdoCMD
End Using
With AdoSQL
.Length = 0
.Append("insert into ")
.Append("ItemMaster ")
.Append("(")
.Append("ItemName,")
.Append("Input,")
.Append("Output) ")
.Append("values(")
.Append("@ItemName,")
.Append("@Input,")
.Append("@Output)")
End With
Using AdoCMD As SqlClient.SqlCommand = SqlDB.CreateCommand
With AdoCMD
.CommandType = CommandType.Text
.CommandTimeout = SqlDB.ConnectionTimeout
.CommandText = AdoSQL.ToString
.Parameters.Add("@ItemName", SqlDbType.NVarChar, 50, "ItemName")
.Parameters.Add("@Input", SqlDbType.Int, 4, "Input")
.Parameters.Add("@Output", SqlDbType.Int, 4, "Output")
End With
da.InsertCommand = AdoCMD
End Using
Try
iRet = da.Fill(dsSql, "ItemMaster")
Catch ex As Exception
End Try
For Each row As DataRow In dsMdb.Tables("ItemMaster").Rows
Dim newrow As DataRow = dsSql.Tables("ItemMaster").NewRow
For i As Integer = 0 To row.ItemArray.Length - 1
newrow(i) = row.Item(i)
Next
dsSql.Tables("ItemMaster").Rows.Add(newrow)
Next
Try
iRet = da.Update(dsSql, "ItemMaster")
bRet = True
Catch ex As Exception
iRet = 0
bRet = False
End Try
End Using
End Using
If iRet > 0 Then
MsgBox("Insert!!", MsgBoxStyle.OkOnly, "Mdb To Sql")
End If
SqlDB.Close()
End If
End Using
End If
End Using
End Sub
テーブル名やフィールドに関しては、修正追加して下さい。
※ Insert文で1件づつ挿しこむと言う方法もありますが、
MDBからSQL Serverへデータ移行すると言う前提で何度
も使わないのであれば、こんなんでよいかと。
ただMDBに膨大にデータがあるならメモリを食いますの
で、1レコードつづ取ってきて挿しこむ方法がよいと
思います。
あくまで参考
以上。
分類:[.NET]
VB.NETを使ってMDBからSQLserverへテーブルデータの移行をやりたいんですが、どうすればできるのかいいかわかりません。
アクセスやSQLserver側から移行できる機能があるのは調べているうちにわかったのですが、それらを使わず。プログラミングで行いたいので、どうかご教授願います。
ちなみに、両方のDBには接続に関しては大丈夫です。