如果不存在,则在新安装的c#应用程序上创建MySql数据库

时间:2013-03-12 12:42:10

标签: c# mysql deployment

我即将部署我的应用程序并遇到了一些麻烦。

我有app.settings中保存的数据库的连接字符串,需要一种方法来检查程序首次启动时数据库是否存在,如果没有,我需要程序在启动之前创建它该计划。

我假设它将是一个mysql语句来检查db是否存在,如果不是create。但是,我不知道在哪里或如何做到这一点,我可以创建一个空白数据库的mysql转储,其中已经创建了表等,并使用它吗?

我已经在本地存储了mysql dll文件,所以没有问题,它只是在应用程序运行之前创建字符串想要连接的数据库,这样就不会立即出现连接错误。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过运行以下SQL语句来执行此操作:

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = "my_db"

如果结果集中不存在,则返回后可以创建它。

这确实会产生有关MySQL权限的问题,以及您的应用程序是否应具有启用此类检查的用户权限。

根据评论进行修改。

目前尚不清楚您是否创建了连接字符串 - 我假设情况最糟糕,并且它是设置的一部分,因此您的客户可以输入它(如果您确实知道,下面的过程会简化。< / p>

我会将连接字符串传递给MySqlConnectionStringBuilder类的构造函数,这样就可以使用MySqlConnection类轻松连接到数据库。我将使用MySqlConnectionStringBuilder类(服务器,主机,用户等)的新实例中的属性来设置MySqlConnection类。

如果连接不起作用,我会向用户返回信息,他们可以更新连接字符串。

一旦我成功连接到数据库,我就会使用我Database实例的MySqlConnectionStringBuilder属性中的数据库名来构建上面的查询。

如果命令返回NULL,则数据库不存在,然后需要创建,如果数据库确实存在,则该命令将返回数据库的名称。

现在有两条路径:

  1. 它不存在 - 它需要创建,我可能有一个带有create语句的外部SQL文件(可以通过使用-nodata选项通过MySQL转储生成)。我将解析此文件并执行create statements
  2. 确实存在 - 我现在会检查数据库的结构,以确保它在继续安装之前是兼容的。