none
Banco de dados do sistema compartilhado RRS feed

  • Pergunta

  • Bom dia Pessoal,

    Desenvolvi um software pequeno para uma empresa da minha cidade, porém eles querem que ele funcione em diversas máquinas, porém, somente com um banco de dados.

    Só exemplificando:

    O PC1 e o PC2 tem o sistema X. O servidor ficará no PC1, e quando o PC2 pesquisar algo, deve trazer do banco que está no PC1. Não somente pesquisar, salvar, excluir, etc.

    Qual é a melhor forma de se fazer isso e como fazer?

    Obrigado

    terça-feira, 20 de janeiro de 2015 10:25

Respostas

  • Amigão, você pode usar um software chamado hamachi e instalar em todas as maquinas onde estará a sua aplicação.

    Este hamachi, ele simula uma placa de rede e vai te gerar um numero de ip, depois é só colocar o ip do hamachi servidor na string de conexão.

    Isso é meio gambiarra !

    Uma solução mais adequada é vc colocar seu banco de dados na nuvem. Existem alguns serviços de hospedagem que oferece o sql serve gratuitamente, sendo assim você pode gerar a string de conexão do servidor web e colocar na sua aplicação. Porém em todas as maquinas que rodam o seu aplicativo, vai necessitar de acesso a internet. 

    Eu uso este para os meus bancos.

    http://ravehost.com.br/ 

    Abraços


    Jimi Anderson

    quinta-feira, 22 de janeiro de 2015 19:12

Todas as Respostas

  • Existem "n" opções. Acredito que utilizar o SQL Server Express seja uma boa. Vc instalaria o mesmo no PC1 e acessar a partir da sua aplicação no PC2.

    Não sei se seu sistema já está construído, mas se for desenvolver do zero seria uma solução legal implementar uma aplicação Web. Vc instalaria o site num servidor (o PC1, por exemplo) e acessaria o mesmo a partir de qualquer outra máquina na rede (diminuindo assim o tempo de instalação em cada máquina, a cada nova versão).

    Isso é uma visão bem geral, mas espero ter ajudado.

    Abs


    terça-feira, 20 de janeiro de 2015 10:29
  • Você nos meus tópicos de novo Renato haha Obrigado pela resposta

    Então, esse que estou falando, eu preciso entregar já essa semana e já está pronto em Windows Forms, só falta essa questão do banco de dados que estou tentando resolver.

    Eu estou procurando a melhor opção para se fazer isso e com uma explicação detalhada porque sou bem fraco nessa parte ainda.

    Essa parte de web, teria como você me explicar o conceito qualquer dia desses por e-mail ou outro tipo de coisa? Quero implementar isso nos meus projetos futuros mas não faço nem ideia também de como fazer isso e estou começando agora tambem no MVC.

    terça-feira, 20 de janeiro de 2015 11:22
  • Tem bastante material sobre Windows Forms com SQL Server. Não sei se vc terá tempo hábil pra implementar isso, mas segue um link:

    http://www.devmedia.com.br/cadastro-de-um-consultorio-em-windows-forms-com-c-e-sql-server-parte-1/16817

    Já a parte Web, passaria pela implementação de um projeto MVC como vc mesmo disse.

    terça-feira, 20 de janeiro de 2015 11:44
  • Cara, procurei nesse site mas não achei nada sobre isso que eu comentei
    terça-feira, 20 de janeiro de 2015 12:34
  • O seu projeto esta em camadas?

    O uso do SQL server ou qualquer outro tipo de banco de dados é bem simples, bastando apenas que direcione sua string de conexão para o servidor que no seu caso seria o PC1, sugiro que coloque sua string de conexão em um arquivo de configuração externo (tem no próprio visual studio) e carrega desse arquivo as informações da conexão.

    So deve se precaver quanto a inserir registro duplicados (sempre antes de inserir verificar se ja não existe o registro gravado no banco)
    • Sugerido como Resposta Durval Ramos quinta-feira, 22 de janeiro de 2015 23:08
    terça-feira, 20 de janeiro de 2015 12:56
  • Se você precisa de algo rápido que funciona com pouco ou nenhum conhecimento técnico, recomendo dar uma olhada no Entity Framework.

    De forma rápida, para te orientar, você tem a abordagem "preferencial" que é o Code-First, um modelo onde você cria as classes que irão representar as entidades de negócio (POCO) e num container especial chamado DbContext você mapeia esses objetos em tabelas, relacionamentos e afins.

    O DbContext é, basicamente, seu vínculo entre o banco de dados e os elementos no sistema.

    A vantagem do EntityFramework é a viabilidade de usar, de forma extensiva, a interface Linq. Ela permite consultas bem complexas, com filtros compostos em várias etapas, sem necessariamente carregar dados a cada novo filtro (apenas quando você efetivamente acessa o dado que ele é carregado do servidor remoto no computador local).

    Uma ressalva: eu já usei EF por muito tempo. Muito mesmo. Hoje não uso mais, eu corro dele igual diabo da cruz. O desempenho dele é questionável em vários pontos, devido à sua forma de trabalhar.

    No que ele é ruim: SELECT é bem mais lento do que deveria, consultas complexas (4 ou mais entidades relacionadas juntas) são muito lentas, lazy-load deve ser usado com muita moderação e ele é fortemente vinculado ao SQL Server (todas as edições), sendo quase que obrigatório pagar um controle de outra empresa para que ele funcione, pelo menos parcialmente, em outros BD's.

    No que ele é bom: INSERT e UPDATE são fenomenais, principalmente o UPDATE, porque ele mantém uma "sombra" do objeto original e sabe se você está incluindo ou não, o que ajuda a manter o sistema coeso e evitar manipulações chatas de transação pra todo canto.

    Porque estou recomendando ele para você: porque você disse que não tem conhecimento na área, disse que o sistema é simples e pequeno e que precisa disso de forma rápida. Dificilmente outro ORM o ajudará tanto quanto o EF nesse ponto e, bom, sem ORM você vai fazer tudo na mão, o que efetivamente exclui a chance de rápido.

    O que eu recomendo para você ler:

    Databinding with Winforms

    Entity Framework in WinForms

    MEF plugins and EF CodeFirst - How?


    O que eu recomendo para você estudar DEPOIS que implementar isso:

    - Dapper.NET

    - DapperExtensions

    - Repository Pattern

    Última dica: não use o esquema TPT (Table-per-type), que é o mais próximo da orientação a objetos, com o EF. Ele não responde bem a isso. A composição automática dos comandos envolvendo as tabelas relacionadas para compor uma macro-entidade lógica é muito ruim, muito lenta, e vai atrapalhar desde os comandos básicos (select, update, insert, etc) até a própria inicialização da aplicação, migração (atualização) do banco de dados, etc.

    • Sugerido como Resposta Durval Ramos quinta-feira, 22 de janeiro de 2015 23:06
    terça-feira, 20 de janeiro de 2015 12:57
  • Mr. GMSOFT, obrigado pela resposta.

    O que eu gostaria era isso mesmo, salvar lá no PC1 pelo PC2, e sei que precisa mexer na string de conexão.

    Tenho uma dúvida em relação a isso:

    Um amigo meu, comentou que essa forma de se conectar pela internet no outro computador, pode se tornar lenta em consultas, etc. E falou que talvez a melhor forma seria mapear o PC1 no PC2 como unidade de rede e executar o sistema dessa rede, logo o banco ja estará apontado para o PC1. Essa seria realmente a melhor forma? Se sim, poderiam me dar uma luz em como fazer isso?

    ALMMa, Eu vou dar uma olhada com certeza em tudo isso, estou começando a trabalhar com EF, pois estou estagiando em uma empresa como desenvolvedor em ASP.NET MVC e C# e eles utilizam isso aqui, mas sei pouquíssimo ou quase nada, mas vou ver isso sim, porém, como a aplicação já está pronta e eu ainda precisaria aprender todo o conceito para implementar, não seria bom (pra essa aplicação). Já estou com outro projeto com a mesma empresa para daqui há alguns meses e com certeza vou aprender isso que você me passou pra usar nesse aí

    terça-feira, 20 de janeiro de 2015 13:09
  • No seu caso o melhor seria mesmo MVC ASP.NET, e com relação ao mapeamento nesses casos o melhor seria utilizar VPN (canal seguro de conexão)
    terça-feira, 20 de janeiro de 2015 13:41
  • Com certeza Mr. GMSOFT, estou já adaptando alguns para que eu não tenha o mesmo problema no futuro.

    Para fazer o esquema de mapeamento, é realmente necessário utilizar VPN? Eu queria ser o mais simples possível, somente usar o PC1 como server, então o PC2 mapeia a rede de lá e usa o sistema.

    Se esse for a forma mais simples, poderia me explicar como posso realizar esse procedimento? Sou muito fraco nessa área

    terça-feira, 20 de janeiro de 2015 13:52
  • VPN seria o correto pois você esta compartilhando informações e pode correr riscos, o vpn já tem programa pronto para isso bastando apenas configurar,procura o OpenVpn
    • Sugerido como Resposta Durval Ramos quinta-feira, 22 de janeiro de 2015 23:08
    terça-feira, 20 de janeiro de 2015 13:56
  • Cara, eu não manjo literalmente NADA de VPN haha pra falar a verdade não sei nem o que é...não consegui nem utilizar esse programa que você me passou. Acho que essa possibilidade vai ter complicada
    terça-feira, 20 de janeiro de 2015 14:08
  • Amigão,

    Boa noite !

    Como vc já tem a sua aplicação rodando em uma maquina. Tente informar a string de conexão através de um textbox.

    Primeiro coloque este código no na inicialização do seu form onde ficara a configuração do banco.

     

    public form1()
            {
                InitializeComponent();
                textBox1.Text = ConfigurationManager.ConnectionStrings["Camera"].ConnectionString; //estou lendo o arquivo de configuração

            }

    //note que estou lendo o arquivo de configuração, onde está a string de conexão.

    //para alterar a string de conexão em tempo de execução, coloque um button e o codigo para ele.

     private void button1_Click_1(object sender, EventArgs e)
            {
                strconn = ConfigurationManager.ConnectionStrings["Camera"].ConnectionString;
                System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.ConnectionStrings.ConnectionStrings["Camera"].ConnectionString = textBox1.Text;
                config.Save(ConfigurationSaveMode.Modified);

                ConfigurationManager.RefreshSection("connectionStrings");
                MessageBox.Show("Conexão alterada com sucesso!");
                
                ConfigurationManager.RefreshSection("connectionStrings");
            }

    Faça no projeto, compile e altere a string de conexão das maquinas clientes.

    exemplo de string de conexão para o servidor:

    @"Data Source=.\SQLEXPRESSS;Initial Catalog=seubanco;User ID=sa;Password=***"; 

    Nas maquinas clientes:

    @"Data Source=ipdoservidor\SQLEXPRESSS;Initial Catalog=seubanco;User ID=sa;Password=***";

    Grande Abraço

    Obs.: Marque como resposta se achar util !

    Grande abraço



    Jimi Anderson

    • Sugerido como Resposta Anderson Mac quarta-feira, 21 de janeiro de 2015 01:39
    quarta-feira, 21 de janeiro de 2015 01:37
  • Boa tarde G_Costa,

    Conseguiu esclarecer algumas coisas ja?

    Não esqueça de marcar como resposta caso algum dos usuários tenha te ajudado ok? ;-)

    Abraço


    Ricardo Cortes Microsoft Contingent Staff

    Esse contedo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    quinta-feira, 22 de janeiro de 2015 09:27
    Moderador
  • Bom dia, se bem percebi, o que você quer é que o sistema que eta no pc1 também funcione no pc2? se for isso pq você nao invés de colocar o sistema no pc2  não cria somente um atalho do executável que esta no pc1, nossa isso lhe facilitaria d+


    MCP - MCSD Se a Resposta foi util, por favor marque como Valida assim esta contribuindo para gratificar toda a ajuda de nossos colegas. Paulo Caleffi

    quinta-feira, 22 de janeiro de 2015 10:21
  • Acho que o mais próximo do que eu queria, é o que o Jimi_br passou acima... Vou testar isso também

    Jimi, só uma pergunta pra você: Isso funcionaria para os computadores dentro da mesma rede certo? Caso um PC de outra rede precise acessar, como deve ser feito? (Não é isso que eu preciso agora, mas vou precisar no futuro para outro projeto)

    Paulo, como seria possível isso? Poderia me explicar por favor?

    quinta-feira, 22 de janeiro de 2015 13:27
  • Amigão, você pode usar um software chamado hamachi e instalar em todas as maquinas onde estará a sua aplicação.

    Este hamachi, ele simula uma placa de rede e vai te gerar um numero de ip, depois é só colocar o ip do hamachi servidor na string de conexão.

    Isso é meio gambiarra !

    Uma solução mais adequada é vc colocar seu banco de dados na nuvem. Existem alguns serviços de hospedagem que oferece o sql serve gratuitamente, sendo assim você pode gerar a string de conexão do servidor web e colocar na sua aplicação. Porém em todas as maquinas que rodam o seu aplicativo, vai necessitar de acesso a internet. 

    Eu uso este para os meus bancos.

    http://ravehost.com.br/ 

    Abraços


    Jimi Anderson

    quinta-feira, 22 de janeiro de 2015 19:12