none
Banco de dados Local .sdf como conectar? RRS feed

  • Pergunta

  • Boa noite,

    galera sou noob em windows phone 7...estou tentando fazer uma aplicação que vai registrar algumas informações no banco de dados e depois poder conectar a ele e pesquisar esses registros...já pesquisei e estou apanhando demais...não consigo conectar a um banco de dados local de jeito nenhum...

    preciso conectar ao banco e registrar as informaçoes e depois quando tiver a necessidade pesquisar as informaçoes...não estou conseguindo.

    alguem poderia me ajudar...

    pesquisando e tentando fazer so consegui usando o isostore, mas me corrija se eu estiver errado ele cria o banco em tempo de execução mas não acho esse banco de jeito nenhum por favor alguem me ajude!

    private const string conexaoString = @"isostore:/Pedido.sdf";

    preciso conectar local para fazer inserts e select...obrigado

    wellington


    Wellington

    terça-feira, 16 de outubro de 2012 21:49

Respostas

  • Bom dia Wellington, não consegui entender sua dúvida, então segue dois link muito bom para quem está começando, esses link ensina criar banco no windows phone e tudo que você está com dúvida.

    quarta-feira, 17 de outubro de 2012 11:51
  • Amigo, não entendi perfeitamente a sua questão, mas olhe o exemplo do link abaixo que mostra como usar o Entity Framework no Windows Phone e também conectar a um banco de dados.

    http://www.adambenoit.com/development/entity-framework-windows-phone-part-1/

    É só seguir o passo-a-passo.

    quarta-feira, 17 de outubro de 2012 14:53
  • Wellington, boa tarde.

    Faça uma correção na constante:

    private const string sConn = @"isostore:/seubancoDB.sdf";

    Você prode utilizar o SQL Metal para gerar sua classe de dados, baseada no seu SDF (altamente recomendado). Não anexar o SDF ao projeto. Crie o banco de dados com base na classe gerada pelo SQL Metal. Os vídeos que o Wescley postou, coincidentemente são os vídeos do meu SkyDrive e recomendo que veja todos eles. Para isto é melhor que tenha acesso à toda biblioteca neste link. Baixe os vídeos e guarde como referÊncia porque são extremamente importantes. Lá você vai aprender a utilizar o SQL Metal corretamente, passo-a-passo. Abaixo segue um exemplo de código para verificar existência do banco de dados, criar quando executado pela primeira vez, atualizar de acordo com as novas versões do banco e uma carga inicial:

    Note que App.DB_VERSION é uma constante pública da aplicação em App.xaml.cs que eu mudo o valor a cada alteração feita no banco de dados.

            /// <summary>
            /// Verifica a existência do banco de dados e suas atualizações
            /// </summary>
            private void VerificaBancoInicial()
            {
                using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(sConn))
                {
                    //Verificando existência do banco de dados
                    if (!ctx.DatabaseExists())
                    {
                        ctx.CreateDatabase();
                        
                        // Set the new database version.
                        DatabaseSchemaUpdater dbUpdater = ctx.CreateDatabaseSchemaUpdater();
                        dbUpdater.DatabaseSchemaVersion = App.DB_VERSION;
                        dbUpdater.Execute();
                    }
                    else
                    {
                        DatabaseSchemaUpdater dbUpdater = ctx.CreateDatabaseSchemaUpdater();
                        Int32 DB_versao_atual = dbUpdater.DatabaseSchemaVersion;
    
                        if (DB_versao_atual < App.DB_VERSION)
                        {
                            switch (App.DB_VERSION)
                            {
                                case 1:
                                    //Coluna adicionada para armazenar o identificador do Reminder para o lançamento
                                    dbUpdater.AddColumn<FOFkLancamento>("LctReminder");
                                    break;
    
                                case 2:
                                    //Tabela adicionada para cadastrar metas de gastos e recebimentos
                                    dbUpdater.AddTable<FOFkMeta>();
                                    break;
                            }
                            
                            
                            //Atualiza versão do banco de dados e aplica alterações
                            dbUpdater.DatabaseSchemaVersion = App.DB_VERSION;
    
                            try
                            {
                                dbUpdater.Execute();
                            }
    
                            catch (Exception)
                            {
    
                                MessageBox.Show(dicionario.mensErroBancoDados, dicionario.mensTituloAtencao, MessageBoxButton.OK);
                            }
                            
                        }
    
                    }
                    
    
                    //Verifica cadastro das Categorias de Despesas
                    var queryCategoria = ctx.FOFkCategoriaDespesas.FirstOrDefault();
    
                    if (queryCategoria == null)
                    {
                        for (int i = 1; i <= 3; i++)
                        {
                            switch (i)
                            {
                                case 1:
                                    var a = new FOFkCategoriaDespesa() { CatDescricao = dicionario.lstCategoriaRecebimentos, CatTipo = "C", CatStatus = 0 };
                                    ctx.FOFkCategoriaDespesas.InsertOnSubmit(a);
                                    break;
                                case 2:
                                    var b = new FOFkCategoriaDespesa() { CatDescricao = dicionario.lstCategoriaDespesasEventuais, CatTipo = "D", CatStatus = 0 };
                                    ctx.FOFkCategoriaDespesas.InsertOnSubmit(b);
                                    break;
                                case 3:
                                    var c = new FOFkCategoriaDespesa() { CatDescricao = dicionario.lstCategoriaRefeicoes, CatTipo = "D", CatStatus = 0 };
                                    ctx.FOFkCategoriaDespesas.InsertOnSubmit(c);
                                    break;
                            }
                        }
                        
                        ctx.SubmitChanges();
                    }
    
                    //Verifica cadastro dos Meios de Pagamento
                    var queryPagamento = ctx.FOFkPagamentoMeios.FirstOrDefault();
    
                    if (queryPagamento == null)
                    {
                        for (int i = 1; i <= 2; i++)
                        {
                            switch (i)
                            {
                                case 1:
                                    var a = new FOFkPagamentoMeio() { PagDescricao = dicionario.lstPagamentoMeioDinheiro, PagStatus = 0 };
                                    ctx.FOFkPagamentoMeios.InsertOnSubmit(a);
                                    break;
                                case 2:
                                    var b = new FOFkPagamentoMeio() { PagDescricao = dicionario.lstPagamentoMeioTEF, PagStatus = 0 };
                                    ctx.FOFkPagamentoMeios.InsertOnSubmit(b);
                                    break;
                            }
                        }
    
                        ctx.SubmitChanges();
                    }
    
                }
            }

    Segue também um script para criar sua classe de dados. Sugiro que crie uma pasta TEMP/nome da aplicação/ e coloque o SDF lá dentro para facilitar:

    sqlmetal D:\temp\sua aplicação\seu banco.sdf /code:"D:\temp\sua aplicação\sua classe de dadosDataClasses.cs" /language:csharp /namespace:namespace da aplicação /context:sua aplicacaoContext /pluralize

    Espero que isto ajude você.

    Abraço.


    Andrey Kurka


    quarta-feira, 17 de outubro de 2012 17:57

Todas as Respostas

  • Bom dia Wellington, não consegui entender sua dúvida, então segue dois link muito bom para quem está começando, esses link ensina criar banco no windows phone e tudo que você está com dúvida.

    quarta-feira, 17 de outubro de 2012 11:51
  • Bom dia Wescley,

    cara minha pergunta ficou confusa mesmo...acho que eu estava cansado!! rs

    então eu estou fazendo uma aplicação que vai fazer um cadastro...pesquisando vi que windows phone utilizava o sql server compact e então criei o banco de dados .sdf, so que não consigo conectar e utilizar esse banco de dados local especifico...pesquisei e criei a stringconnection passando o caminho do banco e da erro segue a string de conexao : private const string conexaoString = @"Data Source='appdata\C:\Users\Wellington\Documents\Pedido.sdf'";

    Então não consigo conectar em um banco de dados local esse é a questão!

    Se tiver alguma solução me ajude! Vou entrar nos links que voce passou e pesquisar...

    Obrigado


    Wellington

    quarta-feira, 17 de outubro de 2012 14:46
  • Amigo, não entendi perfeitamente a sua questão, mas olhe o exemplo do link abaixo que mostra como usar o Entity Framework no Windows Phone e também conectar a um banco de dados.

    http://www.adambenoit.com/development/entity-framework-windows-phone-part-1/

    É só seguir o passo-a-passo.

    quarta-feira, 17 de outubro de 2012 14:53
  • Amigo,

    passei por este problema no inicio. Infelizmente não estou com o código aqui pra te mandar um exemplo, mas posso te dizer como normalmente eu faço.

    Geralmente eu crio um banco como você fez e depois executo no prompt do visual studio o comando sql metal, que ele vai gerar uma classe com o contexto do seu modelo, assim você poderá usar linq para manipular as informações.

    Após ele gerar a classe baseada no modelo que você criou, você só instanciar essa classe e verificar se o banco ja existe, caso não exista tem um comando chamado createDatabase. Com isso sua própria classe gerada com o contexto é responsável por criar o banco caso não exista e através dela você irá manipular as informações via linq.

    Existem 2 videos em português que ensina isso, vou ver se acho e te mando


    Paulo Rogério

    quarta-feira, 17 de outubro de 2012 17:48
  • Wellington, boa tarde.

    Faça uma correção na constante:

    private const string sConn = @"isostore:/seubancoDB.sdf";

    Você prode utilizar o SQL Metal para gerar sua classe de dados, baseada no seu SDF (altamente recomendado). Não anexar o SDF ao projeto. Crie o banco de dados com base na classe gerada pelo SQL Metal. Os vídeos que o Wescley postou, coincidentemente são os vídeos do meu SkyDrive e recomendo que veja todos eles. Para isto é melhor que tenha acesso à toda biblioteca neste link. Baixe os vídeos e guarde como referÊncia porque são extremamente importantes. Lá você vai aprender a utilizar o SQL Metal corretamente, passo-a-passo. Abaixo segue um exemplo de código para verificar existência do banco de dados, criar quando executado pela primeira vez, atualizar de acordo com as novas versões do banco e uma carga inicial:

    Note que App.DB_VERSION é uma constante pública da aplicação em App.xaml.cs que eu mudo o valor a cada alteração feita no banco de dados.

            /// <summary>
            /// Verifica a existência do banco de dados e suas atualizações
            /// </summary>
            private void VerificaBancoInicial()
            {
                using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(sConn))
                {
                    //Verificando existência do banco de dados
                    if (!ctx.DatabaseExists())
                    {
                        ctx.CreateDatabase();
                        
                        // Set the new database version.
                        DatabaseSchemaUpdater dbUpdater = ctx.CreateDatabaseSchemaUpdater();
                        dbUpdater.DatabaseSchemaVersion = App.DB_VERSION;
                        dbUpdater.Execute();
                    }
                    else
                    {
                        DatabaseSchemaUpdater dbUpdater = ctx.CreateDatabaseSchemaUpdater();
                        Int32 DB_versao_atual = dbUpdater.DatabaseSchemaVersion;
    
                        if (DB_versao_atual < App.DB_VERSION)
                        {
                            switch (App.DB_VERSION)
                            {
                                case 1:
                                    //Coluna adicionada para armazenar o identificador do Reminder para o lançamento
                                    dbUpdater.AddColumn<FOFkLancamento>("LctReminder");
                                    break;
    
                                case 2:
                                    //Tabela adicionada para cadastrar metas de gastos e recebimentos
                                    dbUpdater.AddTable<FOFkMeta>();
                                    break;
                            }
                            
                            
                            //Atualiza versão do banco de dados e aplica alterações
                            dbUpdater.DatabaseSchemaVersion = App.DB_VERSION;
    
                            try
                            {
                                dbUpdater.Execute();
                            }
    
                            catch (Exception)
                            {
    
                                MessageBox.Show(dicionario.mensErroBancoDados, dicionario.mensTituloAtencao, MessageBoxButton.OK);
                            }
                            
                        }
    
                    }
                    
    
                    //Verifica cadastro das Categorias de Despesas
                    var queryCategoria = ctx.FOFkCategoriaDespesas.FirstOrDefault();
    
                    if (queryCategoria == null)
                    {
                        for (int i = 1; i <= 3; i++)
                        {
                            switch (i)
                            {
                                case 1:
                                    var a = new FOFkCategoriaDespesa() { CatDescricao = dicionario.lstCategoriaRecebimentos, CatTipo = "C", CatStatus = 0 };
                                    ctx.FOFkCategoriaDespesas.InsertOnSubmit(a);
                                    break;
                                case 2:
                                    var b = new FOFkCategoriaDespesa() { CatDescricao = dicionario.lstCategoriaDespesasEventuais, CatTipo = "D", CatStatus = 0 };
                                    ctx.FOFkCategoriaDespesas.InsertOnSubmit(b);
                                    break;
                                case 3:
                                    var c = new FOFkCategoriaDespesa() { CatDescricao = dicionario.lstCategoriaRefeicoes, CatTipo = "D", CatStatus = 0 };
                                    ctx.FOFkCategoriaDespesas.InsertOnSubmit(c);
                                    break;
                            }
                        }
                        
                        ctx.SubmitChanges();
                    }
    
                    //Verifica cadastro dos Meios de Pagamento
                    var queryPagamento = ctx.FOFkPagamentoMeios.FirstOrDefault();
    
                    if (queryPagamento == null)
                    {
                        for (int i = 1; i <= 2; i++)
                        {
                            switch (i)
                            {
                                case 1:
                                    var a = new FOFkPagamentoMeio() { PagDescricao = dicionario.lstPagamentoMeioDinheiro, PagStatus = 0 };
                                    ctx.FOFkPagamentoMeios.InsertOnSubmit(a);
                                    break;
                                case 2:
                                    var b = new FOFkPagamentoMeio() { PagDescricao = dicionario.lstPagamentoMeioTEF, PagStatus = 0 };
                                    ctx.FOFkPagamentoMeios.InsertOnSubmit(b);
                                    break;
                            }
                        }
    
                        ctx.SubmitChanges();
                    }
    
                }
            }

    Segue também um script para criar sua classe de dados. Sugiro que crie uma pasta TEMP/nome da aplicação/ e coloque o SDF lá dentro para facilitar:

    sqlmetal D:\temp\sua aplicação\seu banco.sdf /code:"D:\temp\sua aplicação\sua classe de dadosDataClasses.cs" /language:csharp /namespace:namespace da aplicação /context:sua aplicacaoContext /pluralize

    Espero que isto ajude você.

    Abraço.


    Andrey Kurka


    quarta-feira, 17 de outubro de 2012 17:57
  • Boa noite,

    galera gostaria de agradecer a todos pela atenção...vou trabalhar em cima desses materiais e videos, comecei a entender o sqlmetal para criar a classe para manipulação do banco...e valeu pelos videos e codigos..vou trabalhar

    qualquer coisa posto aqui mais tarde...abrass a todos


    Wellington

    quarta-feira, 17 de outubro de 2012 21:51
  • Galera boa noite,

    é o seguinte fiz os exemplos que passaram em video fiz um cadastro simples com insert e select beleza deu certo...agora me explica uma coisa quem puder, pq seu eu fechar o emulador o programa cria o banco de dados novamente...ele ja não foi criado? Se eu não fechar o emulador e mudar o programa ele recupera os dados mas se eu fechar o emulador some tudo pq?

    Att,

    Wellington Arantes


    Wellington

    quarta-feira, 17 de outubro de 2012 23:13
  • Wellington,

    Se o emulador estiver aberto, é como se fosse um update da aplicação, ou seja, mantém o banco de dados e isolated storage.

    Se o emulador estiver fechado, é como se fosse a primeira instalação da aplicação.

    Assim você consegue testar uma atualização de banco de dados e, também, consegue testar uma instalação nova.

    Espero ter ajudado. Por favor, marque as respostas que foram úteis e também as respostas que sanaram sua dúvida.

    Qualquer coisa, é só chamar.

    Abraço!


    Andrey Kurka


    quarta-feira, 17 de outubro de 2012 23:46
  • Bom dia Andrey,

    agradeço a todos aí pelas dúvidas respondidas...

    entendi o que você disse, mas vamos supor que instalo a aplicação no celular da pessoa, ela começa a utilizar o programa registra algumas informações e beleza depois ela por um acaso desliga o celular ou tira a bateria...tem a possibilidade da aplicação perder o banco e criar ela novamente? Estou perguntando por causa do Emulador se voce desligar ele entendeu...ele cria o banco novamente...

    Att e muito obrigado

    Wellington Arantes de Oliveira Júnior


    Wellington

    quinta-feira, 18 de outubro de 2012 11:44
  • Bom dia galera,

    fiz a mesma pergunta acima por email para o Moderador Thiago Monaco e um dos autores dos videos que estou assistindo e ele me respondeu o seguinte:

    "Bom dia Wellington,

    Fico feliz que esteja gostando dos vídeos.
    O emulador na verdade nada mais é do que uma máquina virtual, quando você fecha o emular, é como se fosse dado um "reset" na máquina virtual, voltado ela pro estado original, com as configurações iniciais do Windows Phone neste caso.
    Quando estamos em um ambiente real, com um aparelho real, isso não acontece, você pode ligar, desligar, trocar a bateria, que tudo permanece lá... As informações só serão apagadas, se o usuário fizer um reset manual, pedindo para restaurar o aparelho para o estado inicial.
    Abs,

    Thiago Mônaco " 

    Obrigado a todos!!

    Wellington Arantes de Oliveira Júnior


    Wellington

    quinta-feira, 18 de outubro de 2012 13:47