2011-06-18 9 views
8

Mysqlをデータストレージとして使用するドットネット2.0ベースのC#製品があります。 XP/Win 7マシンにmysqlコネクタ6.3.6をインストールすると、問題なくC#コードからデータベースに接続できます。しかし、実際にはmysqlコネクタがマシンにインストールされていないのに、実行可能ファイルと同じディレクトリに存在するだけで、mysqlデータベースに接続しているときに問題が発生しています。私たちは、製品を稼動させたいすべてのマシンにコネクターをインストールしたくありません。私たちはコード内で任意のサードパーティのdll(例えばロガー)を使用する際に、connectory dllを直接使用したいと考えています。実際にコネクタをインストールせずに、C#経由でmysqlコネクタを使用してmysqlに接続する方法

mysql.data.dllをexeがインストールされているのと同じディレクトリにコピーしても、ビルドされますがデータベースに接続しません。

指定されたエラーは、要求された.NET Frameworkのデータプロバイダを見つけることができません

です。

  • のMysql 5.0
  • C#
  • ドットネットフレームワーク2.0
  • MySQLのコネクタ6.3.6(同じ問題が6.0版で発生します。これは BLOCKQUOTE

技術情報をインストールしなくてもよいですSQLコネクタの.3)

  • 勝利XP/Win 7
  • 我々はASP.Netを使用している場合は、私たちはweb.configファイルに下記のタグを指定することができ、我々は直接binディレクトリ


    <system.data> 
        <DbProviderFactories> 
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
        </DbProviderFactories> 
    </system.data> 
    
    にDLLを置くことによって、MySQLデータベースに接続することができます

    デスクトップ環境のクライアントサーバーアプリケーションでC#で同じことを実行できないのはなぜですか。

    本当にありがとうございます。

    Kalpak

    +0

    同じ設定をデスクトップアプリケーションの 'app.config'に入れますか? – Jon

    +0

    私たちはapp.configに同じ設定をしませんでした。タグDBProviderFactoriesがapp.configで無効と思われる – Kalpak

    +0

    この質問は、私に月前に頭痛の数時間を節約してくれたでしょう。すべての.Net Connectorインストールは(私が理解したところから)「MySQL Data Provider」エントリをmachine.configに追加します。私はインストーラを使用せず、単純にエントリを自分の設定に追加しました。私は離れて、.Net ProviderFactoriesを使って走っていました。 – IAbstract

    答えて

    2

    私は可能なバージョン/構成をチェックしていませんでしたが、現在Vista x64 for MySql 5.5で動作しています... .netコネクタ6.4.3.0 - mysql.data.dllを使用していますネット/モノラルダウンロードからのv4)。

    下記の参照されているmysql.data.dllアセンブリが現在のディレクトリにあることを確認してください。

     
    using(var dt = new DataTable()) { 
        dt.Columns.Add("Name"); 
        dt.Columns.Add("Description"); 
        dt.Columns.Add("InvariantName"); 
        dt.Columns.Add("AssemblyQualifiedName"); 
        dt.Rows.Add("Mysql something", 
         "mysql more", 
         "mysqlClient", 
         "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"); 
    
        var f = DbProviderFactories.GetFactory(dt.Rows[0]); 
        using(var conn = f.CreateConnection()) { 
         conn.ConnectionString = "your string here"; 
         conn.Open(); 
         // and do your work here. 
         Console.WriteLine(conn); 
        } 
    } 
    
    +0

    である必要がありますこんにちは、それは私のために働いています。コード化、パフォーマンス、セキュリティなどの点でコネクタをインストールするよりも、この方法を使用することには欠点があります。 – Kalpak

    +0

    必要なすべてのアプリケーションに対してmysql.data.dllを複製する必要がある以外は、この方法に欠点はありません。だから1つだけ持っていれば、これは完璧です。私の場合はいくつかありますので、GACにmysqlアセンブリを配置し、machine.configをすべての適切な場所に変更したので、DbProviderFactories.GetFactory( "configsで指定した文字列")を使用して工場を取得し、そこ。私はちょうどその結果として手動でものを設定しなければならない.net/monoディストリビューションからそれらのdllを使用するのが好きです。 –

    0

    このpageは、.NET Frameworkの依存関係についての多くの詳細には触れませんが、私は、MySQLコネクタは、.NET Frameworkの新しいバージョンに依存する可能性があると思われます。

    つまり、アプリケーションはフレームワーク2を使用しますが、Mysqlコネクタはどのバージョンを使用しますか?

    +0

    v2とドットネットのv4と互換性があります。 – Kalpak

    +0

    6.3。*は、mysqlウェブサイトのADO.NETバージョン2.x +、.NET Frameworkバージョン2.x +、VSX 2010サポート用4.x +、MySQLサーバーバージョン5.0,5.1,5.4,5.5と互換性があります。 – Kalpak

    +0

    link http://dev.mysql.com/doc/refman/5.0/en/connector-net-versions.html – Kalpak

    0

    このエントリは:

    <system.data> 
        <DbProviderFactories> 
        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
        </DbProviderFactories> 
    </system.data> 
    

    ...あなたのmachine.configに書き込まれる必要があります。

    私は、デフォルトのパスのようなものであるべきと考えている:

    C:\ WINDOWS \ Microsoft.NET \ Frameworkのの\ v2.0の。50727 \ CONFIG

    更新
    あなたのインストールパッケージの一部としてMySQL .NET /コネクタインストーラを含めることができるはずです。 web.configに情報が必要と同じ理由で、machine.configのエントリが必要です。

    +0

    ソフトウェアをインストールする人は技術的には健全ではありません。そこで、このエントリを手動で追加することはできません。このエントリはNSISインストーラを介して可能ですか? – Kalpak

    +0

    最初の場所でこのエントリが必要な理由は、私の質問 – Kalpak

    関連する問題