Pergunta

Temos uma aplicação que permite ao usuário adicionar colunas customizadas às nossas tabelas (talvez não seja a melhor ideia, mas é assim).

Agora estamos (re)projetando nossa camada de acesso a dados (na verdade não tínhamos uma antes) e agora usaremos consultas parametrizadas em nossos mapeadores de dados ao consultar o banco de dados SQL (anteriormente concatenamos as strings SQL e escapamos de todas entrada).

Agora estamos tentando determinar a melhor maneira de lidar com as colunas personalizadas para consultar, criar e atualizar esses registros.Os atributos personalizados serão armazenados em um Dicionário em nossos "objetos de negócios", então eu estava pensando em fazer assim:

Consultando dados

  • Use SELECT * para obter todas as colunas e preencher nossas propriedades e armazenar o restante (dados personalizados) em um dicionário no objeto de negócios.

Criar/Atualizar

  • Itere todas as colunas da tabela (algo como:SELECIONE COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME = 'TableName'
  • Gere uma string SQL (com nomes de variáveis ​​parametrizados) verificando quais colunas existem no dicionário e na tabela e depois adicionando os valores do dicionário como variáveis ​​ao SQLCommand

Ou existem abordagens melhores enquanto ainda usam consultas parametrizadas?

Foi útil?

Solução

Se você estiver adicionando colunas ad-hoc, o ORM ficará muito complicado.De certa forma, voltando ao DataTable/DataAdapter (do qual não sou fã) pode ser uma opção.Pessoalmente, eu examinaria primeiro outras opções para armazenar os dados personalizados:

  • um xml coluna
  • um conjunto de pares chave/valor em cada registro (em uma segunda tabela)
  • algum outro formato delimitado em um [n]varchar(max)

Você realmente precisa adicionar colunas?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top