mysql クエリ方法を教えてください

解決


YUUJI  2004-09-29 17:10:58  No: 85810  IP: [192.*.*.*]

vb.net でmysqlにodbcで接続後クエリを送信したいのですが、見よう見まねで、色々試したのですがクエリ送信部分がわかりません
お知恵をお貸しください

よろしくお願いいたします。


        Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                                    "SERVER=localhost;" & _
                                    "PORT=3306;" & _
                                    "DATABASE=dbtest;" & _
                                    "UID=root;" & _
                                    "PASSWORD=*****;" & _
                                    "OPTION=3"

        'Connection
        Dim MyConnection As New OdbcConnection(MyConString)

        'MySQL INSERT
        Dim strSQL As String = "INSERT INTO `table` ( f1 , f2 ) VALUES ('1', '2');"
        Dim myOdbcCommand As New OdbcCommand(strSQL)

        'myConn.Open()
        MyConnection.Open()
        Console.WriteLine("Connection State::" & MyConnection.State.ToString)

        myOdbcCommand.ExecuteNonQuery()
        myOdbcCommand.Connection = MyConnection

        'クローズ
        MyConnection.Close()
        Console.WriteLine("Connection State::" & MyConnection.State.ToString)

編集 削除
岡田 之仁  2004-09-29 23:24:51  No: 85811  IP: [192.*.*.*]

これは無茶ですネ!〜

どこでエラー?と聞かなくても解ります。

以下のようにしてみて下さい。

        Dim MyConString As String
        Dim MyConnection As OdbcConnection
        Dim strSQL As String
        Dim myOdbcCommand As OdbcCommand
        Dim iRet As Integer

        MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + _
                            "SERVER=localhost;" + _
                            "PORT=3306;" + _
                            "DATABASE=dbtest;" + _
                            "UID=root;" + _
                            "PASSWORD=*****;" + _
                            "OPTION=3"

        'Connection
        MyConnection = New OdbcConnection(MyConString)
        'myConn.Open()
        MyConnection.Open()
        Console.WriteLine("Connection State::" & MyConnection.State.ToString)

        'MySQL INSERT
        strSQL = "INSERT INTO table ( f1 , f2 ) VALUES ('1', '2');"

        ' myOdbcCommand = MyConnection.CreateCommand
        myOdbcCommand = New OdbcCommand
        myOdbcCommand.Connection = MyConnection
        myOdbcCommand.CommandType = CommandType.Text
        myOdbcCommand.CommandText = strSQL

        iRet = myOdbcCommand.ExecuteNonQuery()

        myOdbcCommand.Dispose()

        'クローズ
        MyConnection.Close()
        MyConnection.Dispose()

        Console.WriteLine("Connection State::" & MyConnection.State.ToString)

    ご参考までに・・・

以上。

編集 削除
岡田 之仁  2004-09-29 23:29:47  No: 85812  IP: [192.*.*.*]

追伸・・・

VB.NET 2002 ですか?  それとも、VB.NET 2003 ですか?

要は、.NET Framework 1.0 か、1.1 か・・・

1.0 の場合、データベース(MySQL)へのSQL文の実行では、
エラーしないのに、実際には、成功終了しない・・・と言う
エラーが多発します。MySQL のバージョンにもよるようです。

私も、1.0 で何度か首をかしげるトラブルに見舞われました
が、1.1 にアップしたら、何がどうなったの?と思うほど、
トラブルがなくなりました。ADO.NETのトランザクション処
理にも起因していますが、1.0 では未サポートな為、安全に
行いたいのであれば、1.1 にして下さい。

以上。

編集 削除
YUUJI  2004-09-30 13:07:10  No: 85813  IP: [192.*.*.*]

回答ありがとうございます。
ご提示のソース使用させていただきました。

下記の行がエラーになってしまいました。

iRet = myOdbcCommand.ExecuteNonQuery()

'Microsoft.Data.Odbc.OdbcException' のハンドルされていない例外が microsoft.data.odbc.dll で発生しました。

対処方法を教えてください
よろしくお願いします。

環境
VB.NET 2003
.NET Framework 1.1
Mysql4.0.21-nt  (Winローカル)

編集 削除
YUUJI  2004-09-30 13:58:53  No: 85814  IP: [192.*.*.*]

クエリ部分を修正するとクエリ実行に成功しました。


INSERT INTO `table` ( f1 , f2 ) VALUES ('1', '2')

×
INSERT INTO table ( f1 , f2 ) VALUES ('1', '2')

MySQLのバージョンの問題かテーブル名を``で括らないとエラーになる様でした。(MysqlAdminでのクエリ実験でも同じ結果でした。)


岡田 之仁様  ありがとうございました。

編集 削除