SqlDataSource y Oracle DataProvider Parece que no puedo usar sqlDataprovider con odp.net

votos
0

Quiero poder ejecutar mi SqlDataProvider contra un procedimiento almacenado de Oracle. Puedo usar Oracle Provider de Microsoft, pero eso no me permite llamar a un procedimiento almacenado. ¿Alguien ha podido hacer que esto funcione? En particular, quiero poder utilizar el enlace de datos declarativo. Pude crear programáticamente una DataTable, pero quiero hacerlo declarativamente en .aspx.

Publicado el 09/12/2008 a las 22:02
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

SqlDataProvider, SqlConnection y otras clases Sql con prefijo de los espacios de nombres System.Data se refieren casi universalmente a implementaciones específicas de SQL-Server. Sin embargo, es posible invocar un Procedimiento almacenado utilizando la biblioteca System.Data.oracleClient que Microsoft ha lanzado.

Asegúrese de que al construir OracleCommand esté pasando CommandType. StoredProcedure . De lo contrario, el motor de la base de datos adoptará de forma predeterminada el acceso 'directo a la tabla', y dado que no encontrará una tabla con el nombre de su procedimiento almacenado, no funcionará.

Aquí hay un código de ejemplo sobre cómo esto funcionaría detrás de escena:

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
        }
    }

}

Al usar ASP .NET, puede usar SqlDataSource para acceder al cliente de Oracle con una cadena de conexión definida como:

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

Tenga en cuenta que tenemos el bit OracleClient allí. Luego, en SqlDataSource, establezca Select CommandType en él para que sea StoredProcedure en su página ASPX, y el resto prácticamente funciona como SQL Server (de hecho, en realidad tiene que hacer esto para llamar a la versión de SQL Server).

El resultado se parece un poco a:

  <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:OracleConnectionString %>"
            ProviderName="<%$ ConnectionStrings:OracleConnectionString.ProviderName %>" SelectCommand='TEST_ONE' SelectCommandType="StoredProcedure" ></asp:SqlDataSource>
Respondida el 14/12/2008 a las 12:40
fuente por usuario

votos
0

Éstos son los pasos para devolver una instrucción de selección de tabla de ::

1) Usted debe devolver un cursor para la selección, a continuación, añadir en los parámetros io_cursor IN OUT CURSOR

2) Cuando se consumen añadir otro parámetro

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

3) Añadir el procedimiento de evento para el evento 'selección'

4) protegida SqlDataSource1_Selecting void (remitente del objeto, SqlDataSourceSelectingEventArgs e) {((System.Data.OracleClient.OracleParameter) e.Command.Parameters [0]) OracleType = System.Data.OracleClient.OracleType.Cursor.; }

Ahora que funcionaría bien.

Respondida el 08/03/2013 a las 19:05
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more