C#MySQL在服务器上运行时抛出异常

问题描述:

我目前正在创建一个控制台应用程序,该应用程序必须与任何交互运行。在此应用程序中,我将连接到MySQL服务器以检查最新更新的数据。这在我的工作站上运行时没有问题,即使是从网络驱动器也是如此。C#MySQL在服务器上运行时抛出异常

但是,每当我把它放到我们的服务器上并让它为我运行时,它突然无法运行MySQL。它在connection.Open();上失败。

我目前使用: -MySQL连接器版本6.8.8 -.NET框架4.5.2

这是它引发错误;

System.TypeInitializationException: The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception. ---> System.TypeInitializationException: The type initializer for 'MySql.Data.MySqlClient.MySqlConfiguration' threw an exception. ---> System.ArgumentException: The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) 
    at System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone& zone, StringHandleOnStack retUrl) 
    at System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence() 
    at System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate) 
    at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) 
    at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed) 
    at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate) 
    at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) 
    at System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext() 
    at System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext() 
    at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName) 
    at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath) 
    at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig) 
    at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig) 
    at System.Configuration.ClientConfigurationHost.RequireCompleteInit(IInternalConfigRecord record) 
    at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) 
    at System.Configuration.BaseConfigurationRecord.GetSection(String configKey) 
    at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) 
    at System.Configuration.ConfigurationManager.GetSection(String sectionName) 
    at MySql.Data.MySqlClient.MySqlConfiguration..cctor() 
    --- End of inner exception stack trace --- 
    at MySql.Data.MySqlClient.MySqlConfiguration.get_Settings() 
    at MySql.Data.MySqlClient.Replication.ReplicationManager..cctor() 
    --- End of inner exception stack trace --- 
    at MySql.Data.MySqlClient.Replication.ReplicationManager.IsReplicationGroup(String groupName) 
    at MySql.Data.MySqlClient.MySqlConnection.Open() 
    at WarningTextSolution.MyDB.OpenConnection() 

及相关代码:

MySqlConnection con; 
public MyDB() 
    { 
     logger = actionlogger; 
     logger.Log("------ [ STARTING MySQL ] -----"); 
     logger.Log("Attempting to create MySQL database connection"); 
     try 
     { 
      string connectionString = "server=SERVERIP;uid=USERID;pwd=PASSWORD;database=DATABASE;"; 
      con = new MySqlConnection(); 
      con.ConnectionString = connectionString; 
      logger.Log("Connection accepted"); 
     } 
     catch(Exception e) 
     { 
      logger.Log("MySQL exception: " + e); 
      Console.WriteLine("Error occured, please read the log."); 
     } 
     logger.Log("------ [ MySQL STARTED ] -----"); 
    } 

    /// <summary> 
    /// Opens a connection to ecommerce Database 
    /// </summary> 
    /// <returns>True if successful else false</returns> 
    private bool OpenConnection() 
    { 
     try 
     { 
      logger.Log("Attempting to open connection to server"); 
      con.Open(); 
      logger.Log("Connection successfully opened"); 
      return true; 
     } 
     catch (Exception e) 
     { 
      logger.Log("Attempt failed"); 
      logger.Log("MySQL connection error: " + e); 
      Console.WriteLine("MySQL error: " + e); 
      return false; 
     } 
    } 

我试着用搜索引擎这一点,我还没有发现任何回答这个问题。

我试图打开本机代码调试,使SQL Server调试,没有这些帮助。

如果您需要任何更多信息,请不要犹豫,问。

+0

那么,replicatormanager与你的代码有什么关系?你用它做什么? – BugFinder

+0

没有直接。每当我在类MySqlConnection中调用Open()方法时,都会调用它。 – aSnejbjerg

+0

您确定机器/用户可以访问您的数据库吗?我认为,如果不是这种情况,mysql可以抛出TypeInitializationException。 –

看来我是不是对我们的服务器properbly通知(或者我忘了这个细节),用户登录我们的生产服务器上没有同样的权利我的用户帐户对这一结果在MySQL错误我收到。

+0

那么缺少什么权利? – Cerveser

+0

缺少的权限是简单的读/写。 – aSnejbjerg