Ir ao conteúdo
  • Cadastre-se

Ajuda Classe Abstrata em C#


Emerson111

Posts recomendados

Estou fazendo um código onde tenho uma classe abstrata com as seguinte funções: cadastrar, alterar, excluir e pesquisar.

Com a ajuda de uma vídeo aula eu consegui criar a função cadastrar. Mas não achei nenhum material que me ajude a fazer as outras classes. Gostaria que me desse uma ajuda com as outras 3 funções. O código que eu já fiz é:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Atividade_4._3
{
abstract class Metodos_Aluga_Buggy
{
public void Cadastrar()
{
PropertyInfo[] propriedade = this.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
string insert = "INSERT INTO" + this.GetType().Name + "(";

for (int i = 0; i < propriedade.Length; i++)

{
insert += propriedade[i].Name + ",";
}

insert = insert.Remove (insert.Length -1);
insert += ") VALUES(";

for (int i = 0; i < propriedade.Length; i++)
{
insert += propriedade[i].GetValue(this).ToString() + ",";
}

insert = insert.Remove (insert.Length -1);
insert += ")";

}

public abstract string[] Alterar();
public abstract string[] Excluir();
public abstract void Pesquisar();

}
}

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Independente do banco, como você usa SQL "escrito" procure pelas outras 3 funções de um CRUD :

C : Create

R : Retrieve

U : Update

D : Delete

O C você já tem, vamos ao Retrieve:

Em SQL transact você usa SELECT [* para todas as colunas ou o nome de cada coluna que quer retornar] FROM [nome da tabela] WHERE [caso tenha alguma clausula], exemplo:

SELECT Nome, Email FROM USERS WHERE ID_USER = 1

Agora o Update:

UPDATE [nome da tabela] SET [nome da coluna] = [novo valor] WHERE [caso tenha alguma clausula], exemplo:

UPDATE USERS SET Nome = 'LBarcelosM' WHERE ID_USER = 1

O UPDATE tem algumas restrições. por exemplo, você não pode atualizar campos que são utilizados em chaves estrangeiras e que estão sendo usadas, você não pode atualizar campos de chaves primárias auto-incrementais (há um jeito que é desabilitando a chave auto-incremental e depois reabilitando, mais não é bom fazer isso...), mais isso é algo mais "profundo".

Agora o Delete:

DELETE FROM [nome da tabela] WHERE [caso tenha alguma clausula], exemplo:

DELETE FROM USERS WHERE ID_USER = 1

O Delete tem algumas restrições, por exemplo, você não pode deletar um registro que esta ligado a outro em uma chave estrangeira caso essa chave não tenha exclusão em cascata, mais isso é algo mais "profundo" rsrsrsrs

Use estes comandos que coloquei ai seguindo basicamente a mesma estrutura do seu INSERT.

ATT,

LBarcelosM

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
Estou fazendo um código onde tenho uma classe abstrata com as seguinte funções: cadastrar, alterar, excluir e pesquisar.

Com a ajuda de uma vídeo aula eu consegui criar a função cadastrar. Mas não achei nenhum material que me ajude a fazer as outras classes. Gostaria que me desse uma ajuda com as outras 3 funções. O código que eu já fiz é:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Atividade_4._3
{
abstract class Metodos_Aluga_Buggy
{
public void Cadastrar()
{
PropertyInfo[] propriedade = this.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
string insert = "INSERT INTO" + this.GetType().Name + "(";

for (int i = 0; i < propriedade.Length; i++)

{
insert += propriedade[i].Name + ",";
}

insert = insert.Remove (insert.Length -1);
insert += ") VALUES(";

for (int i = 0; i < propriedade.Length; i++)
{
insert += propriedade[i].GetValue(this).ToString() + ",";
}

insert = insert.Remove (insert.Length -1);
insert += ")";

}

public abstract string[] Alterar();
public abstract string[] Excluir();
public abstract void Pesquisar();

}
}

Não sei se ainda é o caso, mas você está indo na direção errada.

Está usando comandos de "baixo nível" ao invés dos comandos do framework.

Para criar camadas multi banco, você precisa criar uma camada para cada banco e injetar o objeto certo em runtime ou via config.

Concatenar string em SQL é pedir pra tomar um SQL injection, longe de ser um código profissional esse que você escreveu, até porque você é obrigado a especificar o provider pra conectar no BD, você não alcança nada com esse código que escreveu.

O correto é criar uma interface que implementa as operações de banco que você deseja e classes concretas de MSSQL, Oracle, MySQL, etc... que implementam essa interface.

Depois você instância a classe correta e injeta ela dependendo do BD (estudar IoC container).

Comentei mais para evitar novatos de seguirem esse péssimo exemplo que você criou.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...