Referência:
Ferramenta Visual Studio.NET
Linguagem C#.NET
Framework 3.5 / 2.0 / 1.x
A interface é geralmente tratada como uma camada de abstração, ou seja, uma cama acima que sabe identificar qual a melhor forma de acessar a fonte de dados, método ou função. Um exemplo disso é: imagina criar uma interface que sabe qual banco de dados acessar, oracle, sql server, mysql, access ou outros.
Você só manda o comando e a interface detecta qual banco de dados está na sua aplicação. O comando “select * from tabela” na interface; pega o dado para a camada de dados correta. Criei primeiro uma classe helper com o método principal (Referência 1.1).
public DataSet ExecutaDataSetParameter(IDbCommand sqlCommand)<br /><br /><br />{<br /> try<br /> {<br /> base.OpenConnection();<br /> sqlCommand.Connection = sqlConnection;<br /><br /> System.Data.IDbDataAdapter dataAdapter = new System.Data.SqlClient.SqlDataAdapter();<br /> dataAdapter.SelectCommand = sqlCommand;<br /> DataSet dtSet = new DataSet();<br /> dataAdapter.Fill(dtSet);<br /> return dtSet;<br /> }<br /> catch(SqlException e)<br /> {<br /> throw new NotImplementedException(e.Message);<br /><br /> }<br /> finally<br /> {<br /> base.CloseConnection();<br /> }<br /> }Referência 1.1
O método executa um dado e retorna um objeto do tipo dataset. Recebe como parâmetro de entrada chamado IDbCommand, uma interface da classe Command. No decorrer do método utilizo sempre a interface de métodos, o DataAdapter por exemplo possui uma interface chamada IDbDataAdapter que recebe um objeto do tipo SqlDataAdapter().
Essa helper é apenas para o banco de dados SQL Server. (Referência 1.2)

Referência 1.2
Note na imagem que tenho uma HelperSQL.cs, tem todos os métodos específicos para o banco de dados SQL Server. O próximo passo é gerar um helper para o Oracle. (Referência 1.3)
namespace Bancoob.Data<br />{<br /> public class HelperOracle : IDTec<br /> {<br /> public DataSet ExecutaDataSetParameter(IDbCommand sqlCommand)<br /> {<br /> try<br /> {<br /> System.Data.IDbDataAdapter dataAdapter = new System.Data.Odbc.OdbcDataAdapter();<br /> dataAdapter.SelectCommand = sqlCommand;<br /> DataSet dtSet = new DataSet();<br /> dataAdapter.Fill(dtSet);<br /> return dtSet;<br /> }<br /> catch (OdbcException e)<br /> {<br /> throw new NotImplementedException(e.Message);<br /><br /> }<br /> }<br /> }<br />}Referência 1.3
Nesta classe HelperOracle.cs possui um mesmo método para um outro banco de dados, Oracle por exemplo. Para acessar o banco, o comando ODBC é importante, em vez de fazer outro método na helper SQL, coloco na helper Oracle. Veja a mudança no System.Data.OdbcDataAdapter(), a Exception também é do tipo Odbc. (Referência 1.4)

Referência 1.4
O próximo passo é gerar uma interface que saiba qual classe Helper acessar em determinados momentos. Uma hora na HelperSQL e outra hora no HelperOracle. Geralmente a interface possui apenas o cabeçalho do método, por exemplo: note que na referência 1.3 e 1.1 possui todo o método que recebe um comando e retorno o objeto do tipo DataSet; dessa forma, na interface fica apenas o cabeçalho que por sinal um é igual ao outro. (Referência 1.5)
public DataSet ExecutaDataSetParameter(IDbCommand sqlCommand)Referência 1.5
No caso de ter outra helper para acesso a outro banco como o access, terá a mesma assinatura e no seu interior irá tratar direto com o banco e interfaces do access. O passo seguinte é mostrar a interface.
Na classe da interface não terá public class e sim public interface. (Referência 1.6)
public interface IDTecReferência 1.6
Terá apenas um public interface e o nome que achar melhor. Veja mais abaixo a chamada do método criado nas referências acima. (Referência 1.7)
public interface IDTec {<br /> DataSet ExecutaDataSetParameter(IDbCommand sqlCommand);<br /> }Referência 1.7
A interface possui apenas a chamada com o retorno do tipo do método, é o mesmo tipo. Com isso a interface escolhe qual helper utilizar. Você pode colocar um tipo na sua classe que chama para definir o helper de forma mais dinâmica; pode ser de acordo com o arquivo de configuração ou como uma propriedade com get e set.
No sistema, basta chamar a interface, ou seja, public interface IDTec que o resto é definido dinamicamente.
Bom, eu fico por aqui, qualquer dúvida pode entrar em contato. Espero ter ajudado.








