Введення в 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 і
варіантів його використання.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*