在C#中检查MySQL数据库是否存在

toe95027  于 2022-11-28  发布在  Mysql
关注(0)|答案(2)|浏览(534)

我正在用C#编写一个简单的控制台应用程序,使用顶级语句,我想在开始时检查是否存在数据库。下面是我的代码:

using MySql.Data.MySqlClient;

using (MySqlConnection connection = new MySqlConnection("Server=localhost;Uid=root;Pwd=password;"))
{
    connection.Open();
    if (CheckDatabaseExistence(connection)) Console.WriteLine("Database Exists.");
}

bool CheckDatabaseExistence(MySqlConnection connection)
{
    MySqlCommand myCommand = connection.CreateCommand();
    myCommand.CommandText = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA" +
        "WHERE SCHEMA_NAME LIKE 'database_name';";
    return Convert.ToInt32(myCommand.ExecuteScalar()) == 1;
}

执行此代码后,我得到以下错误消息:
MySql.Data.MySqlClient.MySqlException:'SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“LIKE”sql_store“"第1行”附近使用的正确语法
用于检查数据库是否存在的SQL查询语法来自MySQL Documentation, Section 24.3.22

SELECT SCHEMA_NAME AS `Database`
  FROM INFORMATION_SCHEMA.SCHEMATA
  [WHERE SCHEMA_NAME LIKE 'wild']

我曾尝试将LIKE替换为=,但得到相同的错误。

a6b3iqyw

a6b3iqyw1#

您的命令是SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATAWHERE SCHEMA_NAME LIKE 'database_name';,它清楚地表明您的SCHEMATAWHERE之间应该有一个空格,因此正确的命令是SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME LIKE 'database_name';
另外,请在配置文件中定义连接字符串。
并且您正在针对整数1检查返回值。所以我认为您在这里犯了错误。您需要将其与您的数据库名称进行比较。
有一个简单的命令可以检查相同的SHOW DATABASES LIKE 'database_name';

flvtvl50

flvtvl502#

要使用Console App检查MySQL中是否存在数据库,请尝试以下操作:

建立Console App
VS 2022年

  • 开放VS 2022

  • 单击x1c 0d1x

  • 点击文件

  • 选择新建

  • 选择项目

  • 对于筛选器,请选择:

  • 选择控制台应用程序

  • 单击下一步

  • 输入所需的项目名称(例如:DatabaseMySqlTest)并选择所需的位置。

  • 单击下一步

  • 对于框架,请选择**.NET 6.0(长期支持)**

  • 点击创建
    打开解决方案资源管理器

  • 在VS菜单中,单击View

  • 选取方案总管
    打开属性窗口

  • 在VS菜单中,单击View

  • 选择属性窗口
    安装/下载NuGet软件包MySql.Data

  • 在解决方案资源管理器中,展开〈project name〉

  • 右键单击〈项目名称〉并选择管理NuGet包...

  • 点击浏览选项卡

  • 在搜索框中,键入:我的SQL数据库

  • 滚动到顶部,然后选择MySql.Data

  • 选择所需版本(例如:8.0.31),然后单击安装

  • 如果出现提示 *Visual Studio即将对此解决方案进行更改。单击“确定”继续进行下面列出的更改... *,请单击确定

  • 如果出现 * 许可证接受 * 提示,请单击相应的按钮。
    选项1(应用程序配置文件)
    Application Configuration File添加到项目中(名称:应用程序配置)

  • 在VS菜单中,单击项目

  • 选择添加新项目...

  • 选择应用程序配置文件(名称:应用程序配置)

  • 单击添加
    应用程序配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="MySqlConnectionAdmin" connectionString="Server=localhost;Database=information_schema;Uid=test;Pwd=mySuperSecretPassword;" />
    </connectionStrings>
</configuration>

添加类(名称:帮助程序MySql.cs)

  • 在VS菜单中,单击项目
  • 选择添加类...(名称:帮助程序MySql.cs)
    帮助程序MySql.cs
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Diagnostics;

namespace DatabaseMySqlTest
{
    public class HelperMySql
    {
        public static bool CheckDatabaseExistence(string dbName)
        {
            //get connection string
            string connectionStrAdmin = ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location).ConnectionStrings.ConnectionStrings["MySqlConnectionAdmin"].ConnectionString;

            using (MySqlConnection conn = new MySqlConnection(connectionStrAdmin))
            {
                //open
                conn.Open();

                using (MySqlCommand cmd = new MySqlCommand("SELECT COUNT(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME LIKE @dbName", conn))
                {
                    cmd.Parameters.Add("@dbName", MySqlDbType.VarChar).Value = dbName;

                    int count = Convert.ToInt32(cmd.ExecuteScalar());
                    Debug.WriteLine($"count: {count}");

                    if (count > 0)
                        return true;
                }
            }

            return false;
        }
    }
}

选项2
JavaScript JSON Configuration File添加到项目中(名称:应用程序设置. json)

  • 在VS菜单中,单击项目
  • 选择添加新项目...
  • 选择JavaScript JSON配置文件(名称:应用程序设置. json)
  • 单击添加
    应用程序设置.json
{
  "ConnectionStrings": {
    "MySqlConnectionAdmin": "Server=localhost;Database=information_schema;Uid=test;Pwd=mySuperSecretPassword;"
  }
}

设置文件属性

  • 在解决方案资源管理器中,选择appsettings.json
  • 在“属性”窗口中,对于“复制到输出目录”,请选择“始终复制
    安装/下载NuGet软件包Microsoft.Extensions.Configuration.Json
  • 在解决方案资源管理器中,展开〈project name〉
  • 右键单击〈项目名称〉并选择管理NuGet包...
  • 点击浏览选项卡
  • 在搜索框中,键入:Microsoft.扩展.配置.Json
  • 滚动到顶部,然后选择Microsoft.Extensions.Configuration.json
  • 选择所需版本(例如:7.0.0),然后单击安装
  • 如果出现提示 *Visual Studio即将对此解决方案进行更改。单击“确定”继续进行下面列出的更改... *,请单击确定
    添加类(名称:帮助程序MySql.cs)
  • 在VS菜单中,单击项目
  • 选择添加类...(名称:帮助程序MySql.cs)
    帮助程序MySql.cs
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Diagnostics;
using Microsoft.Extensions.Configuration;

namespace DatabaseMySqlTest
{
    public class HelperMySql
    {
        public static bool CheckDatabaseExistence(string dbName)
        {
            //create new instance
            Microsoft.Extensions.Configuration.ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.SetBasePath(Directory.GetCurrentDirectory());
            builder.AddJsonFile("appsettings.json");

            IConfigurationRoot configuration = builder.Build();
            string? connectionStrAdmin = configuration.GetConnectionString("MySqlConnectionAdmin");
            System.Diagnostics.Debug.WriteLine($"connectionStrAdmin: {connectionStrAdmin}");

            using (MySqlConnection conn = new MySqlConnection(connectionStrAdmin))
            {
                //open
                conn.Open();

                using (MySqlCommand cmd = new MySqlCommand("SELECT COUNT(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME LIKE @dbName", conn))
                {
                    cmd.Parameters.Add("@dbName", MySqlDbType.VarChar).Value = dbName;

                    int count = Convert.ToInt32(cmd.ExecuteScalar());
                    Debug.WriteLine($"count: {count}");

                    if (count > 0)
                        return true;
                }

            }

            return false;
        }
    }
}

程序.cs

using System;

namespace DatabaseMySqlTest // Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //ToDo: change to desired database name
            string dbName = "testdb";
            Console.WriteLine($"{dbName} exists? {HelperMySql.CheckDatabaseExistence(dbName)}");
        }
    }
}

资源

相关问题