C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 複数のデータベース間でのSQLの実行


(過去ログ 15 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■5404 / inTopicNo.1)  複数のデータベース間でのSQLの実行
  
□投稿者/ kawa (9回)-(2007/07/12(Thu) 15:03:27)

分類:[VB.NET] 

2007/07/12(Thu) 16:47:11 編集(投稿者)
2007/07/12(Thu) 16:47:01 編集(投稿者)
2007/07/12(Thu) 16:46:56 編集(投稿者)

分類:[VB.NET(全般)] 

vb2003
WindowsXP

初めて投稿させていただきます。
よろしくお願いします。

現在、以下のような流れをめざして、プログラムを組んでいます。
@VB.NETでmdb(Access)に接続
ASQL文を ExecuteNonQuery でSQLServer2000のテーブルからAccessのテーブルにインポート

SQL文は以下のようにしています。
SELECT * INTO テーブル名
FROM [ODBC;DRIVER=SQL Server;SERVER=サーバー名;
DATABASE=データベース名;
UID=ユーザーID;PWD=パスワード;].テーブル名

しかし、実行すると以下のようなエラーメッセージが出てきます。
「"オブジェクト名 'ODBC;DRIVER=SQL Server;SERVER=サーバー名;
DATABASE=データベース名;
UID=ユーザーID;PWD=パスワード;.テーブル名' は無効です。"」

Accessでクエリとして同じSQLを実行し試してみたところ、Access上でテーブルにテーブルが作成されました。
これは、現在考えている流れで、SELECT テーブル名 INTO〜のSQL文を使うことはできないということでしょうか?
もしその場合には、SQLServerからとって来たデータを、Accessのテーブルに1行ずつ追加していくという方法しかないのでしょうか?

どなたかご教示のほう、よろしくお願いします。
引用返信 編集キー/
■5407 / inTopicNo.2)  Re[1]: 複数のデータベース間でのSQLの実行
□投稿者/ 片桐 (31回)-(2007/07/12(Thu) 17:14:45)
とりあえずの案ですがフローで。

1.SQL-Serverで接続して、データ取ってきてDATASET(A)を作る
2.ACCESSで接続して、テーブル作成、そのテーブルからDATASET(B)を作る
3.DATASET(A)からDATASET(B)へBULKCOPYメソッドを発行する

という方法で、実現させた事があります。

SQL-ServerのリンクテーブルSQLの書き方もあったとは思うのですが、
サンプルはすぐに出ないので……他の方から出てくるかも、ですが(^^;
さがしておきますです。

引用返信 編集キー/
■5408 / inTopicNo.3)  Re[2]: 複数のデータベース間でのSQLの実行
□投稿者/ Mr.T (70回)-(2007/07/12(Thu) 17:57:06)
Mr.Tです、こんにちは。

ええっと、逆パターンでもOKなら一番簡単そう。
Accessファイルにリンクテーブルをあらかじめ作成しておけば、
アクセスするターゲットが一つになって楽そうな感じがします。




引用返信 編集キー/
■5410 / inTopicNo.4)  Re[1]: 複数のデータベース間でのSQLの実行
□投稿者/ 魔界の仮面弁士 (343回)-(2007/07/12(Thu) 18:28:06)
2007/07/12(Thu) 19:29:32 編集(投稿者)
No5404 (kawa さん) に返信
mdb に、SQL Server 2000 のデータを取り込むのですよね。DTS は使えませんか?
http://www.microsoft.com/japan/msdn/sqlserver/columns/


> SELECT テーブル名 INTO〜のSQL文を使うことはできないということでしょうか?
使えると思いますよ。
当方で追試してみましたが、.NET 1.1/2.0 のいずれでも、問題なく生成されまたし。

何か、権限周りの問題だったりはしませんか?


'=======================
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic

Module Test
  Sub Main()
    Const serverName As String = 〜〜
    Const dbName As String = 〜〜
    Const mdbTable As String = 〜〜
    Const sqlTable As String = 〜〜
    Const userID As String = 〜〜
    Const password As String = 〜〜

    Dim sqlPattern As String = "SELECT * INTO [{1}] FROM " & _
      "[ODBC;DRIVER={{SQL SERVER}};SERVER={2};DATABASE={3};UID={4};PWD={5}].[{0}]"

    Dim sql As String = String.Format(sqlPattern, sqlTable, mdbTable, _
      serverName, dbName, userID, password)

#If VBC_VER < 8.0 Then
    Dim cn As OleDbConnection = Nothing
    Try
      'cn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.mdb;")
      cn = New OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\test.mdb;")
      cn.Open()
      Dim cmd As OleDbCommand = Nothing
      Try
        cmd = New OleDbCommand(sql, cn)
        cmd.ExecuteNonQuery()
      Finally
        If Not cmd Is Nothing Then cmd.Dispose()
      End Try
    Catch ex As Exception
      MsgBox(ex.Message, MsgBoxStyle.Exclamation)
    Finally
      If Not cn Is Nothing Then
        cn.Close()
        cn.Dispose()
      End If
    End Try
#Else
    'Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.mdb;")
    Using cn As New OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\test.mdb;")
      cn.Open()
      Using cmd As New OleDbCommand(sql, cn)
        Try
          cmd.ExecuteNonQuery()
        Catch ex As Exception
          MsgBox(ex.Message, MsgBoxStyle.Exclamation)
        End Try
      End Using
      cn.Close()
    End Using
#End If
  End Sub
End Module</pre></pre>

引用返信 編集キー/
■5413 / inTopicNo.5)  Re[2]: 複数のデータベース間でのSQLの実行
□投稿者/ Mr.T (71回)-(2007/07/12(Thu) 19:21:53)
2007/07/12(Thu) 19:22:33 編集(投稿者)

Mr.Tです、こんにちは。

No5410 (魔界の仮面弁士 さん) に返信
> ■No5404 (kawa さん) に返信
> mdbデータを、SQL Server 2000 に取り込むのですよね。DTS は使えませんか?

あれ、逆じゃないでしょうか?
SQLServerのテーブルデータをAccessへ取り込むのでは?

>@VB.NETでmdb(Access)に接続
>ASQL文を ExecuteNonQuery でSQLServer2000のテーブルからAccessのテーブルにインポート

引用返信 編集キー/
■5414 / inTopicNo.6)  Re[3]: 複数のデータベース間でのSQLの実行
□投稿者/ 魔界の仮面弁士 (344回)-(2007/07/12(Thu) 19:35:09)
No5413 (Mr.T さん) に返信
> あれ、逆じゃないでしょうか?

失礼しました & ありがとうございます。m(_ _)m

最初の一文を逆に書いてしまったことに気が付いて直したものの、
一歩遅かったようで。

# 逆パターンなら、mdb からの SQL への ODBC 接続ではなく、
# SQL Server から mdb への OLEDB 接続で SELECT INTO の方向で。
引用返信 編集キー/
■5481 / inTopicNo.7)  Re[4]: 複数のデータベース間でのSQLの実行
□投稿者/ kawa (10回)-(2007/07/14(Sat) 21:55:26)
片桐様、Mr.T様、魔界の仮面弁士様 ありがとうございます。

現在、環境が変わってしまったため、教えていただいた方法を試すことが出来ない状態になってしまいました。
ただ、BULKCOPYやリンクテーブルを用いた方法など、さまざまな方法を知ることが出来、非常に参考になりました。

>魔界の仮面弁士様
INSERT INTO 〜は使えるのですか。権限については問題がある可能性が高いため、もう一度調査してみます。

元の環境に戻り次第、試した結果を報告したいと思います。

とりあえず、解決とします。ありがとうございました。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -