首页 > 解决方案 > 除非 Mysql 数据库处于联机状态,否则 C# 程序不会启动

问题描述

即使 Mysql 处于脱机状态,我的程序也会启动,它会打开但会显示程序未连接到数据库,这正是我想要的。即使数据库处于脱机状态,我也希望它启动并且只是给出一个未连接的指示符 我设置了一个这样的连接指示符:

public void connStatus()
        {
            MySqlConnection myConn = new MySqlConnection("SERVER = localhost; user id = root; password =; database = mpdb");
            try
            {
                myConn.Open();
                dbconsign.Visible = true;
                dbnotconsign.Visible = false;
            }
            catch (Exception ex)
            {
                MetroMessageBox.Show(this, ex.Message , "NOTIFICATION", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                dbconsign.Visible = false;
                dbnotconsign.Visible = true;
            }
            finally
            {
                if (myConn.State == ConnectionState.Open)
                {
                    myConn.Close();
                }
            }
        }

(我知道我上面的代码不是检查服务器连接的最佳代码,但我只需要一些东西来指示数据库是在线还是离线,我是编程新手,我还不太擅长。)

现在,在我添加了一些 dll 并继续我的小程序之后,该程序只有在 Mysql 在线时才会启动。它根本不会启动,并会给出如下消息:

    Could not find schema information for the element 'setting'.
    Could not find schema information for the element 'value'.  

所以我发现 App.Config 出了点问题,问题是我对 XML 知之甚少,而且我不明白我的项目中发生了什么。有人可以告诉我为什么会这样吗?我该如何解决?任何建议和更正都非常感谢。

这是我项目的 App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <section name="cpsfmV2._0.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <userSettings>
        <cpsfmV2._0.Properties.Settings>
            <setting name="CurrentDate" serializeAs="String">
                <value />
            </setting>
        </cpsfmV2._0.Properties.Settings>
    </userSettings>
<system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <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.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.9.12.0" newVersion="6.9.12.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

标签: c#mysqlxml

解决方案


我很高兴我今天学到了一些新东西,感谢 google 和 stackoverflow,我今天才学会了正确的调试。我尝试在谷歌上搜索与 NullReference Exception 相关的内容,我从这篇文章中找到了一个非常有用的指南,虽然不完全是答案,但这篇文章中的人用易于理解的术语对像我这样的新手进行了解释。 什么是 NullReferenceException,我该如何解决?

虽然错误说:

'System.NullReferenceException' occurred in MetroFramework.dll Additional information: Object reference not set to an instance of an object.

这让我作为一个初学者感到困惑,我在上面链接的帖子中读到你需要检查 InnerException,我做了这件事并导致我犯了另一个错误,上面写着

System.TypeInitializationException

事实证明,这一切都是因为我从另一个类声明了一个变量。

像我这样的新手可能会遇到同样的问题,所以我会分享对我有帮助的帖子。 如何解决 System.TypeInitializationException 是 vb.net 中未处理的异常? 字段 xxx 从未分配给,并且始终具有其默认值 null

我的问题的最终解决方案是我变成了这个:

private AuditTrail audittrail = new AuditTrail();
private void loginbtn_Click(object sender, EventArgs e)
{
            //some code here
            audittrail.RecordLogin();
}

进入这个:

private AuditTrail audittrail;
private void loginbtn_Click(object sender, EventArgs e)
{
            audittrail = new AuditTrail();
            //some code here
            audittrail.RecordLogin();
}

现在它的工作:) 感谢上面的有用帖子。


推荐阅读