2008-12-09 7 views
0

Je veux être en mesure d'exécuter mon SqlDataProvider par rapport à une procédure stockée Oracle. Je peux utiliser le fournisseur Oracle de Microsoft mais cela ne me permettrait pas d'appeler une procédure stockée. Quelqu'un at-il pu faire fonctionner cela? Je veux particulièrement pouvoir utiliser la liaison de données déclarative. J'ai été en mesure de créer un DataTable par programmation, mais je veux le faire de manière déclarative dans le fichier .aspx.SqlDataSource et Oracle DataProvider Je ne peux pas sembler pouvoir utiliser le sqlDataprovider avec odp.net

Répondre

2

SqlDataProvider, SqlConnection et d'autres classes préfixées Sql à partir des espaces de noms System.Data font presque universellement référence aux implémentations spécifiques à SQL Server. Il est cependant possible d'appeler une procédure stockée à l'aide de la bibliothèque System.Data.oracleClient que Microsoft a libérée.

Veuillez vous assurer que lors de la construction d'OracleCommand, vous passez en CommandType. StoredProcedure. Sinon, le moteur de base de données utilisera par défaut l'accès direct à la table, et comme il ne trouvera pas de table portant le nom de votre procédure stockée, il tombera.

Voici quelques exemples de code sur la façon dont cela fonctionnerait dans les coulisses:

using (OracleConnection conn = new OracleConnection("connection string here")) 
{ 
    conn.Open(); 

    OracleCommand command = conn.CreateCommand(); 
    command.CommandType = CommandType.StoredProcedure; 

    command.CommandText = "DATABASE_NAME_HERE.SPROC_NAME_HERE"; 
    // Call command.Parameters.Add to add your parameters. 

    using (OracleReader reader = command.ExecuteReader()) 
    { 
     while(reader.Read()) 
     { 
      // Process each row 
     } 
    } 

} 

Lorsque vous utilisez ASP .NET, vous pouvez utiliser le SqlDataSource acces au client Oracle avec une chaîne de connexion définie comme:

<add name="OracleConnectionString" 
    connectionString="Data Source=YourServer;Persist 
    Security Info=True;Password="******";User ID=User1" 
    providerName="System.Data.OracleClient" /> 

Notez que nous avons le bit OracleClient ici. Ensuite, sur SqlDataSource, sélectionnez le CommandType sur StoredProcedure dans votre page ASPX, et le reste fonctionne à peu près comme SQL Server (en fait, vous devez le faire pour appeler la version SQL Server).

Le résultat ressemble un peu:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:OracleConnectionString %>" 
      ProviderName="<%$ ConnectionStrings:OracleConnectionString.ProviderName %>" SelectCommand='TEST_ONE' SelectCommandType="StoredProcedure" ></asp:SqlDataSource> 
+0

Microsoft a récemment annoncé le retrait du support d'Oracle. Maintenant, peut-être un bon moment pour se pencher à nouveau sur ODP. –

0

Voici les étapes pour retourner une table comme instruction select ::

1) Vous devez retourner un curseur pour le sélectionner, puis ajouter les paramètres io_cursor IN OUT CURSOR

2) Lorsque vous ajoutez un autre, il Consommez paramètre

<asp:Parameter Name="io_cursor" Direction="Output" /> 

3) Ajouter procédure d'événement pour l'événement 'en sélectionnant'

4) SqlDataSource1_Selecting vide protégé (expéditeur d'objet, SqlDataSourceSelectingEventArgs e) {((System.Data.OracleClient.OracleParameter) e.Command.Parameters [0 ]). OracleType = System.Data.OracleClient.OracleType.Cursor; }

Maintenant, cela fonctionnerait bien.

Questions connexes