FAQ C++/CLI et VC++.NetConsultez toutes les FAQ

Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013 

 
OuvrirSommaireIntéraction du C++/CLI avec le framework .NetADO.NET

Cette définition est tirée de MSDN

ADO.NET propose un accès cohérent à des sources de données telles que Microsoft SQL Server, ainsi qu'à des sources de données exposées via OLE DB et XML. Des applications grand public de partage de données peuvent utiliser ADO.NET pour se connecter à des sources de données et extraire, manipuler et mettre à jour des données.

Créé le 27 mars 2007  par Jérôme Lambert

Lien : Vue d'ensemble d'ADO.NET

Le .NET Framework dispose de plusieurs namespaces permettant de se connecter à divers SGBD.

  • System::Data::SqlClient pour SQL Server
  • System::Data::Odbc pour les SGBD fournissant un pilote ODBC
  • Oracle::DataAcess (de ORACLE) pour ORACLE. Disponible en installant Oracle Data Provider .NET (ODP .NET)
  • System::Data::Oracle::Client (de Microsoft) pour Oracle
  • System::Data::OleDb pour tous les SGBD ayant un fournisseur OLE DB
Créé le 9 mai 2006  par abelman

Voici un exemple pour SQL Server :

 
Sélectionnez

using namespace System::Data::SqlClient;
try
{
    // Chaîne de connexion
    String ^connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
    // Objet connection
    SqlConnection ^connection = gcnew SqlConnection(connectString);
    // Ouverture
    connection->Open();
    // Fermeture
    connection->Close();
}
catch (Exception ^ex)
{
    System::Diagnostics::Debug::WriteLine(ex->ToString());
}
				
Créé le 9 mai 2006  par nico-pyright(c), abelman

On utilise les objets Command et DataReader.
Exemple avec SQL Server :

 
Sélectionnez

// Chaîne de connexion
String ^connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
// Objet connection
SqlConnection ^connection = gcnew SqlConnection(connectString);
// Ouverture
connection->Open();
// Objet Command
SqlCommand ^command = gcnew SqlCommand("SELECT * FROM usr_contract", connection);
// Objet DataReader
SqlDataReader ^reader = command->ExecuteReader();
array<Object ^> ^row = gcnew array<Object ^>(reader->FieldCount);
while (reader->Read())
{
	reader->GetValues(row);
	for (int i=0; i<row->GetLength(0); i++)
	{
		if (row[i] != DBNull::Value) 
			Console::Write(row[i]);
		else
			Console::Write("NULL");
		if (i<row->GetUpperBound(0))
			Console::Write("|");
	}
	Console::WriteLine();
}
// Fermeture reader
reader->Close();
// Fermeture connection
connection->Close();
				
Créé le 9 mai 2006  par nico-pyright(c), abelman

On utilise la méthode ExecuteNonQuery de l'objet Command.
Exemple avec SqlServer :

 
Sélectionnez

// Chaîne de connexion
String ^connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
// Objet connection
SqlConnection ^connection = gcnew SqlConnection(connectString);
// Ouverture
connection->Open();
// Objet Command
SqlCommand ^command = gcnew SqlCommand("UPDATE usr_contract set ctr_n = ctr_n + 1", connection);
// Execution
int affectedrows = command->ExecuteNonQuery();
Console::WriteLine("Nombre de lignes affectées {0}", affectedrows);
// Fermeture connection
connection->Close();
				
Créé le 9 mai 2006  par nico-pyright(c), abelman

Il est possible de passer des paramètres à des requêtes SQL.
Exemple avec SQL Server :

 
Sélectionnez

using namespace System::Data::SqlClient;
using namespace System::Data;				
 
// Chaîne de connexion
String ^connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
// Objet connection
SqlConnection ^connection = gcnew SqlConnection(connectString);
// Ouverture
connection->Open();
// Objet Command
SqlCommand ^command = gcnew SqlCommand("SELECT * FROM usr_contract WHERE " + 
				"ctr_ref = @contract AND ctr_exg_ref = @exg", 
				connection);
// Paramètres
command->Parameters->Add(gcnew SqlParameter("@contract", SqlDbType::VarChar, 5));
command->Parameters["@contract"]->Value = "FTE";
command->Parameters->Add(gcnew SqlParameter("@exg", SqlDbType::VarChar, 8));
command->Parameters["@exg"]->Value = "SBF";
// Object datareader
SqlDataReader ^reader = command->ExecuteReader();
array<Object ^> ^row = gcnew array<Object ^>(reader->FieldCount);
while (reader->Read())
{
	reader->GetValues(row);
	for (int i=0; i<row->GetLength(0); i++)
	{
		if (row[i] != DBNull::Value) 
			Console::Write(row[i]);
		else
			Console::Write("NULL");
		if (i<row->GetUpperBound(0))
			Console::Write("|");
	}
	Console::WriteLine();
}
// Fermeture reader
reader->Close();
// Fermeture base
connection->Close();				
				
Créé le 9 mai 2006  par nico-pyright(c), abelman

Pour exécuter une requête contenant une quote simple, il faut utiliser les requêtes paramétrées.
On peut aussi faire plus simple en doublant les quotes avant d'exécuter la requête.

 
Sélectionnez

String ^sql = "SELECT * FROM pasta WHERE name = 'aujourd''hui'";
// Ou
String ^name = "aujourd'hui";
sql = "SELECT * FROM pasta WHERE name = " + name->Replace("'", "''");				
				
Créé le 9 mai 2006  par nico-pyright(c), abelman

Pour pouvoir exécuter une procédure stockée, vous devez utiliser un objet SqlCommand et indiquer à sa propriété CommandType que vous désirez utiliser une procédure stockée :

 
Sélectionnez

// Objet SqlCommand
SqlCommand ^ cmd = gcnew SqlCommand();
// On indique que l'on souhaite utiliser une procédure stockée
cmd->CommandType = CommandType::StoredProcedure;
// On donne le nom de cette procédure stockée
cmd->CommandText = "CustOrderHist";				
				
Créé le 9 mai 2006  par nico-pyright(c), Thomas Lebrun

En utilisant un DataSet et sa méthode WriteXml, vous avez la possibilité d'écrire le contenu d'une table dans un fichier XML.

 
Sélectionnez

// Création de la chaîne de connexion
String ^_ConnectionString =  "Server=Srv1;Database=Northwind;User ID=sa;Password=asdasd";
// Création de la connexion
SqlConnection ^_SqlConnection = gcnew SqlConnection();
_SqlConnection->ConnectionString = _ConnectionString;
// Création du SqlDataAdapter
SqlDataAdapter ^ da = gcnew SqlDataAdapter("Select * from Customers", _SqlConnection);
// Création d'un DataSet
DataSet ^ds = gcnew DataSet();
// Remplissage du DataSet avec le SqlDataAdapter
da->Fill(ds, "Customers");
// Ecriture du fichier XML au moyen de la méthode WriteXml
ds->WriteXml("C:\\TestXml.xml");
				

Voici, après traitement, le contenu du fichier TestXml.xml :

 
Sélectionnez

 <?xml version="1.0" standalone="yes" ?>
- <NewDataSet>
- <myTable>
<CustomerID>ALFKI</CustomerID>
 <CompanyName>Alfreds Futterkiste</CompanyName>
 <ContactName>Maria Anders</ContactName>
  <ContactTitle>Sales Representative</ContactTitle>
  <Address>Obere Str. 57</Address>
  <City>Berlin</City>
  <PostalCode>12209</PostalCode>
  <Country>Germany</Country>
  <Phone>030-0074321</Phone>
  <Fax>030-0076545</Fax>
</myTable>
			
Créé le 9 mai 2006  par nico-pyright(c), Thomas Lebrun
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.