none
Identificando versão de banco ??? RRS feed

  • Pergunta

  • Boa tarde pessoal, eu queria saber se existe uma forma ou um rotina talvez para que o meu programa identifique se existe alguma instalação de um banco, e qual seria essa versão, de uma maneira programática digamos assim???

     

    terça-feira, 30 de março de 2010 17:16

Respostas

  • Malz... deve ter sido sono na hora

     

                if (System.Diagnostics.Process.GetProcessesByName("sqlservr") != null) {
                    try {
                        var mainModule = System.Diagnostics.Process.GetProcessesByName("sqlservr") ;
                        Console.WriteLine("- {0} (ver. {1})", mainModule.ModuleName, mainModule.FileVersionInfo);
                    } catch {
                        Console.WriteLine("- Microsoft SQL Server");
                    }
                }


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    • Marcado como Resposta Bernoulthy sexta-feira, 20 de julho de 2012 01:24
    quinta-feira, 8 de abril de 2010 00:18
    Moderador

Todas as Respostas

  • Você quer checar se há um banco no computador e dizer a versão do mesmo, ou você sabe que tem um banco só quer saber a versão.

    para saber a versão do SQL SERVER você usa o seguinte comando: select @@version

     

     

     


    Elielson de Andrade elielson( a )gd.com.br www.despcompany.com www.emyface.com
    terça-feira, 30 de março de 2010 17:56
  • Quero saber se tem um banco instalado caso sim, qual banco(independente qual o fabricante) e versão a versão. Na verdade presciso fazer uma rotina em c# para verificar isso, pois pretendo dispara-la antes de iniciar a instalação de uma outra aplicação.
    terça-feira, 30 de março de 2010 19:18
  • bom para você fazer isso você vai ter que varrer o registro da máquina, ou varrer o C:\Arquivos de Programas e encontrar diretórios relacionados aos diversos bancos existentes, não sei exatamente quais arquivos procurar para cada banco que existe, isso vai levar um tempão na hora de iniciar sua aplicação,

    Sendo assim eu acho que você vai levar menos tempo para você colocar um banco de dados qualquer como pré-requisito na sua aplicação.


    Elielson de Andrade elielson( a )gd.com.br www.despcompany.com www.emyface.com
    terça-feira, 30 de março de 2010 20:17
  • É então, estou mais ou menos na mesma linha de raciocínio, será se não tem tipo um lugar especifico que quando instalamos por exemplo um sql server ou oracle ele armazena no registro do windows por exemplo?
    Na questão do pré-requisito, o banco em questão é Oracle, para mim seria interessante poder executar uma rotina para verificar se já existe alguma instalação ou não, caso sim qual a versão. É que estou pensando em algo um pouco genérico, para que seja exibido qualquer SGBD idependente de fabricante.
    outra dúvida, como poderia fazer para varrer o regedit?

     

     

     

    terça-feira, 30 de março de 2010 21:10
  • Aqui tem um exemplo de como fazer isto. Para voce listar os server voce vai precisar de importar as dll de cada server para os poder detetar. cada server sem a sua extensao e usa dll propria.

    http://devpinoy.org/blogs/keithrull/archive/2006/06/08/Programmatically-List-All-SQL-Servers-And-Their-Databases-Using-SMO-.aspx


    Just Be Humble Malange!
    terça-feira, 30 de março de 2010 21:27
    Moderador
  • Eu estava pensando também se não tem algum tipo de serviço do proprio windows que tenha informações sobre se existe SGBD instalado, se sim quantos,  o tipo de cada SGB instalado, e qual versão dos mesmos

    terça-feira, 30 de março de 2010 21:33
  • Eu estava pensando também se não tem algum tipo de serviço do proprio windows que tenha informações sobre se existe SGBD instalado, se sim quantos,  o tipo de cada SGB instalado, e qual versão dos mesmos


    eu sei que o .net 3.5 consegue dectectar MySql e Oracle...Se nao estou errado...

     


    Just Be Humble Malange!
    terça-feira, 30 de março de 2010 21:39
    Moderador
  • ele exibe a versão tb?

    ao chegar em casa vou entrar no link q vc postou pois onde estou é bloqueado, ai lhe digo se consegui ou não.

    terça-feira, 30 de março de 2010 21:42
  • Eu estava pensando também se não tem algum tipo de serviço do proprio windows que tenha informações sobre se existe SGBD instalado, se sim quantos,  o tipo de cada SGB instalado, e qual versão dos mesmos


    http://imasters.uol.com.br/artigo/16166/csharp/c_conexao_com_os_principais_sgbd_atuais_via_ado_net/
    Just Be Humble Malange!
    terça-feira, 30 de março de 2010 21:43
    Moderador
  • nesse link não vi um modo de poder verificar quais bancos estão instalados

     

    terça-feira, 30 de março de 2010 21:49
  • Da uma olhada nas propriedade do OleDbConnection...

    por exemplo:

    var

     

    connection = new System.Data.OleDb.OleDbConnection();

     

    var version = connection.ServerVersion;

    tem a Provider que vc pode usar para identificar o SGBD


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    terça-feira, 30 de março de 2010 21:50
    Moderador
  • Nesse exemplo, seria necessário uma string de conexão, e a intenção é saber se existe algum banco rodando na máquina.

    sera se com o namespace  System.Data.ProviderBase não haveria um jeito de eu descobrir isso?

    quinta-feira, 1 de abril de 2010 14:44
  • Olha... a unica forma de descobrir o que esta rodando na maquina é com o System.Diagnostics.Process, porque esperar q o .NET venha com um assemblie que indentifique todas as chamadas dos sistemas de terceiros é dificil.... para isso que tem o OleDb e so mesmo

    o que vc pode fazer é gerar um xml com as difiniçoes dos SGBDs por exemplo:

    <Server>
      <Item Process="sqlservr.exe" Name="Microsoft SQL Server" DefaultConnectionString="Data Source=(local);Initial Catalog=Master;Integrated Security=True"/>
    </Server>

    usar o System.Diagnostics.Process para ver se o processo "sqlservr.exe" esta rodando na maquina, pega a connectionstring padrao para acessar via OleDB e da connecao Ole vc pode tirar os detalhes do servidor


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    quinta-feira, 1 de abril de 2010 21:44
    Moderador
  • e como eu poderia fazer isso no codigo? a aplicação é windows forms.
    quinta-feira, 1 de abril de 2010 22:35
  • using System;
    using System.Diagnostics;
    
    namespace ServerWeaver {
        class Program {
            static void Main(string[] args) {
                Console.WriteLine("Localizando Servidores:");
    
                if (System.Diagnostics.Process.GetProcessesByName("sqlservr") != null) {
                    try {
                        var mainModule = Process.GetCurrentProcess().MainModule;
                        Console.WriteLine("- {0} (ver. {1})", mainModule.ModuleName, mainModule.FileVersionInfo);
                    } catch {
                        Console.WriteLine("- Microsoft SQL Server");
                    }
                }
    
                if (System.Diagnostics.Process.GetProcessesByName("mysqld") != null) {
                    try {
                        var mainModule = Process.GetCurrentProcess().MainModule;
                        Console.WriteLine("- {0} (ver. {1})", mainModule.ModuleName, mainModule.FileVersionInfo);
                    } catch {
                        Console.WriteLine("- MySQL");
                    }                
                }
            }
        }
    }
    

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    sexta-feira, 2 de abril de 2010 14:29
    Moderador
  • Estou fazendo esse exemplo em win forms, e quando executo a aplicação, me retorna as iinformações do visual studio e não as do notepad

    quarta-feira, 7 de abril de 2010 12:37
  • Eh so adaptar o fonte... ao inves do Console.Write vc usa o metodo que preferir
    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    quarta-feira, 7 de abril de 2010 14:48
    Moderador
  • consegui adaptar, mas na hora que executo, por exemplo, ele pega as informações do visual studio, ao invés de pegar as informações do processo, no caso do exemplo, o notepad.

    quarta-feira, 7 de abril de 2010 17:10
  • Malz... deve ter sido sono na hora

     

                if (System.Diagnostics.Process.GetProcessesByName("sqlservr") != null) {
                    try {
                        var mainModule = System.Diagnostics.Process.GetProcessesByName("sqlservr") ;
                        Console.WriteLine("- {0} (ver. {1})", mainModule.ModuleName, mainModule.FileVersionInfo);
                    } catch {
                        Console.WriteLine("- Microsoft SQL Server");
                    }
                }


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    • Marcado como Resposta Bernoulthy sexta-feira, 20 de julho de 2012 01:24
    quinta-feira, 8 de abril de 2010 00:18
    Moderador