- PR -

mysqlのoledb接続

1
投稿者投稿内容
ホーガン
常連さん
会議室デビュー日: 2008/02/18
投稿数: 42
投稿日時: 2008-08-18 16:03
asp.netでmysqlにoledb接続でアクセススしたいのですが、上手くいきません。
「System.Runtime.InteropServices.COMException (0x80040E21): 複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。」

ODBC接続だと上手くいきます。
ですが、帳票ツール(ActiveReport)でODBC接続が出来ない(本当は出来るかも..)
ので、oledb接続で行いたいです。今までは、AS400で行っておりましたが、
クライアントPCのみでも行える様にしたいというお客様の要望で、iniファイルで使用
dbを切り分けてas400を使うかmysqlを使うかを判断しようと思っています。もちろんas400に接続した時は、odbcでもoledbでも問題なく動作します。
色々自分なりに調べてはみたのですが、レジストリを変更する必要があるとか
しか載っていません。oledb接続するのにレジストリを変更しなければいけないのでしょうか?

接続箇所のソースコードです。どなたかご教示願えませんでしょうか。

Public Shared Function DbOpen() As Object
Dim wCon As New ADODB.Connection

Try
wCon.ConnectionTimeout = WSysComIniInfo.intConnectionTimeout
wCon.CommandTimeout = WSysComIniInfo.intCommandTimeout
wCon.CursorLocation = WSysComIniInfo.intCursorLocation
wCon.Open(DbConnStrOLE(), WSysComIniInfo.strUser, WSysComIniInfo.strPassword)<−− ここで落ちます。
Catch ex As Exception
Throw ex
End Try
Return wCon
End Function
Public Shared Function DbConnStrOLE() As String
Dim strConn As String

DbConnStrOLE = ""
strConn = ""
strConn = strConn & "Provider=sqloledb;"
strConn = strConn & "Data Source=localhost;"
strConn = strConn & "User ID=root;"
strConn = strConn & "Password=pass;"
'---------------------
strConn = strConn & "Persist Security Info=True;"
strConn = strConn & "Protection Level=None;"
strConn = strConn & "Initial Catalog=;"
strConn = strConn & "Transport Product=Client Access;"
strConn = strConn & "SSL=DEFAULT;"
strConn = strConn & "Force Translate=65535;"
strConn = strConn & "Default Collection=;"
strConn = strConn & "Convert Date Time To Char=TRUE;"
strConn = strConn & "Catalog Library List=;"
strConn = strConn & "Cursor Sensitivity=3"

Return strConn
End Function



ホーガン
常連さん
会議室デビュー日: 2008/02/18
投稿数: 42
投稿日時: 2008-08-18 16:54
自己レスです。
80040E21のエラーは解消されました。
'---------------------
strConn = strConn & "Persist Security Info=True;"
strConn = strConn & "Protection Level=None;"
strConn = strConn & "Initial Catalog=;"
strConn = strConn & "Transport Product=Client Access;"
strConn = strConn & "SSL=DEFAULT;"
strConn = strConn & "Force Translate=65535;"
strConn = strConn & "Default Collection=;"
strConn = strConn & "Convert Date Time To Char=TRUE;"
strConn = strConn & "Catalog Library List=;"
strConn = strConn & "Cursor Sensitivity=3"
をコメントアウトしたら上手くいきました。

しかし、プロバイダ接続文字のsqloledbはsqlServerでMySqlには接続できない
みたいです。MySql5.0の接続文字は何を使用すれと良いか何方かご教示願います。

各種サイトで色々調べてみましたが、すべてプロバイダが見つかりませんという
エラーがでます。

試した接続文字
 "MySqlProv"
 "MySqlProv5.0"
 "OleMySql.MySqlSource.1"

くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-18 17:53
接続文字列については、下記サイトにて調べてください。
ConnectionStrings.com

MySQL -> OLE DB, OleDbConnection (.NET) に記載されています。

それと・・・
>Dim wCon As New ADODB.Connection
これはADO接続の様に思えるのですが・・・
OLEDB接続を行うならば、System.Data.OleDb以下の各クラスを使いましょう。
ホーガン
常連さん
会議室デビュー日: 2008/02/18
投稿数: 42
投稿日時: 2008-08-19 11:11
くまっちさん
ありがとうございます。
さっそく教えていただいたサイトを参考にしてみます。
ホーガン
常連さん
会議室デビュー日: 2008/02/18
投稿数: 42
投稿日時: 2008-08-19 11:32
System.Data.OleDb配下のクラスを使用して
Dim wCon As New OleDbConnection
にして
Provider=MySqlProv
で実行してみましたが、結果は同じでした。
「'MySqlProv'プロバイダはローカルのコンピュータに登録されていません。」
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-08-19 15:31
MySQL用のOLEDBプロバイダ(MyOleDb)がインストールされていないのでは?

MyOleDb
SourceForge-MyOleDbプロジェクト

#余談ですが.NetからMySQLへ接続するならばMySQL-Connector/NETを使う道もあります。
1

スキルアップ/キャリアアップ(JOB@IT)