Equivalent provider MSDataShape en C#?

cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005 - 10 nov. 2003 à 12:21
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005 - 15 nov. 2003 à 18:14
Bonjour
Avec VB et Ado 2.1, j'utilisais pour une connexion le provider "MSDataShape" pour 'obtenir un recordset hiérarchique. Le code était le suivant:
  cn.Provider = "MSDataShape"
  cn.Open "Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\DidactDB\Biblio2002.mdb"
  SQL = "SHAPE {SELECT * FROM Publishers} APPEND " & _
        "({SELECT ISBN, PubID, Title, [Year Published], Description, Subject, Notes FROM Titles} AS Title " & _
        "RELATE PubID TO PubID)"
  rsPub.Open SQL, cn, adOpenDynamic, adLockOptimistic, adCmdText

Le recordset ainsi obtenu s'affichait directement dans une MSHFlexGrid.
Cette façon de procéder a-t-elle un équivalant avec Ado.net et C#, ou faut-il passer par la création d'un DataAdapter pour chacune des deux tables et la création de la relation dans le DataSet?
Merci.

2 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
11 nov. 2003 à 02:42
Bonjour

D'après la MSDN (bien que pas clair) il serait toujours utilisable.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/adonetprogmsdn.asp

Je t'ai trouvé un exemple :

OleDbConnection myConn = new OleDbConnection
   ( "Provider=MSDataShape;Data Provider=SQLOLEDB;" +
   "Data Source=localhost;Integrated Security=SSPI;" +
   "Initial Catalog=northwind" );

OleDbCommand custCMD = new OleDbCommand
   ( "SHAPE {SELECT CustomerID, CompanyName FROM Customers} " +
   "  APPEND ( {SELECT CustomerID, OrderID FROM Orders} AS CustomerOrders " +
   "  RELATE CustomerID TO CustomerID ) ", myConn );
myConn.Open ( );

OleDbDataReader custReader = custCMD.ExecuteReader ( );
OleDbDataReader orderReader;

while ( custReader.Read ( ) ) {
   Console.WriteLine ( "Orders for " + custReader.GetString ( 1 ) ); 
   // custReader.GetString ( 1 ) = CompanyName

   orderReader = ( OleDbDataReader ) custReader.GetValue ( 2 );
   // custReader.GetValue ( 2 ) = Orders chapter as DataReader

   while ( orderReader.Read ( ) ) {
      Console.WriteLine ( "\t" + orderReader.GetInt32 ( 1 ) );  
      // orderReader.GetInt32 ( 1 ) = OrderID
   }
   orderReader.Close ( );
}

custReader.Close ( );
myConn.Close ( );
Dim myConn As OleDbConnection = New OleDbConnection
   ( "Provider=MSDataShape;Data Provider=SQLOLEDB;" & _
   "Data Source=localhost;Integrated Security=SSPI;" & _
   "Initial Catalog=northwind" ) 

Dim custCMD As OleDbCommand = New OleDbCommand
   ( "SHAPE {SELECT CustomerID, CompanyName FROM Customers} " & _
   " APPEND ( {SELECT CustomerID, OrderID FROM Orders} AS CustomerOrders " & _
   " RELATE CustomerID TO CustomerID ) ", myConn ) 
myConn.Open ( ) 

Dim custReader As OleDbDataReader = custCMD.ExecuteReader ( ) 
Dim orderReader As OleDbDataReader

Do While custReader.Read ( ) 
   Console.WriteLine ( "Orders for " & custReader.GetString ( 1 ) ) 
   ' custReader.GetString ( 1 ) = CompanyName

   orderReader = custReader.GetValue ( 2 ) 
   ' custReader.GetValue ( 2 ) = Orders chapter as DataReader

   Do While orderReader.Read ( ) 
      Console.WriteLine ( vbTab & orderReader.GetInt32 ( 1 ) ) 
      ' orderReader.GetInt32 ( 1 ) = OrderID
   Loop
   orderReader.Close ( ) 
Loop

custReader.Close ( ) 
myConn.Close ( ) 


En esperant que cela te dirige :)
::|The S@ib|::
MVP C#.NET
0
cs_jacma Messages postés 54 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 6 septembre 2005
15 nov. 2003 à 18:14
Bonjour
Excuses moi du retard pour te répondre. J'ai parcouru rapidement le code mais ne l'ai pas encore testé, car actuellement je me brs avec des choses plus triviales du genre passer les modificatios apportées d'un dataset à une base de données. Il faut bien constater que la mise à jour d'une base de données était plus facile à réaliser avec VB6 et Ado 2.7 :sad)
Je te tiens au courant dès que j'ai mis en oeuvre ce code. J'ai cependant vu qu'un dataset pouvait contenir plusieurs tables ainsi que des relation. Est-ce facile à mettre en oeuvre, ou l'emploi de MSDataShape est-il plus aisé :question)
Merci et à +
0
Rejoignez-nous