2010-03-09 6 views
2

Je souhaite utiliser mysqlconnection, commande et datareader ou sqlconnection, command et datareader en fonction d'une condition. Je veux utiliser mêmes variables pour les deux types de connexionMySQL DataCOnnection et ADO.NET

Ex:

Currently i have 
dim _c as New mySqlConnection() 
dim _cmd as New mysqlCommand() 
dim _reader as New mysqlreader() 

_reader = _cmd.executereader() 
'loop through _reader 
----------------- 

Comment puis-je changer trois premiers à utiliser SQL/MySQL basé sur certains cas. Est-ce possible?

+0

En raison de la « portée » de vos définitions dans un boîtier ou même IF/THEN vous * pourrait * dupliquer les définitions en utilisant les mêmes noms de variables ... mais en dehors des portée le compilateur se plaindra qu'il n'a pas été défini. Et vous ne pouvez certainement pas créer des définitions avec des noms identiques mais des attributs différents. Vous devriez probablement créer un dbclass/db_module/db_subroutine qui peut renvoyer des lecteurs-lignes de n'importe quel type. Mais le travail serait caché dans la classe dbclass. – tobrien

Répondre

4

Oui, c'est possible. ADO.NET a une API de fournisseur pour cela. Vous devez faire quelque chose comme ceci:

string providerName; 

if (true/*add your logic here*/) 
    providerName = "System.Data.SqlClient"; 
else 
    providerName = "MySql.Data.MySqlClient" 

DbProviderFactory factory = DbProviderFactories.GetFactory(providerName); 

DbConnection connection = factory.CreateConnection(); 
DbCommand command = factory.CreateCommand(); 

// ... and so on 
0

Écrivez une méthode qui renvoie le lecteur de données. Placez votre cas de sélection dans la méthode, quelles que soient les conditions que vous utilisez pour créer la requête, le lecteur de données sera renvoyé.

Assurez-vous de fermer le lecteur de données lorsque vous avez terminé.