RETORNAR MULTIPLAS CONEXOES

VAUGHYMAN 15/09/2009 11:14:10
#322920
Prezados colaboradores,

Sabemos que para criar um objeto de conexao com banco de dados usamos a seguinte sintaxe:

Sql Server
SqlConnection cn = new SqlConnection();
return cn; // Retornara objeto //SqlConnection

Access
OleDbConnection cn = new OleDbConnection();
return cn; // Retornara objeto //OleDbConnection


Como então retornar uma dessas conexoes baseados, por exemplo em um numero qualquer: 1=Access e 2=Sql Server sendo que o nome do objeto [Ô]cn[Ô] não pode ser alterado. Exemplo:

public ????????? abreconexao(int Indice)
{
object cn
if(Indice==1)
{
OleDbConnection cn = new OleDbConnection();
return cn; // Retornara objeto //OleDbConnection
}
else
{
SqlConnection cn = new SqlConnection();
return cn; // Retornara objeto //SqlConnection
}
}
EMERSONTADEU 15/09/2009 12:27:34
#322930
Experimenta tirar o new
SqlConnection cn = new SqlConnection();

Tenta algo assim:

Em VBnet seria algo assim:

Dim cnn As SqlConnection
cnn = New SqlConnection
MORDOR 16/09/2009 00:11:54
#322997
Resposta escolhida
Basta você declarar o tipo do retorno desse método como IDbConnection que é a Interface padrão para o modelo de conexões do ADO.NET.

 public IDbConnection abreconexao(int Indice)
{
IDbConnection connection = null;

if (Indice == 1)
{
connection = new OleDbConnection();
connection.ConnectionString = [Ô]OleDbConnectionString[Ô];
}
else
{
connection = new SqlConnection();
connection.ConnectionString = [Ô]SqlConnectionString[Ô];
}

return connection;
}


IDbConnection connection = abreconexao(1);
connection.Open();



A melhor forma pra você trabalhar assim é através do conceito de ProviderFactories introduzido no .NET Framework 2.0. Não será necessário ficar alterando o código para suportar outros banco de dados e tudo pode ser tratado em arquivos de configuração.

Arquivo App.config:

<configuration>

<connectionStrings>
<add name=[Ô]SqlServer[Ô] connectionString=[Ô]server=.;Initial Catalog=Northwind;[Ô]
providerName=[Ô]System.Data.SqlClient[Ô] />
<add name=[Ô]MySql[Ô] connectionString=[Ô]server=localhost;user id=root;password=pass;database=db;[Ô]
providerName=[Ô]MySql.Data.MySqlClient[Ô] />
</connectionStrings>

<appSettings>
<add key=[Ô]defaultDatabase[Ô] value=[Ô]MySql[Ô] />
</appSettings>

</configuration>


Função que cria a conexão:

using System.Configuration;
using System.Data;
using System.Data.Common;

public DbConnection CreateConnection()
{
string database = ConfigurationManager.AppSettings[[Ô]defaultDatabase[Ô]];
string connectionString = ConfigurationManager.ConnectionStrings[database].ConnectionString;
string providerName = ConfigurationManager.ConnectionStrings[database].ProviderName;

DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
DbConnection connection = provider.CreateConnection();
connection.ConnectionString = connectionString;

return connection;
}


Utilizando a conexão:

using (DbConnection connection = CreateConnection())
{
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = [Ô]procName[Ô];
command.CommandType = CommandType.StoredProcedure;

connection.Open();

using (DbDataReader dr = command.ExecuteReader())
{
// Do Something...
}
}
}



Para alternar o banco de dados basta modificar no arquivo de configuração o atributo defaultDatabase para o valor com um dos nomes definidos em connectionStrings.
VAUGHYMAN 16/09/2009 06:10:27
#322998
Sabia que podia contar com vcs!!!

Perfeito!!!!


DEUS abençõe todos.
Tópico encerrado , respostas não são mais permitidas