|
|
Введение в ADO.NET II
Введение в 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 и вариантам
его использования.
|