WebSurfer's Home

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

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

MySQL をインストールしました(その 2)

by WebSurfer 2017年1月31日 21:00
注意
最新版は不明ですが、この記事の MySQL Installer 5.7.17 を使って Connector/NET をインストールすると、MySql.Data.dll のバージョンの不一致で、Visual Studio の TableAdapter 構成ウィザードで不具合が出ます。詳しくは別の記事「MySQL での TableAdapter 構成ウィザード不具合」を見てください。

先日買った Windows 10 Pro 64-bit のノート PC に MySQL をインストールしましたので、その顛末を備忘録として書いておきます。インストールしたのは現時点での最新版 MySQL Community Server 5.7.17 と Connector/Net 6.9.9 です。

先の記事「MySQL をインストールしました」で MySQL Community Server 5.5.11 と Connector/Net 6.3.6 をインストールした時の概略を書きましたが、6 年近く昔の話なので、その時とはかなりやり方が変わっていました。

まず、MySQL のダウンロードサイト MySQL Community Downloads に行き、そこから順次リンクをたどればインストーラーのダウンロードページ Download MySQL Installer が見つかると思います。

2017/1/27 時点では Generally Available (GA) Releases として MySQL Installer 5.7.17 というバージョンが表示されていました。このインストーラーを使って、Server 本体, Connector/NET はもちろんすべての製品をインストールできるそうです。

また、Windows (x86, 32-bit), MySQL Installer MSI とありますが、それは "Note: MySQL Installer is 32 bit, but will install both 32 bit and 64 bit binaries." というこで、64-bit OS にもこれを使ってインストールできます。

ダウンロードできるファイルは 2 種類あってネットに接続できる環境か否かで選ぶらしいです。自分は mysql-installer-web-community-5.7.17.0.msi(ネットに接続してダウンロードしながらインストールするバージョン)を使いました。

以下にインストールするときに表示された画像を貼って要点を書いておきます。

(1) ライセンス条項に合意

License Agreement

I accept the license terms にチェックを入れて Next をクリックします。

(2) セットアップ内容の選択

Choosing a Setup Type

Developer Default で十分かもしれませんが、万一不足していて後で追加インストールすることになるのも面倒なので Full を選択しました。

(3) 要件のチェック

Check Requirements

先の「(2) セットアップ内容の選択」画面で選んだ内容でインストール先の PC が要件を満たしているかをチェックしているようです。Python はインストールしてないので当然ですが、Python 3.4 is not installed という警告が出ます。無視して Next をクリックします。

(4) インストール開始

Installation

Execute をクリックするとダウンロードとインストールが始まります。

(5) インストール完了

Installation

ダウンロードとインストールには少々時間がかかります。完了すると上の画像のようにそれぞれの項目にチェックマークがつきます。

(6) 製品の構成

Product Configuration

インストールした製品の構成設定を行います。

(7) タイプとネットワーク

Type and Networking

開発マシンで使用するので Development Machine を選択します。Named Pipe と Shared Memory にはデフォルトではチェックが入ってませんが、入れておきました。ファイアウォールの穴あけはデフォルトでチェックが入っていて自動的にやってくれるようです。

(8) MySQL ユーザー詳細情報

MySQL User Details

設定したパスワードは忘れないように覚えておいてください。自分は開発マシンのログイン用と同じパスワードを入力したのですが Week だそうです。(汗) 無視してそのまま続けることはできます。

(9) MySQL サーバーへのアカウント登録

Accounts and Roles

先の「(8) MySQL ユーザー詳細情報」画面で入力したものと同じパスワードを入力し、Add User をクリックします。

(10) Windows Service

Windows Service

PC の Windows OS 上で MySQL を実行するサービス等の設定を行います。画面の通りのデフォルトでいいと思います。

(11) プラグインの設定

Plugins and Extensions

ドキュメントをオンラインで読んでくるための設定を行うようです。画面の通りの設定でいいと思います。

(12) 構成設定の適用

Apply Server Configuration

Execute をクリックすると画面に表示されている各項目の設定が自動的に行われます。

(13) 設定の完了

Apply Server Configuration

構成設定が完了すると各項目にチェックマークが入ります。

(14) サーバーへの接続

Connect to Server

先の「(8) MySQL ユーザー詳細情報」画面で設定したユーザー名とパスワードで接続を試みるということのようです。

(15) 接続の確認

Connect to Server

有効なユーザー名とパスワードを入力して Check をクリックすると Connection successful と表示されます。

(16) サーバー構成の適用

Apply Server Configuration

Execute をクリックすると画面に表示されている各項目が自動的に実行されます。

(17) サーバー構成の完了

Apply Server Configuration

構成設定が完了すると各項目にチェックマークが入ります。

(18) 製品の構成

Product Configuration

上の「(17) サーバー構成の完了」画面で Finish をクリックすると「(6) 製品の構成」画面に戻ります。

(19) 完了

Installation Complete

上の「(18) 製品の構成」画面で Next をクリックするとインストールと設定が完了します。一連の作業で記録されたログがクリップボードにコピーできますので、残しておいた方がよさそうです。

(20) インストールされた製品

MySQL Installer - Community というツールも一緒にインストールされるので、それを起動すると画面のように製品一覧がバージョンと共に表示されます。



最後に、インストールしてみて分かった新発見(というより自分が知らなかっただけですが)を書いておきます。

  1. Connector/NET は Any CPU でコンパイルされている。自分でも corflags.exe を使って確認しました。おかげで ODP.NET のように 32/64-bit の違いに悩むことはなさそうです。
  2. Connector/NET 6.9.9 には .NET 4+ 用の .dll しか含まれない。バージョン 6.4.x から .NET 3.5 以下用の .dll は含まれなくなったらしいです。自分が使っているレンタルサーバーは .NET 3.5 までにしか対応しておらず、それの保守環境を作るのにちょっと困りました。
  3. mysql というコマンドはなくなった模様。旧マシンで行ったようにコマンドラインから mysql と入力して立ち上げることはできなくなっています。代わりに MySQL 5.7 Command Line Client というのを起動して使うことになります。
  4. mysqldump というコマンドもなくなった模様。代わりに mysqldbexport というユーティリティを使うらしいです。その他 mysqldbimport など多々ユーティリティが用意されています。

Tags: ,

MySQL

MySQL と SqlDataSource の問題

by WebSurfer 2014年11月24日 17:10

Visual Studio 2010 Professional 上で MySQL と SqlDataSource を使って ASP.NET Web Forms アプリを作った時に遭遇した問題を書きます。

クエリのテスト結果

なお、使ったのは 3 年以上前にインストールした MySQL Community Server 5.5.11 と Connector/Net 6.3.6 ですので、最新版では様子が違うかもしれません。ご注意ください。

問題は、簡単に書くと、Visual Studio の「データソースの構成」ウィザードを使ってクエリを自動生成すると、識別子がスクエアブラケット( [ ] )で囲まれますが、それが MySQL では使えないので、上の画面のようなエラーが出るということです。

具体的な再現手順を書くと、(1) Visual Studio のデザイン画面で SqlDataSource の > 印をクリック、(2) 表示される「SqlDataSource タスク」メニューの中の[データ ソースの構成...]をクリック、(3) ウィザードの「Select ステートメントの構成」画面で[テーブルまたはビューから列を指定します(T)]を選択、(4) 次の画面「クエリのテスト」に進んでテストを実行、(5) 上の画面のようなエラーが出る・・・ということです。

上のエラーメッセージで、テーブル名 employees がスクエアブラケット( [ ] )で囲まれているのが分かるでしょうか? ちなみに、ウィザードで生成されたソースは以下のようになります。(注:この例では列に * を選択しています。実際の列を指定すると列名もスクエアブラケットで囲まれます)

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
  ConnectionString="<%$ ConnectionStrings:MySQL %>" 
  ProviderName="<%$ ConnectionStrings:MySQL.ProviderName %>" 
  SelectCommand="SELECT * FROM [employees]">
</asp:SqlDataSource>

もちろんこの状態で実行しても以下のようにサーバーエラーになります。

サーバーエラー

解決策は、生成されたソースのクエリからスクエアブラケットを削除するか、スクエアブラケットに換えてバッククォート( ` )で囲むことです(識別子が予約語と同じ、または特殊文字を含む場合)。

または、上の再現手順の (3) のステップで[カスタム SQL ステートメントまたはストアド プロシージャを指定する(S)]を選んで、自力でクエリを組み立ててもいいです。

ただし、SELECT だけならそれでもいいですが、INSERT, DELETE, UPDATE も必要な場合は少々面倒です。

Visual Studio のデータスース構成ウィザードを使って型付 DataSet + TableAdapter を作った場合は、識別子は正しくバッククォート( ` )で囲まれ上記のような問題はありませんので、それと ObjectDataSource を組み合わせて使う方が良さそうです。

Tags:

MySQL

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  2018年2月  >>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

View posts in large calendar