1. 程式人生 > >如何新增".Net Framework Data Provider for MySQL"配置資訊到目標主機中?

如何新增".Net Framework Data Provider for MySQL"配置資訊到目標主機中?

在使用Entity Framework開發資料業務系統時,使用了MySQL資料庫,ADO.NET driver for MySQL使用官網http://www.mysql.com/downloads/connector/net/中下載的提供程式,在開發環境中安裝該提供程式後,該安裝程式將修改系統配置檔案“C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config”,修改後的檔案段如下:

隱藏行號 複製程式碼 這是一段程式程式碼。
  1. <system.data>
    
  2.   <DbProviderFactories
    >
  3.     <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    
  4.     <add name="OleDb Data Provider" invariant="System.Data.OleDb
    " description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  5.     <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle
    " type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  6.     <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    
  7.     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    
  8.   </DbProviderFactories>
    
  9. </system.data>
    

配置節”<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"…”是安裝程式新增的,預設主機環境中沒有該配置節。

當釋出程式到目標主機時,沒有該配置節時,應用程式將彈出異常,所以我們需要想辦法修改目標主機上的配置將上面的配置節新增進去,可行的辦法有一下幾種:

1、在可執行程式的配置檔案中新增該配置段。

此方法帶來的後果是,在開發主機上除錯程式變得非常不方便,因為該配置資訊在系統中只能出現一次,如果配置檔案載入配置是發現有兩個相同段的配置(一個位於上文提到的machine.config中,一個位於你要除錯的程式demo.exe.config中),程式將發生異常無法除錯,有解決方法就是在除錯時將該該配置段暫時註釋,釋出時取消註釋,但是這樣的反覆操作太令人痛苦了,所以此方法建議不採用。

2、程式啟動時修改“machine.config”配置檔案,新增配置段。

此方法經驗證部分可行,因為程式要修改該的配置檔案存在於系統路徑下,有檔案保護,需要有授權才能訪問並修改該檔案,而授權又是相當繁瑣的過程。所以此方法建議不採用。

3、在安裝程式中自定義安裝過程,在該過程中修改“machine.config”配置檔案。

此方法遮蔽了方法2的授權過程,因為安裝程式自身有許可權修改任何檔案,所以此方法為最佳方法。實現步驟如下,在主輸出專案中新增一個繼承自“Installer”類的子類,過載方法“ public override void Commit(IDictionary savedState)”,在該方法體內實現將配置節新增到“machine.config”配置檔案中,然後在安裝專案中自定義安裝過程。

自定義安裝類:

隱藏行號 複製程式碼 這是一段程式程式碼。
  1. using System;
    
  2. using System.Collections;
    
  3. using System.ComponentModel;
    
  4. using System.Configuration.Install;
    
  5. using System.IO;
    
  6. using System.Linq;
    
  7. using System.Reflection;
    
  8. using System.Xml.Linq;
    
  9. using System.Diagnostics;
    
  10. using System.Windows.Forms;
    
  11. namespace Freemansoft.Csm
    
  12. {
    
  13.     /// <summary>
    
  14.     /// 自定義安裝。
    
  15. /// </summary>
    
  16. [RunInstaller(true)]
    
  17.     public partial class CsmInstaller : Installer
    
  18. {
    
  19.         /// <summary>
    
  20.         /// 構造方法。
    
  21. /// </summary>
    
  22. public CsmInstaller()
    
  23.         {
    
  24.             InitializeComponent();
    
  25.         }
    
  26.         /// <summary>
    
  27.         /// 過載提交。
    
  28. /// </summary>
    
  29. public override void Commit(IDictionary savedState)
    
  30.         {
    
  31.             base.Commit(savedState);
    
  32.             CreateUnInstallBat();
    
  33.             CreateMySQLProviderSection();
    
  34.         }
    
  35.         /// <summary>
    
  36.         /// 建立“MySQL資料庫”資料提供程式配置段。
    
  37. /// </summary>
    
  38. private static void CreateMySQLProviderSection()
    
  39.         {
    
  40.             string invarientValue = "MySql.Data.MySqlClient";
    
  41.             string machineCfgFileName = @"C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config";
    
  42.             string name = "MySQL Data Provider";
    
  43.             string description = ".Net Framework Data Provider for MySQL";
    
  44.             string type = "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d";
    
  45.             XDocument document = XDocument.Load(machineCfgFileName);
    
  46.             if (document != null)
    
  47.             {
    
  48.                 XElement element = document.Root.Element("system.data");
    
  49.                 if (element != null)
    
  50.                 {
    
  51.                     element = element.Element("DbProviderFactories");
    
  52.                     if (element != null)
    
  53.                     {
    
  54.                         if (element.Elements().FirstOrDefault(a =>
    
  55.                             a.Attribute("invariant").Value == invarientValue) == null)
    
  56.                         {
    
  57.                             element.Add(new XElement("add",
    
  58.                                 new XAttribute("name", name),
    
  59.                                 new XAttribute("invariant", invarientValue),
    
  60.                                 new XAttribute("description", description),
    
  61.                                 new XAttribute("type", type)));
    
  62.                             document.Save(machineCfgFileName);
    
  63.                             Logging.Logger.Inform("Add the mysql data provider configuration to the " + machineCfgFileName);
    
  64.                         }
    
  65.                     }
    
  66.                 }
    
  67.             }
    
  68.         }
    
  69.         /// <summary>
    
  70.         /// 建立解除安裝批處理檔案。
    
  71. /// </summary>
    
  72. protected void CreateUnInstallBat()
    
  73.         {
    
  74.             string dir = GetTargetDirectory();
    
  75.             FileStream fs = new FileStream(dir + "UnInstall.bat", FileMode.Create);
    
  76.             StreamWriter sw = new StreamWriter(fs);
    
  77.             sw.WriteLine("@echo off");
    
  78.             sw.WriteLine(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u " + Path.Combine(GetTargetDirectory(), "DbSynchronization.exe"));
    
  79.             sw.WriteLine(string.Format("start /normal %windir%\\system32\\msiexec /x {0}", base.Context.Parameters["productCode"].ToString()));
    
  80.             sw.WriteLine("exit");
    
  81.             sw.Flush();
    
  82.             sw.Close();
    
  83.             fs.Close();
    
  84.         }
    
  85.         /// <summary>
    
  86.         /// 獲取安裝目標目錄。
    
  87. /// </summary>
    
  88. protected string GetTargetDirectory()
    
  89.         {
    
  90.             string directory = Path.GetDirectoryName(base.Context.Parameters["assemblypath"].ToString());
    
  91.             if (directory[directory.Length - 1] != Path.DirectorySeparatorChar)
    
  92.             {
    
  93.                 directory += Path.DirectorySeparatorChar;
    
  94.             }
    
  95.             return directory;
    
  96.         }
    
  97.     }
    
  98. }
    

安裝專案自定義過程:

image

相關推薦

如何新增".Net Framework Data Provider for MySQL"配置資訊目標主機

在使用Entity Framework開發資料業務系統時,使用了MySQL資料庫,ADO.NET driver for MySQL使用官網http://www.mysql.com/downloads/connector/net/中下載的提供程式,在開發環境中安裝該提供程式

Data Provider 沒有.net framework Data provider for Mysql 的解決方法

近來做的一個專案中,資料庫用的是 MySql, 而在專案使用 Entity Data Model 來做資料服務層 ,可是在專案中新增 Data Entty Model 時,一般我們都會選擇從資料庫中直接生成,可是在選擇 Data Provider 時,就是沒有 .net f

CodeSmith連線mysql報.net framework data provider 沒發現

2 將\MySQL Connector Net 6.8.3\Assemblies\v4.5 下的MySql.Data.dll複製到CodeSmith\v7.0\SchemaProviders下 3 開啟CodeSmith 找到Schema Explorer  新增資料庫連

mysql 找不到或無法載入已註冊的 .Net Framework Data Provider

需要安裝 mysql-connector-net-6.7.4.msi 在C盤安裝mysql的位置找到三個DLL,複製到Bin資料夾下 在C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.confi

c#連線mysql資料庫時 找不到或無法載入已註冊的 .Net Framework Data Provider

第一步:安裝驅動  mysql-connector-net-6.7.4.msi   第二步:根據你的專案版本複製mysql-connector-net-6.7.4 安裝目錄下對應版本的dll到專案的bin下的程式啟動目錄  debug 或者realse下面  比如4.

解決“找不到請求的 .Net Framework Data Provider。可能沒有安裝.”錯誤

問題: 這幾天在裝.NET 的開發環境,在裝好VS2013和Oracle 11g之後,做了一個測試專案,執行除錯沒問題 但是涉及到資料庫相關操作,如新建資料集、連線資料庫等在除錯的時候則會出現如下錯誤: 目前百度之後現存的解決方案: oracl

MVC: 找不到請求的 .Net Framework Data Provider。可能沒有安裝

遇到這個問題,我是下載SQL Server Compact 4.0 安裝後就可以解決。下載地址是: 在尋找解決辦法的時候還找到一個學習MVC的例子,MVC music store  http://mvcmusicstore.codeplex.com/ 我現在學習的例子

找不到請求的.Net Framework Data Provider。可能沒有安裝

在學習MVC的時候,新增控制器遇到這個問題,到網上查了下才知道本機沒有安裝 Microsoft SQL Server Compact 4.0 這個元件於是到MS官網下了個這個元件,然後安裝上就OK了。

DBExportDoc V1.0 For MySQL 配置說明

     昨天下班同事問我用沒用過DBExportDoc V1.0 For MySQL生成資料庫文件。之前,在工作中生成過oracle的資料庫文件。開始以為差不多,但是連線資料庫的時候遇到點麻煩。後來才發現,連線MySQL資料庫需要配置一下ODBC的資料來源。然後,下載了個m

Change data directory for MySQL

In fact, usually MySQL installed by default configuration and the size of default storage on cloud is limited. If you want to use cloud as database ser

sql 錯誤 未更新行1的資料 錯誤源:.net sqlclient data provider

 sql server 2012的一張表中修改某個欄位,不管是刪除字元還是新增都提示下面的錯誤. --------------------------- Microsoft SQL Server Management Studio --------------------------- 未更新任何行。

Timeout 時間已到。在操作完成之前超時時間已過或伺服器未響應。 (.Net SqlClient Data Provider)

  原文地址   在做一個小東西的時候出現了這個問題,就是使用VS除錯幾次專案後,使用SQL Server Management Studio管理資料庫時,使用SA登入就會出現這個錯誤,當然,如果專案中的資料庫連線字串中使用的sa驗證,那麼專案也會連不到資料庫

[原]敏捷開發專案升級mysql資料庫,談談結構、資料比對,navicat for mysql + dbForge Data Compare for MySQL 足矣!

在公司專案中,我有幸負責製作“升級指令碼”。升級指令碼,無疑兩步,先結構比對,再初始資料比對。 一、結構比對 結構比對比較簡單,使用navicat for mysql 工具,“工具”-“結構同步”,選擇好“源”、“目標

spring boot+spring data jpa+gradle+mysql配置問題

cto one com ons pri -- 裏的 prope tail 1、gradle/wrapper/gradle-wrapper裏要設置正確本地的gradle目錄(我用的是4) 2、在src目錄裏的application.properties文件裏,可以這樣設置

已成功與服務器建立連接,但是在登錄過程發生錯誤。 (provider: SSL Provider, error: 0 - 證書鏈是由不受信任的頒發機構頒發的。) (.Net SqlClient Data Provider)

發的 sql ima bold com font data 不能 serve 在用外網連接阿裏雲的SQL Server數據庫時,碰到了這樣一個問題: 已成功與服務器建立連接,但是在登錄過程中發生錯誤。 (provider: SSL Provider, error: 0

ubuntu16 mysql配置檔案my.cnf沒有bind-address

使用ubuntu16安裝mysql時,發現mysql的配置檔案/etc/mysql/my.cnf 裡面基本沒有什麼東西: # # The MySQL database server configura

安裝mysql提示This application requires .NET framework 4.0.

分享 clas blank 4.0 center water tar ati iss 問題描述:安裝MySQL社區版時遇到This application requires .NET framework 4.0. 解決方法:在http://search.microsoft

MySQL+Toad for Mysql安裝,配置及導入中文數據解決亂碼等問題

下載 tools 不同 打開 show amd rac mysql\ 默認 1.下載MySQL5.7版本,安裝官網上的windows安裝版,下載地址為:https://dev.mysql.com/downloads/windows/installer/5.7.html 安

Mac osx 10.10系統下Navicat for MySQL的安裝與配置

在打算用workbench之前就被同學安利了navicat,欲罷不能 之前win上用的很舒爽,現在mac上剛剛裝好,總結一下資源和步驟 =====================================================================

如何快捷安裝並配置MySQL 下載破解Navicat for mysql

首先,要先下載MySQL,進官網下載相應的mysql版本,這個不收費,實在不知道的可以參考一下這篇:https://blog.csdn.net/qq_37172528/article/details/80459490?utm_source=blogxgwz2 有詳細的下載教程和配置,我就省略了 然後,我要