WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

TableAdapter 構成ウィザードで不具合(その 2)

by WebSurfer 2020年4月21日 10:40

最新版の MySQL 8.0.19 をインストールしましたが(下の画像参照)、2 年前にインストールした MySQL 5.7.17 と同様に、依然として MySql.Data.dll のバージョン不一致が原因で Visual Studio の TableAdapter 構成ウィザードに不具合が出るという問題がありましたので備忘録として書いておきます。

MySQL 8.0.19

MySQL 5.7.17 時の問題とその解決方法は先の記事「MySQL での TableAdapter 構成ウィザード不具合」で書きました。それと同じ MySQL for Visual Studio と Connector/NET の MySql.Data のバージョン不一致による問題です。

ただし、何故か Visual Studio Community 2019 v16.5.4 では問題なく、Visual Studio Community 2015 Update 3 だけで問題が出ました。(注:VS2017 は自分は持っていないので不明です。VS2010 は MySQL 8.0.19 のサポート対象外のようなので試してません)

下の画像は VS2015 で TableAdapter 構成ウィザードを使って型付 DataSet / DataTable + TableAdapter を作成しようとしたとき時、最後のステップで表示されたエラーメッセージです。

TableAdapter 構成ウィザード

上のエラーメッセージは、VS2015 のウィザードが使う MySql.Data.dll のバージョン 8.0.18 と、GAC の MySql.Data.dll のバージョン 8.0.19 に不一致があって、それが原因でキャストに失敗したと言っています。ちなみに、前者は MySQL for Visual Studio、後者は Connector/NET によりインストールされたものです。

この問題は、先の MySQL 5.7.17 時と同様に、MySQL Installer(この記事の一番上の画像のもの)を操作して、Connector/NET のバージョンを 8.0.19 から 8.0.18 に下げることで解決できます。

しかしながら、VS2015 での問題を解決するために Connector/NET のバージョンを 8.0.19 から 8.0.18 に下げると、今度は VS2019 から MySQL に接続できなくなるという問題が出ます。

Connector/NET のバージョンを 8.0.18 に下げた後、VS2019 から MySQL の接続を作成する際、以下の画像のように「データソースの選択」ダイアログで[MySQL Database]を選択すると、

データソースの選択

下の画像のように、MySQL for Visual Studio が "An error occurred that is normally caused by not having for Visual Studio properly installed." というエラーメッセージを表示します。

MySQL for Visual Studio のエラーメッセージ

このエラーを無視して先に進めると、下の画像のように VS2019 が MySql.Data.dll 8.0.19.0 が見つからないというエラーメッセージを表示して MySQL への接続に失敗します。

VS2019 のエラーメッセージ

この問題を解決する方法は、Connector/NET のバージョンを 8.0.19 に戻すことです。ただし、そうすると、再び、VS2015 で TableAdapter 構成ウィザードを利用する際に MySql.Data.dll のバージョン不一致の問題が出ますが。

何故 VS2015 と VS2019 ではこのような違いが出るのかは不明です。MySQL 8.0.19 インストーラーのデフォルト設定で VS2015 / VS2019 の Common7\IDE\PrivateAssemblies フォルダにある MySql.Data.dll のバージョンは 8.0.18 で、GAC にある MySql.Data.dll のバージョンは 8.0.19 と異なるのですが・・・

というわけで、VS2019 から MySQL に接続したり TableAdapter 構成ウィザードを利用するためには Connector/NET のバージョンは 8.0.19(デフォルト)のままとしておき、VS2015 での TableAdapter 構成ウィザードの利用は諦めざるを得ないようです。(注:VS2017 は自分は持ってないので不明です)

Tags: ,

MySQL

VS2015 でユーザーインスタンス利用

by WebSurfer 2018年9月24日 13:57

SQL Server Express のユーザーインスタンスを利用して、Visual Studio Community 2015 の TableAdapter 構成ウィザードで型付 DataSet + TableAdapter を自動生成する際の注意点を書いておきます。

Visual Studio 2010 Professional と同じ手順で作業すると、作業の過程で以下のように、"ファイル xxx.mdf の自動的に名前が付けられたデータベースをアタッチできませんでした。同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC 共有に配置されています。" というエラーが出て先に進めません。

エラーメッセージ

原因はここまでの作業で生成された接続文字列に User Instance=True が付与されないからです。

接続文字列には AttachDbFilename でアタッチする .mdf ファイルは指定されるのですが、その場合 User Instance=True で明示的にユーザーインスタンスを使うようにする必要があるようです。

(想像ですが、User Instance=True が付与されていないので、既定の(または名前付き)インスタンスにアタッチしようとして、権限の問題で失敗していると思われます。先の記事「DB のアタッチ」参照)

TableAdapter 構成ウィザードで作業を進めていく際、「接続の追加」ダイアログで[詳細設定(V)...]ボタンをクリックすると「詳細プロパティ」ダイアログが表示されますので、そこでユーザーインスタンスを使用するように設定する必要があります。

詳細プロパティ

「詳細プロパティ」で[Data Source]を LocalDB から SQL Server Express に変更するところは気が付きましたが、もう一つ[User Instance]がデフォルトで False になっていて、これを True に変更する必要があることに気が付きませんでした。

ちなみに、Visual Studio 2010 Professional では「詳細プロパティ」の[User Instance]は True に設定されています。

「詳細プロパティ」の設定後、先に進んで TableAdapter 構成ウィザードに戻ったときに接続文字列を確認できます。

接続文字列

上の画像のように User Instance=True となっていれば OK です。後は従前の手順で進めていけば問題なく型付 DataSet + TableAdapter が完成するはずです。

ユーザーインスタンスはすでに非推奨になっていて、最近の開発には LocalDB を利用するので、このような問題に悩むケースはほとんどなさそうですが、忘れないよう備忘録として残しておくことにしました。(笑)

Tags: ,

ADO.NET

MySQL での TableAdapter 構成ウィザード不具合

by WebSurfer 2018年2月10日 20:02

先の記事「MySQL をインストールしました(その 2)」で書きましたが、MySQL Installer 5.7.17 を使って、MySQL Community Server 5.7.17, Connector/Net 6.9.9 など、その時点での最新版の MySQL 関係のコンポーネントを一式インストールしました。(何をインストールしたかは記事を見てください)

その後 1 年も経っているのに何ですが、MySQL では Visual Studio の TableAdapter 構成ウィザードを使って型付 DataSet + TableAdapter を自動生成できないことに最近やっと気が付きました。(汗)

備忘録として、自分の環境で起こった問題と解決策を書いておきます。ちなみに、自分の環境とは以下の通りです。(MySQL 関係はすべて MySQL Installer 5.7.17 でインストールしたものです)

  • Windows 10 Pro 64-bit
  • Visual Studio 2010 Pro / 2015 Community Update 3
  • MySQL Community Server 5.7.17
  • MySQL for Visual Studio 1.2.6
  • Connector/Net 6.9.9

上記の環境で TableAdapter 構成ウィザードを使って型付 DataSet + TableAdapter を生成すると、最後のステップで "[A] MySql.Data.MySqlClient.MySqlConnection は [B] MySql.Data.MySqlClient.MySqlConnection にキャストできません。" というエラーになります。

以下の画像を見てください。

Visual Studio 2010

Visual Studio 2010

Visual Studio 2015

Visual Studio 2015

エラーメッセージを見ての想像ですが、Visual Studio のウィザードが使う MySql.Data.dll のバージョン 6.9.8 と、GAC の MySql.Data.dll のバージョン 6.9.9 に不一致があって、それが原因でウィザードが期待通り動かないようです。

自分の PC のフォルダの MySql.Data.dll のバージョンを調べてみると、確かにエラーメッセージの通りのバージョンの相違がありました。

TableAdapter 構成ウィザード以外での不具合としては、ASP.NET Web Forms アプリで使用される SqlDataSource の例があります。

ウィザードの最後のステップで[クエリのテスト]を行うと、"オブジェクト参照がオブジェクト インスタンスに設定されていません。" というエラーになります。

以下の画像を見てください。

SqlDataSource の場合

Visual Studio のサーバーエクスプローラーから MySQL に接続するのは問題ないのですが、どうもウィザードが MySQL に接続に行くとダメな感じです。

ググって調べると、同様な問題が MSDN フォーラムの記事MySQL のフォーラムの記事 に報告されているのが見つかりました。

いずれの記事にも Connector/NET 6.9.9 をアンインストールしてから Connector/NET 6.9.8 をインストールして解決したと書いてあります。

Connector/NET のアンイストールはいろいろトラブルがある様子で、クリーンにアンインストールできるかどうか不安がありましたが、ウィザードが使えないと不便なので自分もやってみることにしました。

まず Connector/NET 6.9.9 のアンインストールですが、「コントロールパネル」⇒「プログラムと機能」を使って行うのではなく、MySQL Installer の Remove 機能を使うのがよさそうです。

Connector/NET 6.9.9 の Remove

上の画像で[Execute]ボタンをクリックするとエラーなく Remove は完了し、GAC, レジストリ, Program Files フォルダ, machine.config にも削除結果が反映されており、クリーンにアンインストールできました。トラブルがあるのではという心配は杞憂だったようです。

Connector/NET 6.9.8 のインストールも MySQL Installer を使ってできないかトライしたのですが、"No valid download found for product Connector/NET 6.9.8" が解消できず断念。

やむを得ないので別途ダウンロードした Connector/NET 6.9.8 の msi を起動してインストールしました。MySQL Installer に認識されなくて後で管理がやりにくいかもしれないと思いましたが、そんなことはなかったです。

Connector/NET 6.9.8

その後、Visual Studio 2015 で TableAdapter 構成ウィザードを使って型付 DataSet + TableAdapter を作ってみましたが、上に述べた問題は解消されていました。

ASP.NET Web Forms アプリ用の SqlDataSource も試してみましたが、ウィザードから MySQL に接続できないという問題も解消されていました。

Tags: ,

MySQL

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar