Lendo dados personalizados de tabelas SQL
-
20-09-2019 - |
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?
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?