locked
String de conexão Sql server compact 3.5 RRS feed

  • Pergunta

  • Boa tarde pessoal, bom, estou desenvolvendo uma pequena aplicação desktop para testes utilizando visual studio 2010 com C#. Criei um banco de dados Sql Server Compact e salvei em uma pasta qualquer, usei o Sql management Studio 2008. Agora estou tendo problemas para abrir uma conexão com o banco de dados, estou usando a seguinte String de conexão:

              
                SqlConnection conexao = new SqlConnection(@"Data Source=D:\PROGRAMAS\Projetos C#\MyDatabase#1.sdf;Persist Security Info=True");
                conexao.Open();

     


    OBS: Se crio uma conexão utilizando o wizard funciona corretamente, o problema é com o código.

    Já tentei de várias maneiras, com password ou sem não conecta. Apresenta uma Sql exceção. Não entendo, pois já pesquisei no fórum e na net por diversos dias, encontrei várias coisas parecidas mais nada igual. Se alguém já passou por este problema por favor me ajude.

    sábado, 10 de julho de 2010 19:07

Respostas

  • O meu problema era bem parecido e descobri que o erro era de importação da DLL do SERVERCE.

    No meu caso o problema era:

    Não encontrava a biblioteca para fazer referencia "System.Data.SqlServerCe"

    e então instalei no meu VS2010 SP1 a seguinte ferramenta:

    "Microsoft SQL Server Compact 4.0"

    Aí você reinicia o app, e referencia o SqlServerCe.

    Não sei se pode te ajudar, mas o meu problema era esse.

    quarta-feira, 9 de maio de 2012 13:53

Todas as Respostas

  • Diego,

    Da uma olhada neste link do site connectionstrings

    http://www.connectionstrings.com/sql-server-2005-ce

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    • Sugerido como Resposta Nakane sábado, 17 de julho de 2010 12:35
    segunda-feira, 12 de julho de 2010 11:01
  • Diego,

    A sugestão do Marcelo é o melhor caminho.

    Mas gostaria de saber qual é a exceção que o SQL Server esta apresentando?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    terça-feira, 13 de julho de 2010 00:14
    Moderador
  • Então,

    eu dei uma olhada neste site que vcs indicaram, pelo que entendi os exemplos são para conexões com dispositivos móveis, porém, é muito parecido com a String de conexão no desktop. Já tentei de diversas formas, mas sem sucesso, acredito que seja realmente algum problema com a String. Quando eu executo o aplicativo o Form não aparece na hora, ele trava durante uns 10 segundos e em seguida mostra a seguinte mensagem via MessageBox.Show caso ocorresse uma SqlException:

    System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error ocorred while establishing a connection to SQL Server. The server has not found or not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network interfaces, error: 26 - Error Locating Server/Instance Especified) ...

    Obrigado pela atenção pessoal, se tiverem mas alguma sugestão estarei aguardando.

    • Marcado como Resposta Diego Brito quinta-feira, 15 de julho de 2010 01:59
    • Não Marcado como Resposta Diego Brito quinta-feira, 15 de julho de 2010 01:59
    quinta-feira, 15 de julho de 2010 01:58
  • Diego,

    Esta instância SQL Server esta liberada para ser acessada remotamente?

    O Serviço SQL Browser esta rodando?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    sexta-feira, 16 de julho de 2010 00:34
    Moderador
  • Boa noite Junior,

    O serviço SQL Browser está ativado e acredito que está funcionando, pois consegui criar um banco de dados e conectá-lo usando um objeto de conexão do tipo System.Data.SqlClient e autenticação windows e tudo correu bem. Sobre esta questão de liberar a instância remotamente ainda não sei dizer, isso seria em um ambiente de rede?

    Onde estou tendo muita dificuldade é em abrir uma conexão com um banco de dados que criei (arquivo.sdf), usando o SQL Server Management Studio 2008, ele me mostra duas opções: Database Engine (testei e obtive sucesso) ou SQL Server Compact que geralmente é usado em dispositivos móveis ou em aplicações desktop monousuário, estou tendo dificuldade nesse último. Eu crio o database, uma tabela com algumas colunas e salvo. Na hora de abrir a conexão é que acontece o erro.

    O "arquivo.sdf" foi criado usando as seguintes configurações: Autenticação SQL (só me da esta opção) e password (obrigatório). Estou utilizando o mesmo objeto (System.Data.SqlClient) para este tipo de banco de dados. O último teste que fiz foi com esta String de conexão:

    ...

     SqlConnection sqlConn = new SqlConnection(@"Data Source= D:\PROGRAMAS\Teste\MyDatabase#1.sdf;Password=xxxxxxxx");

                try
                {
                    sqlConn.Open();
                    MessageBox.Show("Sucesso");
                }
                catch (SqlException teste)
                {
                    MessageBox.Show("A conexão falhou!" + teste);
                }

    ...

    sábado, 17 de julho de 2010 01:58
  • Diego,

    Olha, você conseguiu criar o banco, tables e inserir dados sobre SQL Server Compact Edition, mas quando vai tentar carregar este banco recebe a mensagem de erro!!!

    O serviço MSSQLServer esta rodando?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    sábado, 17 de julho de 2010 02:06
    Moderador
  • Junior,

    Entrei no SQL Configuration Manager e verifiquei SQL Server services, está rodando o SQL Server e SQL Browser.

    Pelo que andei pesquisando este tipo de banco de dados SQL Server Compact não funciona como serviço, e sim como se fosse um bando de dados Access. Você saberia me dizer se essa informação é verdadeira?

     

    sábado, 17 de julho de 2010 02:30
  • Brito,

    É isso mesmo, os bancos de dados criados no Compact Edition funciona de forma similar ao Access, sendo um único arquivo(.sdf)!!!

    Como você esta conseguindo se conectar ao SQL Server através do Management Studio, podemos identificar que o SQL Server esta funcionando perfeitamente, o problema esta na configuração de conexão que você esta tentando fazer.

    O banco esta criado normalmente, e você esta tentando de dentro da sua aplicação fazer a conexão e utilizar as tabelas dentro deste banco!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    • Sugerido como Resposta Nakane sábado, 17 de julho de 2010 12:35
    sábado, 17 de julho de 2010 02:34
    Moderador
  • Junior,

    É isso mesmo. Vou pesquisar outra String de conexão. Obrigado pela ajuda e se eu conseguir aviso. Até mais.

    sábado, 17 de julho de 2010 02:57
  • Diego,

    Como você está utilizando o SQL CE, no lugar do objeto SqlConnection, você deve utilizar o SqlCeConnection.

    Dê uma olhada aqui: http://msdn.microsoft.com/en-us/library/ms174038.aspx

    Espero ter ajudado

    segunda-feira, 19 de julho de 2010 18:41
  • Diego,

    A sugestão do Newton com certeza é a sua solução.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    segunda-feira, 19 de julho de 2010 23:42
    Moderador
  • Newton,

    Dei uma olhada no link. Tentei adicionar o namespace System.Data.SqlServerCe no meu projeto mas por algum motivo não consegui. Estou usando Windows 7 com Visual Studio 2010 que por default instala o .NETFramework 4.0, tentei na minha VM do Windows xp SP3 que tem o Visual Studio 2008 com .NETFramework 3.5 e também não reconheceu esse namespace.

    Obrigado pela dica e vou continuar pesquisando.

    terça-feira, 20 de julho de 2010 03:21
  • Newton,

    O seu projeto conseguiu reconhecer este namespace?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    terça-feira, 20 de julho de 2010 19:27
    Moderador
  • Ola Diego, estou com o mesmo problema...

    Vc consegui resolver? Poderia me ajudar?

    t+

     

    quarta-feira, 4 de agosto de 2010 20:22
  • Ola senhores,

    O objeto a ser utilizado para conexao DEVE ser o SqlCeConnection, bem como o SqlCeCommand e etc

    Abaixo, um exemplo de utilização em conjunto com o app.config:

    na aplicação:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Data.SqlServerCe;
    
    namespace WindowsFormsApplication2
    {
      public class CamadaAcessoDados : IDisposable
      {
        private SqlCeConnection conexao = null;
    
        public CamadaAcessoDados()
        {
          conexao = new SqlCeConnection(ConfigurationManager.ConnectionStrings["WindowsFormsApplication2.Properties.Settings.LafaDBConnectionString"].ConnectionString);
          conexao.Open();
        }
    
        public void RegistrarCompactacao(string pOriginal, string pNovo, long pTamanhoOriginal, long pTamanhoNovo, string pTipo)
        {
          SqlCeCommand oCommand = new SqlCeCommand("INSERT Compactacao VALUES (@Data,@Original,@Novo,@TamanhoOriginal,@TamanhoFinal,@Tipo", conexao);
          oCommand.Parameters.Add(new SqlCeParameter("@Data", DateTime.Now));
          oCommand.Parameters.Add(new SqlCeParameter("@Original", pOriginal));
          oCommand.Parameters.Add(new SqlCeParameter("@Novo", pNovo));
          oCommand.Parameters.Add(new SqlCeParameter("@TamanhoOriginal", pTamanhoOriginal));
          oCommand.Parameters.Add(new SqlCeParameter("@TamanhoNovo", pTamanhoNovo));
          oCommand.Parameters.Add(new SqlCeParameter("@Tipo", pTipo));
    
          //executa o INSERT
          oCommand.ExecuteNonQuery();
        }
    
        public void RegistrarDescompactacao(string pOriginal, string pNovo, long pTamanhoOriginal, long pTamanhoNovo, string pTipo)
        {
          SqlCeCommand oCommand = new SqlCeCommand("INSERT Descompactacao VALUES (@Data,@Original,@Novo,@TamanhoOriginal,@TamanhoFinal,@Tipo", conexao);
          oCommand.Parameters.Add(new SqlCeParameter("@Data", DateTime.Now));
          oCommand.Parameters.Add(new SqlCeParameter("@Original", pOriginal));
          oCommand.Parameters.Add(new SqlCeParameter("@Novo", pNovo));
          oCommand.Parameters.Add(new SqlCeParameter("@TamanhoOriginal", pTamanhoOriginal));
          oCommand.Parameters.Add(new SqlCeParameter("@TamanhoNovo", pTamanhoNovo));
          oCommand.Parameters.Add(new SqlCeParameter("@Tipo", pTipo));
    
          //executa o INSERT
          oCommand.ExecuteNonQuery();
        }
    
        public void Dispose()
        {
          conexao.Dispose();
        }
    
      }
    }
    

    No web.config

    <?xml version="1.0"?>
    <configuration>
     <configSections>
     </configSections>
     <connectionStrings>
      <add name="WindowsFormsApplication2.Properties.Settings.LafaDBConnectionString"
        connectionString="Data Source=|DataDirectory|\LafaDB.sdf"
        providerName="Microsoft.SqlServerCe.Client.3.5" />
     </connectionStrings>
     <startup>
      <supportedRuntime version="v2.0.50727"/>
     </startup>
    </configuration>
    
    

    Espero que tenha ajudado, se for útil, por favor marquem como resposta!

    ate mais


    Tornar o simples complicado é facil, tornar o complicado simples é criatividade, vontade e conhecimento
    sábado, 27 de novembro de 2010 12:33
  • DET1,

    Você testou o exemplo postado pelo Lázaro?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    sábado, 27 de novembro de 2010 23:16
    Moderador
  • Não...deixei de lado este problema....tive acesso ao sql na minha maquina....
    quarta-feira, 1 de dezembro de 2010 15:57
  • O meu problema era bem parecido e descobri que o erro era de importação da DLL do SERVERCE.

    No meu caso o problema era:

    Não encontrava a biblioteca para fazer referencia "System.Data.SqlServerCe"

    e então instalei no meu VS2010 SP1 a seguinte ferramenta:

    "Microsoft SQL Server Compact 4.0"

    Aí você reinicia o app, e referencia o SqlServerCe.

    Não sei se pode te ajudar, mas o meu problema era esse.

    quarta-feira, 9 de maio de 2012 13:53