tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルMySQLへの接続
記事No3799
投稿日: 2006/06/05(Mon) 16:48
投稿者kopo
MySQLに格納したDBにアクセスしようとしてうまくいきません。
・MySQL上でtestdbというDBは作成している
・MySQL Query Browserでデータを見ることができる状態
・MySQL ODBC 3.51 Driverをインストールし、コントロールパネル-管理ツール-データソース(ODBC
)
で登録済み
の状態で、フォーム上にボタンをひとつ置いて、クリック時に以下のコードを実行するようにした

ころ、

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
        Dim cn As New OleDb.OleDbConnection()
        Dim da As New OleDb.OleDbDataAdapter()
        Dim c As New OleDb.OleDbCommand()

        cn.ConnectionString = "DRIVER={MySQL ODBC 3.51
Driver};SERVER=localhost;PORT=3306;DATABASE=testdb;UID=root;PASSWORD=pass;OPTION=3"

        Try
            cn.Open()
            MsgBox("データベースに接続できました")
            cn.Close()
        Catch ex As Exception
            MsgBox(ex)
        End Try

    End Sub
End Class

ArgumentExceptionはハンドルされませんでした。

OLE DBプロバイダがConnectionStringで指定されませんでした。たとえば'Provider=SQLOLEDB;'な

の場合です。

というエラーメッセージが出て実行できません。
どこがおかしいのかどなたかご教示いただけると助かります。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: MySQLへの接続
記事No3802
投稿日: 2006/06/05(Mon) 22:24
投稿者なおこ(・∀・)
お世話になります。

>       cn.ConnectionString = "DRIVER={MySQL ODBC 3.51
> Driver};SERVER=localhost;PORT=3306;DATABASE=testdb;UID=root;PASSWORD=pass;OPTION=3"

http://www.connectionstrings.com/
の MySQL の OLE DB, OleDbConnection (.NET) を見ると、
"Provider=MySQLProv;Data Source=mydb;User Id=UserName;Password=asdasd;"
とあるようですけども。

[ツリー表示へ]
タイトルMySQLへの接続
記事No3804
投稿日: 2006/06/06(Tue) 10:17
投稿者kopo
なおこ(・∀・)さんどうもありがとうございます
DBについては(VBもですが)初心者で全く何も分かっていないことが分かりました
ODBCとかOLE DBの区別もついていないようです
また出直します

[ツリー表示へ]
タイトルMySQLへの接続 出直し編
記事No3827
投稿日: 2006/06/13(Tue) 12:15
投稿者kopo
こんにちは
やっとODBCでの接続法が分かりました。
VB2005を使っていますが、
参照の追加で、
Microsoft.Data.Odbc.dll
を選択し
Imports Microsoft.Data.Odbc
をコードの先頭に追加することによりODBCでのアクセスが可能となりました。
これでODBC関係のメソッドなどが使えるようになり、実際MySQLに接続はできたのですが、
テーブル情報などのスキーマ情報などの取得をどうすればよいかが分かりません。

        Dim cn As Odbc.OdbcConnection = New Odbc.OdbcConnection
        Dim dt As DataTable
        Dim dr As DataRow
        Dim resValue As String()

        cn.ConnectionString = "DRIVER={MySQL ODBC 3.51
Driver};SERVER=localhost;PORT=3306;DATABASE=db;UID=xxxx;PASSWORD=xxxx;OPTION=3"

        ListBox1.Items.Clear()

        Try
            cn.Open()
            MsgBox("データベースに接続できました")
            dt = cn.GetSchema("Tables", resValue)
            cn.Close()
            For Each dr In dt.Rows
                ListBox1.Items.Add(dr(2))
            Next
        Catch ex As Odbc.OdbcException
            Dim err As Odbc.OdbcError

            For Each err In ex.Errors
                MsgBox(err.Message & vbNewLine & "SQLState: " & err.S
QLState)
            Next
        End Try

とするとエラー無く実行できるのですが、自分が作成したテーブル以外に
mysql.columns_priv
mysql.db
mysql.func
mysql.help_category
などが表示されます。

GetSchemaで自分が作成したテーブルのみを表示するにはどうすればよいでしょうか。

[ツリー表示へ]
タイトルRe: MySQLへの接続 出直し編
記事No3830
投稿日: 2006/06/13(Tue) 13:04
投稿者なおこ(・∀・)
お世話になります。

> とするとエラー無く実行できるのですが、自分が作成したテーブル以外に
> mysql.columns_priv
> mysql.db
> mysql.func
> mysql.help_category
> などが表示されます。
MySql にはあまり詳しくないですが、
おそらく SYSTEM TABLE も取得している為でしょう。

取得する時に SYSTEM TABLE 以外のものを取得する方法は解りませんが、
TABLE_TYPE が TABLE のもののみ抽出するなら、
いったん全部取得して、こんな感じでどうでしょうか。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
  Const CONNECTION_STRING As String = "接続文字列"
  Dim schemaTable As DataTable
  Dim odbcConn As Odbc.OdbcConnection
  odbcConn = New Odbc.OdbcConnection(CONNECTION_STRING)
  Try
    odbcConn.Open()
    Try
      schemaTable = odbcConn.GetSchema("Tables")
      Dim dv As DataView = New DataView(schemaTable)
      dv.RowFilter = "TABLE_TYPE='TABLE'"
      Me.ListBox1.Items.Clear()
      For Each row As DataRowView In dv
        Me.ListBox1.Items.Add(Convert.ToString(row("TABLE_NAME")))
      Next
    Finally
      If odbcConn IsNot Nothing Then odbcConn.Close()
    End Try
  Finally
    If odbcConn IsNot Nothing Then odbcConn.Dispose()
  End Try
End Sub

[ツリー表示へ]
タイトルRe^2: MySQLへの接続 出直し編
記事No3854
投稿日: 2006/06/20(Tue) 10:54
投稿者kopo
大変お世話になっております。
DataGridViewに一旦取得したテーブル情報を表示してみたところ、0列目に何のデータベースのテーブ
ルか、という情報がありましたので、

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
        Dim cn As ODBC.ODBCConnection = New ODBC.ODBCConnection
        Dim dt As DataTable
        Dim dr As DataRow
        Dim resValue As String()

        cn.ConnectionString = "接続文字列"
        ListBox1.Items.Clear()
        Try
            cn.Open()
            dt = cn.GetSchema("Tables", resValue)
            cn.Close()
            For Each dr In dt.Rows
                If dr(0) = "oneclickdb" Then
                    ListBox1.Items.Add(dr(2))
                End If
            Next
        Catch ex As Odbc.OdbcException
            Dim err As Odbc.OdbcError
            For Each err In ex.Errors
                MsgBox(err.Message & vbNewLine & "SQLState: " & err.S
QLState)
            Next
        End Try
    End Sub

で無事目的のテーブル名のみ取得することができました。
それにしてもWebを読んでも本を読んでもOleDB、ADO.NET、ODBC etc..とやりかたがたくさんある上
に、ときどき記載漏れがあったり、また同じことをやるのにコードが結構違ったりとかでデータベー

は大変です。

[ツリー表示へ]