• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

dpeneireiro

Verificar se uma base de dados existe.

8 mensagens neste tópico

Olá pessoal, eu estou aqui às voltas com um problema.

Tenho um programinha que verifica se uma base de dados existe, e se não existir cria-a. Criá-la é fácil, o problema é verificar se a bd existe antes de a criar para não me aparecer uma excepção.

Estou a usar o c# com comandos em sql2005 express. Para verificar se existe uma dada tabela já vi que é fácil. Não descobri foi nenhum comando para confirmar a existência de uma bd.

Será que tenho que apanhar a excepção que me aparece ao criar uma bd já existente ou existe uma maneira mais "formal" de resolver o assunto?

O código que estou a usar é o seguinte:

private void btnCriarBaseDados_Click(object sender, EventArgs e)

        {

            String str;

            SqlConnection myConn = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master");

            if (!System.IO.Directory.Exists("C:\\BD"))

            {

                System.IO.Directory.CreateDirectory("C:\\BD");

            }

            //str = "CREATE DATABASE BD"

            str = "CREATE DATABASE BD ON PRIMARY " +

                "(NAME = BD_Dados, " +

                "FILENAME = 'C:\\BD\\DadosBD.mdf', " +

                "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +

                "LOG ON (NAME = BD_Logo, " +

                "FILENAME = 'C:\\BD\\LogoBD.ldf', " +

                "SIZE = 1MB, " +

                "MAXSIZE = 5MB, " +

                "FILEGROWTH = 10%)";

            SqlCommand myCommand = new SqlCommand(str, myConn);

            try

            {

                myConn.Open();

                myCommand.ExecuteNonQuery();

                MessageBox.Show("Base de Dados BD criada com sucesso", "Criar Base de dados", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            catch (System.Exception ex)

            {

                MessageBox.Show(ex.ToString(), "Criar Base de dados", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

            finally

            {

                if (myConn.State == ConnectionState.Open)

                {

                    myConn.Close();

                }

            }

        }

    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer um drop a bd antes de a criar ou veririficar se o ficheiro existe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

usa a seguinte query:

str = "IF EXISTS(SELECT * FROM sysdatabases WHERE name='BD_Dados') " + 
        "DROP DATABASE 'BD_Dados' GO " +  //isto verifica se a bd existe, e se existir dropa-a
        "CREATE DATABASE BD ON PRIMARY " +
                "(NAME = BD_Dados, " +
                "FILENAME = 'C:\\BD\\DadosBD.mdf', " +
                "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
                "LOG ON (NAME = BD_Logo, " +
                "FILENAME = 'C:\\BD\\LogoBD.ldf', " +
                "SIZE = 1MB, " +
                "MAXSIZE = 5MB, " +
                "FILEGROWTH = 10%)"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia de ver se o ficheiro existe é boa, não sei é se isso pode ser sempre feito (se a bd estiver noutra máquina da rede???).

O código do if exists parecia-me bem, mas dá um erro System.Data.SqlClient.SqlException: Line1: Incorrect sintax near 'BD_Dados'. ......

Além disso, se existisse um

IF NOT EXITS

CREATE...

Era mesmo o que pretendia. Já andei a pesquisar e acho que existe qq coisa do género mas dá-me o mesmo querro que o IF EXISTS

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, é o que dá meter código sem experimentar... tenta trocar DROP DATABASE 'BD_Dados' por DROP DATABASE BD_Dados (sem as plicas).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá.

Com a ajuda de um amigo e de bater com a cabeça um pouco, já consigo ver se uma base de dados existe no c# com o seguinte código:

str="SELECT count(*) FROM sysdatabases WHERE name='BD'";       

            SqlCommand myCommand = new SqlCommand(str, myConn);

            bool exist;

            try

            {

                myConn.Open();

                exist = Convert.ToBoolean(myCommand.ExecuteScalar());

Agora, o comando que o Saco me sugeriu também me iria ser útil para criar uma Base de Dados nova mesmo que já existisse uma criada, do género começar uma nova BD.

O que acontece é que já experimentei de várias maneiras e dá-me sempre o mesmo erro que reportei acima, mesmo com a alteração que o saco sugeriu...

Alguma ideia?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

já descobri o que estava mal, ou pelo menos o que dava erro, no comando do Saco.

Colocando assim já funciona bem:

str = "IF EXISTS(SELECT * FROM sysdatabases WHERE name='BD') " +                 

              "DROP DATABASE BD " +  //isto verifica se a bd existe, e se existir dropa-a       

        "CREATE DATABASE BD ON PRIMARY " +

        "(NAME = BD_Dados, " +

        "FILENAME = 'C:\\BD\\DadosBD.mdf', " +

        "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +

          "LOG ON (NAME = BD_Logo, " +

          "FILENAME = 'C:\\BD\\LogoBD.ldf', " +

              "SIZE = 1MB, " +

            "MAXSIZE = 5MB, " +

            "FILEGROWTH = 10%)";

                 

Foi só tirar o GO e acertar alguns nomes. Se o que fiz não estiver 100% bem, elucidem-me.

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora