SqlDataSource и Oracle DataProvider Я не могу использовать sqlDataprovider с odp.net. - PullRequest
0 голосов
/ 10 декабря 2008

Я хочу иметь возможность запускать мой SqlDataProvider против хранимой процедуры оракула. Я могу использовать поставщик Oracle от Microsoft, но это не позволило бы мне вызвать хранимую процедуру. кто-нибудь смог заставить это работать? Я особенно хочу иметь возможность использовать декларативное связывание данных. Мне удалось программно создать DataTable, но я хочу сделать это декларативно в .aspx.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2008

SqlDataProvider, SqlConnection и другие классы с префиксом Sql из пространств имен System.Data почти повсеместно относятся к конкретным реализациям SQL-Server. Однако можно вызвать хранимую процедуру с помощью библиотеки System.Data.oracleClient, выпущенной Microsoft.

Убедитесь, что при создании OracleCommand вы передаете CommandType. StoredProcedure . В противном случае ядро ​​базы данных по умолчанию будет использовать прямой доступ к таблице, и, поскольку он не найдет таблицу с именем вашей хранимой процедуры, он упадет.

Вот пример кода о том, как это будет работать за кулисами:

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

}

При использовании ASP .NET вы можете использовать SqlDataSource для доступа к клиенту Oracle с помощью строки подключения, определенной как:

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

Обратите внимание, что у нас есть бит OracleClient. Затем на SqlDataSource установите Select CommandType , чтобы он был StoredProcedure на вашей странице ASPX, а остальное в значительной степени работает как SQL Server (на самом деле, вы должны сделать это для вызова версии SQL Server) ,

Результат выглядит примерно так:

  <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:OracleConnectionString %>"
            ProviderName="<%$ ConnectionStrings:OracleConnectionString.ProviderName %>" SelectCommand='TEST_ONE' SelectCommandType="StoredProcedure" ></asp:SqlDataSource>
0 голосов
/ 08 марта 2013

Вот шаги, чтобы вернуть табличный оператор выбора ::

1) Вы должны вернуть курсор для выбора, затем добавить в параметры io_cursor IN OUT CURSOR

2) При потреблении добавьте ДРУГОЙ параметр

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

3) Добавить процедуру события для выбора события

4) защищенный void SqlDataSource1_Selecting (отправитель объекта, SqlDataSourceSelectingEventArgs e) { ((System.Data.OracleClient.OracleParameter) e.Command.Parameters [0]). OracleType = System.Data.OracleClient.OracleType.Cursor; } * +1010 *

Теперь все будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...