Введення в ADO.NET II, ​​ADO.NET, ASP, статті

Як, і обіцяли, тут ми розглянемо як отримати результат виконання процедур, що зберігаються. Для цього треба всього лише поміняти значення параметра направлення на 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>

*

*