簡體   English   中英

C#查詢MySQL數據庫是否存在

[英]Checking in C# whether MySQL database exists

我正在使用頂級語句在 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 服務器版本對應的手冊,了解在第 1 行的“LIKE 'sql_store''附近使用的正確語法”

用於檢查數據庫是否存在的 SQL 查詢語法來自MySQL 文檔,第 24.3.22 節

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

我試過用=替換LIKE ,但我得到了同樣的錯誤。

你的命令是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';

另外,請在配置文件中定義您的連接字符串。

而且您正在根據 integer 1 檢查返回值。所以我認為您在這里犯了錯誤。 您需要將它與您的數據庫名稱進行比較。

有一個簡單的命令來檢查相同的SHOW DATABASES LIKE 'database_name';

要使用Console App檢查 MySQL 中是否存在數據庫,請嘗試以下操作:

創建Console App

對比 2022

  • 開放VS 2022
  • 點擊在此處輸入圖像描述
  • 點擊文件
  • Select
  • Select項目
  • 對於過濾器,選擇: 在此處輸入圖像描述
  • Select控制台應用程序
  • 單擊下一步
  • 輸入所需的項目名稱(例如:DatabaseMySqlTest)和 select 所需的位置。
  • 單擊下一步
  • 對於框架,select .NET 6.0(長期支持)
  • 點擊創建

打開解決方案資源管理器

  • 在 VS 菜單中,單擊查看
  • Select解決方案資源管理器

打開屬性 Window

  • 在 VS 菜單中,單擊查看
  • Select屬性 Window

安裝/下載 NuGet package : MySql.Data

  • 在解決方案資源管理器中,展開 <project name>
  • 右鍵單擊 <project name> 和 select Manage NuGet Packages...
  • 單擊瀏覽選項卡
  • 在搜索框中,鍵入: MySql.Data
  • 滾動到頂部,和 select MySql.Data
  • Select 所需版本(例如:8.0.31),然后單擊安裝
  • 如果提示Visual Studio 即將更改此解決方案。 單擊“確定”繼續下面列出的更改... ,單擊“確定
  • 如果出現許可接受提示,請單擊相應的按鈕。

選項 1 (應用程序配置文件)

Application Configuration File添加到您的項目(名稱:App.config)

  • 在 VS 菜單中,單擊項目
  • Select添加新項目...
  • Select應用配置文件(名稱:App.config)
  • 點擊添加

應用程序配置

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

添加一個class (名稱:HelperMySql.cs)

  • 在 VS 菜單中,單擊項目
  • Select添加Class... (名稱:HelperMySql.cs)

HelperMySql.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添加到您的項目(名稱:appsettings.json)

  • 在 VS 菜單中,單擊項目
  • Select添加新項目...
  • Select JavaScript JSON 配置文件(名稱:appsettings.json)
  • 點擊添加

應用設置.json

{
  "ConnectionStrings": {
    "MySqlConnectionAdmin": "Server=localhost;Database=information_schema;Uid=test;Pwd=mySuperSecretPassword;"
  }
}

設置文件屬性

  • 在解決方案資源管理器中,select appsettings.json
  • 在屬性 Window 中,用於復制到 Output 目錄select始終復制

安裝/下載 NuGet package : Microsoft.Extensions.Configuration.Json

  • 在解決方案資源管理器中,展開 <project name>
  • 右鍵單擊 <project name> 和 select Manage NuGet Packages...
  • 單擊瀏覽選項卡
  • 在搜索框中,鍵入: Microsoft.Extensions.Configuration.Json
  • 滾動到頂部,select Microsoft.Extensions.Configuration.Json
  • Select 所需版本(例如:7.0.0),然后單擊安裝
  • 如果提示Visual Studio 即將更改此解決方案。 單擊“確定”繼續下面列出的更改... ,單擊“確定

添加一個class (名稱:HelperMySql.cs)

  • 在 VS 菜單中,單擊項目
  • Select添加Class... (名稱:HelperMySql.cs)

HelperMySql.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)}");
        }
    }
}

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM