Как вызвать следующую функцию oracle в ADO.NET использование asp.net с#

#c# #asp.net #.net #oracle #ado.net

#c# #asp.net #.net #Oracle #ado.net

Вопрос:

Как вызвать следующую функцию oracle в ADO.NET использование asp.net с#

  CREATE FUNCTION AuthenticateUser(UserName IN VARCHAR2,Password IN VARCHAR2)
   RETURN NUMBER 
    IS
  Counts NUMBER;
  rval  Number;
   BEGIN 
       SELECT COUNT(USERNAMES) 
       INTO Counts 
       FROM tblUsers WHERE USERNAMES = UserName AND PASSWORDS = Password; 
       IF Counts = 1 THEN
      rval:=1;
       ELSE
     rval:=-1;
    END IF;
     RETURN(rval); 
    END;
 

Ответ №1:

Сначала вам понадобится Oracle ADO.NET библиотека (что-то вроде Oracle.DataAccess.dll ?), И я не уверен, где вы могли бы это получить, но Oracle должна быть в состоянии помочь с этим. Как только у вас это будет, вы будете использовать объекты, которые он предоставляет, для выполнения запросов. Например, если вы хотите заполнить a DataSet из запроса, это может выглядеть так:

 using (var connection = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleDB"].ConnectionString))
using (var command = new OracleCommand(query, connection))
using (var dataAdapter = new OracleDataAdapter(command))
using (var dataSet = new DataSet())
{
    connection.Open();
    dataAdapter.Fill(dataSet);
    connection.Close();
    return dataSet;
}
 

Обратите внимание на объекты, подобные OracleConnection и OracleCommand которые поступают из этой библиотеки. Пока у вас есть допустимая строка подключения Oracle, эти объекты должны работать нормально:

 <add name="OracleDB" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=some.host.name)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEV)));User Id=username;Password=password;"
  providerName="Oracle" />
 

Ответ №2:

Я думаю, это должно сработать. Это предполагает, что вы правильно настроили свое соединение с объектом «conn».

  OracleCommand cmd = new OracleCommand(@"select AuthenticateUser(:USER, :PASS) "  
     "from dual", conn);
 cmd.Parameters.Add(new OracleParameter("USER", OracleDbType.VarChar));
 cmd.Parameters.Add(new OracleParameter("PASS", OracleDbType.VarChar));
 cmd.Parameters[0].Value = "yoda";
 cmd.Parameters[1].Value = "jed1!";

 int result = (int)cmd.ExecuteNonQuery();
 

Кроме того, я знаю, что встроенный SQL не рекомендуется, но я надеялся, что это продемонстрирует концепцию.

Комментарии:

1. можете ли вы рассказать мне о insql? и ваш приведенный выше код является встроенным sql

2. Я просто имею в виду, что обычно (хотя и не повсеместно) плохой практикой является помещение вашего буквального SQL (в кавычки) так, как я это делал, когда создавал объект cmd. В данном случае я действительно не думаю, что это так уж плохо, и это упрощает пример и демонстрирует суть. По правде говоря, я бы, вероятно, оставил код таким. Если ваш SQL содержит 100 строк, эта методология оставляет желать лучшего, и есть лучшие способы сделать это.

3. Я почти уверен, что если у вас есть объект connection и введите правильного пользователя и пароль, это сработает.

4. Что вы используете для oracle OPD. ЧИСТЫЙ или ADO.NET для oracle

5. ODP.net . dotConnect от devArt также будет работать. Я неравнодушен к dotConnect, но ODP.net определенно получает доступ ко всем классным низкоуровневым функциям Oracle DB