Como já sabemos, o ADO.NET disponibiliza as Base Classes para suportar código genérico para acesso à diversas bases de dados. Uma das coisas que muitos tem dúvidas é com relação à nomenclatura dos parametros, já que isso varia de base de dados para base de dados.
Quando utilizamos SQL Server (SqlClient), o correto é utilizarmos o caracter “@” seguido do nome do parametro. Já no Oracle (OracleClient), ao invés do caracter “@”, utilizamos o “:” também seguido do nome do parametro. Nesses dois casos, a ordem de inserção dos parametros na coleção dos mesmos no XXXCommand não importa. Já quando trabalhamos com OleDb, a ordem de inserção é o que predomina, não importando o nome.
Como podemos ver, os formatos variam e, temos que analisar isso em tempo de execução para anexarmos corretamente o parametro da query/Stored Procedure e, para isso, temos que, de alguma forma, saber qual é o tipo de parametros que a base de dados trabalha. Para atender essa necessidade, extraimos essa informação através do método GetSchema da classe DbConnection, exemplo:
string parameterFormat =
conn.GetSchema(“DataSourceInformation”).Rows[0][“ParameterMarkerFormat”].ToString();
Esse método, retorna um objeto do tipo DataTable contendo informações do schema. Ele se baseia na instancia da classe concreta que o objeto DbConnection está armazenando, extraindo todos os meta-dados necessários para aquela base de dados. É importante dizer que, para chamar esse método, é necessário que a conexão com a base de dados esteja aberta.