Laden...

C# auf vorhanden sein von DB prüfen ohne diese zu erstellen?

Erstellt von Limits vor 10 Jahren Letzter Beitrag vor 10 Jahren 5.433 Views
L
Limits Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren
C# auf vorhanden sein von DB prüfen ohne diese zu erstellen?

verwendetes Datenbanksystem: <MySQL>
Mit dem MySQL-Connector / Net

Hey,

wie kann ich überprüfen ob eine Datenbank existiert, allerdings soll diese dabei NICHT erstellt werden.

So sieht das ganze bei mir derzeit aus:

sqlConDatbase.ConnectionString = "SERVER=localhost;" + "UID=root;" +
                                  DATABASE=Kunde; + "PASSWORD=;";
sqlComDatabae.Connection = sqlConDatabase;

try
{
    sqlConDatabaseTest.Open();
        
    sqlComDatabase.CommandText = @"CREATE DATABASE IF NOT EXISTS Kunde DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;";
    sqlComDatabase.ExecuteNonQuery();

catch(Exception ex)
{
    MessageBox.Show(ex.ToString()); 
}
sqlConDatabase.Close();

Edit:

So wäre das dann ja mit der Abfrage, ob die DB erstellt werden soll und ich habe das auch mal mit der "Database" Eigenschaft versucht, also so:

try
{
    sqlConDatabase.Open();
    string database = sqlConDatabase.Database;
    sqlConDatabase.Close();
    MessageBox.Show(database + database.GetType());
    if(database == null || database == "")
    {
        MessageBox.Show("Test");
        if(MessageBox.Show("DB nicht gefunden!n\nMöchten Sie die Datenbank jetzt erstellen?",
                            "Db nicht gefunden!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
        {
            return;
        }
        else
        {
            sqlConDatabaseTest.Open();
            // CommandText zum Erstellen der Datenbank
            sqlComDatabase.CommandText = @"CREATE DATABASE IF NOT EXISTS Telefonbuch DEFAULT CHARACTER SET 
                                            latin1 COLLATE latin1_swedish_ci;";
            sqlComDatabase.ExecuteNonQuery();
        }
    }
    catch(Exception) { }
    sqlConDatabase.Close();
}

Naja, leider funktioniert das ja nicht, weil da die Database mit angegeben ist aber wie geht man da vor? In die Exception kann man das ja auch nicht mit reinschreiben, weil es ja verschiedene Fehler geben kann, also wie realisert man sowas?
Im Netz finde ich leider auch nichts vernünftiges.

Danke schon einmal im voraus

R
317 Beiträge seit 2006
vor 10 Jahren

Hallo,

du kannst die MySQL-Internen Tabellen abfragen, in denen die einzelnen Tabellen und Datenbanken verzeichnet sind. Das könnte dann in etwa so aussehen:


SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'DATABASENAME' AND table_name = 'DATATABLENAME'"

Mit nem ExecuteScalar mit dem oben genannten SQL-Befehl solltest du herausbekommen ob die Datenbank existiert, oder nicht. Zusätzlich kannst du noch prüfen, ob eine Tabelle darin besteht, oder ob die Datenbank leer ist.

Daniel

L
Limits Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Hey, dann muss man aber die Datenbank nicht mit im ConnectionString angeben oder? Ansonsten würde ja auch warscheinlich auch wieder eine Exception auftreten oder?
So sieht das jetzt bei mir aus:

sqlConDatbase.ConnectionString = "SERVER=localhost;" + "UID=root;" +
                                 "PASSWORD=;";
try
{
    sqlConDatbase.Open();
    sqlComDatabae.CommandText = "Select count(*) From information_schema.tables where table_schema = 'telefonbuch'" +
                                "and table_name = 'eintrag'";
    object database = sqlComDatabae.ExecuteScalar();
    sqlConDatbase.Close();
    if(database.== "0")
    {
        // MessageBox.Show("Test");
        if(MessageBox.Show("DB nicht gefunden!\n\nJetzt erstellen?",
                           "DB nicht gefunden!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
        {
            return;
        }
        else
        {
            sqlConDatbase.Open();
            sqlComDatabae.CommandText = @"CREATE DATABASE IF NOT EXISTS Kunde DEFAULT CHARACTER SET 
                                          latin1 COLLATE latin1_swedish_ci;";
            sqlComDatabae.ExecuteNonQuery();

            sqlConDatbase.Close();
    }
}
catch(Exception ex) { MessageBox.Show(ex.ToString()); }

Der Rückgabewert ist ja 0, wenn die DB nicht existiert (und die Tabelle auch) und wenn diese existiert, dann ist er 1 oder liege ich da falsch?

16.834 Beiträge seit 2008
vor 10 Jahren

Probiers doch einfach aus...?

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo Limits,

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'DBName'

hat mir

How to check if mysql database exists

gebracht.

Gruss

Coffeebean