Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - ADO.NET »

Обсудить на форуме Обсудить на форуме

Введение в ADO.NET II

Как, и обещали, здесь мы рассмотрим как получить результат выполнения хранимых процедур. Для этого надо всего лишь поменять значение параметра направления на ParameterDirection.Output.

Ниже приведен пример кода на C Sharp:

SQL Provider

using System.Data;
using System.Data.SQL;

public class SQLConnect {
   private SQLConnection dataConn = null;
   private SQLDataReader reader = null;
   
   public string openConnection(HttpResponse Response,String
                                 dbConnectString,String cmdString) {
   try {
      dataConn = new SQLConnection(dbConnectString);
      SQLCommand sqlCmd = new SQLCommand(cmdString,dataConn);
      sqlCmd.CommandType = CommandType.StoredProcedure;

         SQLParameter param = sqlCmd.Parameters.Add(new
                    SQLParameter("@CustomerID", SQLDataType.Char, 5));
      param.Direction = ParameterDirection.Input;
      sqlCmd.Parameters["@CustomerID"].Value = "ALFKI";
      param = sqlCmd.Parameters.Add(new SQLParameter("@output",
                                                          SQLDataType.Int));
      param.Direction = ParameterDirection.Output;

      dataConn.Open();
      sqlCmd.Execute(out reader);
      Response.Write("<table><tr><td><b>Product Name</b></td>");
      Response.Write("<td><b>Total</b></td></tr>");
      while (reader.Read()) {
         Response.Write("<tr>");
         Response.Write("<td>");
         Response.Write(reader["ProductName"].ToString());
         Response.Write("</td><td>");
         Response.Write(reader["Total"].ToString() + "</td>");
         Response.Write("</tr>");
      }
      Response.Write("</table>");
      Response.Write(sqlCmd.Parameters["@output"].Value;
      return "<p>SQL Server Data Connection Opened";
   }
   catch (Exception e) {
      return(e.ToString());
   }
   finally {
      if (reader != null) {
         reader.Close();
      }
      if (dataConn != null) {
         dataConn.Close();
      }
   }
   }
} // End Class

ADO+ Provider:

using System.Data;
using System.Data.ADO;

public class ADOConnect {
   private ADOConnection dataConn = null;
   private ADODataReader reader = null;
   public string openConnection(HttpResponse Response,String
                                 dbConnectString,String cmdString) {
   try {
      dataConn = new ADOConnection(dbConnectString);
      ADOCommand adoCmd = new ADOCommand(cmdString,dataConn);
      adoCmd.CommandType = CommandType.StoredProcedure;
      ADOParameter param = null;
      param=adoCmd.Parameters.Add("@CustomerID", ADODBType.Char, 5);
      param.Direction = ParameterDirection.Input;
      adoCmd.Parameters["@CustomerID"].Value = "ALFKI";

      param = adoCmd.Parameters.Add("@output",ADODBType.Integer);
      param.Direction = ParameterDirection.Output;

      dataConn.Open();
      adoCmd.Execute(out reader);
      Response.Write("<table><tr><td><b>Product Name</b></td>");
      Response.Write("<td><b>Total</b></td></tr>");
      while (reader.Read()) {
         Response.Write("<tr>");
         Response.Write("<td>");
         Response.Write(reader["ProductName"].ToString());
         Response.Write("</td>");
         Response.Write("<td>");
         Response.Write(reader["Total"].ToString());
         Response.Write("</td></tr>");
      }
      Response.Write("</table>");
      Response.Write(adoCmd.Parameters["@output"].Value;
      return "<p>ADO Server Data Connection Opened";
   }
   catch (Exception e) {
      return(e.ToString());
   }
   finally {
      if (reader != null) {
         reader.Close();
      }
      if (dataConn != null) {
         dataConn.Close();
      }
   }
   }
} //End Class

Возвращаемые значения процедур легко получаются следующим образом:
param = sqlCmd.Parameters.Add(new SQLParameter("RT_VAL", SQLDataType.Int));
param.Direction = ParameterDirection.ReturnValue;
...
Response.Write(sqlCmd.Parameters["RT_VAL"].Value;

ADO+ Provider:

param = adoCmd.Parameters.Add("RETURN_VALUE", ADODBType.Integer);
param.Direction = ParameterDirection.ReturnValue;
...
Response.Write(adoCmd.Parameters["RETURN_VALUE"].Value;

The DatasetCommand object. Как мы уже выяснили, Command Object может выполнять SQL запросы и хранимые процедуры. DatasetCommand object предоставляет ту же функциональность плюс дает возможность взаимодействовать с Dataset object. Вы можете работать с DatasetCommand так же, как и с Command, но появляется возможность поместить полученные данные в Dataset object. Ниже показан пример объявления и использования DatasetCommand object. Легко увидеть, что код - тот же самый за исключением того, что используются другие имена объектов.


SQL Provider:

dataConn = new SQLConnection(dbConnectString);
SQLDatasetCommand dsCmd = new SQLDatasetCommand(cmdString,dataConn);


ADO+ Provider:

dataConn = new ADOConnection(dbConnectString);
ADODatasetCommand dsCmd = new ADODatasetCommand(cmdString,dataConn);

Эти примеры заполнят некий Dataset данными, полученными при исполнения SQL скрипта. Например, SELECT * FROM Orders заполнит Dataset всеми колонками и строками, найденными в таблице Orders. Dataset может делать гораздо больше, чем просто помещать данные в Dataset. Возможно выполнение практически всех операций над БД, то есть он может быть объявлен как update, insert, delete Сommand. Например, вместо того, чтобы каждый раз предоставлять имя хранимой процедуры, используемой для обновления БД, вы можете объявить однажды метод Update() и вызывать его каждый раз при необходимости. Теперь, после того, как были сделаны изменения в Dataset dsOrders вы можете легко обновлять источник данных с помощью вызова Ds.Update(dsOrders)

Следующая наша статья будет полностью посвящена Dataset object и вариантам его использования. 


Может пригодится:


Автор: dotSite Team
Прочитано: 4225
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру