Correção para o Microsoft Data Access Application Block

Microsoft Data Access Application Block for .NET é uma solução que visa facilitar o acesso a dados com ADO.NET. Nos dias atuais ainda podemos encontrar aplicações que utilizam a biblioteca.

Existe um problema com a versão 2.0: ao utilizar parâmetros do tipo Structured, o SQL Server retorna um erro afirmando que não aceita o nome do banco de dados no TypeName do parâmetro.

Isso impossibilita que estruturas de dados sejam passadas pela aplicação ao banco de dados em formato de User Defined Table Type.

Para corrigir o problema foi aplicada uma correção na classe SQLHelper fornecida como parte do mecanismo de persistência. Um novo método FixSqlServerCommandBuilder foi adicionado e o cache de parâmetros é tratado por ele.
 // hack to fix a sql server bug in the SqlCommandBuilder.DeriveParameters method
 // applies to Structured Dbtype
 private static void FixSqlServerCommandBuilder(SqlParameter[] commandParameters)
 {
 foreach (SqlParameter parameter in commandParameters)
 {
 if (parameter.SqlDbType != SqlDbType.Structured)
 {
 continue;
 }
 string name = parameter.TypeName;
 int index = name.IndexOf(".");
 if (index == -1)
 {
 continue;
 }
 name = name.Substring(index + 1);
 if (name.Contains("."))
 {
 parameter.TypeName = name;
 }
 }
 }

O tratamento do cache de parâmetros deve ser feito nas variáveis discoverdParameters e clonedParameters da classe SQLHelper, como segue:

FixSqlServerCommandBuilder(discoveredParameters);
FixSqlServerCommandBuilder(clonedParameters);

Com essas mudanças, o Microsoft Data Access Application Block for .NET versão 2.0 passa a funcionar com User Defined Types do SQL Server.

Publicidade
Publicado em Sem categoria.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s