- 題名: 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には接続に関しては大丈夫です。