[英]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 :
打開解決方案資源管理器:
打開屬性 Window
安裝/下載 NuGet package : MySql.Data
選項 1 (應用程序配置文件)
將Application Configuration File
添加到您的項目(名稱: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)
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)
應用設置.json :
{
"ConnectionStrings": {
"MySqlConnectionAdmin": "Server=localhost;Database=information_schema;Uid=test;Pwd=mySuperSecretPassword;"
}
}
設置文件屬性:
安裝/下載 NuGet package : Microsoft.Extensions.Configuration.Json
添加一個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.