Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

В тридцать первом выпуске рассылки '.Net Собеседник'


Информационный Канал Subscribe.Ru

.Net Собеседник #31

Содержание
  1. От автора
  2. Обзор новостей
  3. Строим независимые от конкретной БД приложения ASP.NET
  4. Время кода - Деструктор и метод Dispose
  5. Форумы .Net на www.sql.ru

От автора

Здравствуйте, коллеги!

Что на самом деле стоит за таким привычным свойством, можно увидеть на примере. А стоит за этим, как мы видим, пара методов для установки/считывания значения поля.

class SimpleProperty
{
static int i;
// здесь при компиляции будет выдаваться ошибка, поскольку
// эти методы автоматически создаются компилятором при создании свойства
// WorkWithI
// public int get_WorkWithI()
// {
// return i;
// }
// public int set_WorkWithI(int i)
// {
// this.i = i;return 0;
//
}
public static int WorkWithI
{
set {i = value;}
get {return i;}
} }


На этом всё - желаю интересного чтения.

{К содержанию}

Обзор новостей

  1. Microsoft и «Кварта Технологии» объявляют конкурс программ для планшетных ПК
    Планшетные ПК — новая ступень эволюции портативных компьютеров, открывающая перед пользователями широкие горизонты мобильности, удобства и качества работы. Цель конкурса — привлечь внимание разработчиков к новой платформе, позволяющей реализовать в их программах функции, ранее недоступные ни на настольных ПК, ни на ноутбуках. Уникальный форм-фактор, управление интерфейсом при помощи пера, поддержка рукописного ввода и распознавания естественного почерка, развитые коммуникационные функции — все эти особенности планшетных ПК позволяют разработчикам создавать еще более удобные и полезные программы для мобильных пользователей.
    «Корпорация Microsoft стремится стимулировать разработку новых программ для планшетных ПК и адаптацию существующего ПО для полного использования новых возможностей, предоставляемых планшетными ПК и операционной системой Microsoft Windows XP Tablet PC Edition 2005. Мы верим, что российские разработчики внесут достойный вклад в развитие мирового рынка программ для планшетных ПК», — говорит Алексей Чубарь, директор департамента стратегических технологий ООО «Майкрософт Рус».
    Разработка программ для планшетных ПК, работающих под управлением операционной системы Microsoft Windows XP Tablet PC Edition, производится с помощью знакомых разработчикам средств, используемых для создания обычных приложений для Windows, и стандартного SDK (Tablet PC SDK 1.7). Всем участникам, подавшим заявку на конкурс, предоставляется среда разработки Microsoft Visual Studio .NET 2003 Professional. «Выход на рынок Windows XP Tablet PC Edition 2005 с русским интерфейсом и использование программного пакета „Русский пакет расширений для планшетных ПК“ от „Кварта Технологии“ для распознавания слитного русского рукописного ввода позволят разработчикам создавать приложения, ориентированные на российского потребителя, в полной мере использующие все возможности планшетных ПК», — говорит Тарас Демьянков, директор компании «Кварта Технологии».
    Конкурс проводится по трем номинациям:
    новая разработка,
    адаптация существующего ПО,
    мультимедийное приложение или приложение для вертикального рынка.
    Каждая из представленных работ принимается на конкурс только по одной номинации. Авторы самых удачных разработок по каждой из номинаций награждаются призами:
    1 место — оплата перелета, проживания и участия двух человек в конференции Microsoft Tech-Ed 2005 в Амстердаме 5-6 июля 2005 г.,
    2 место — два компьютера Tablet PC из представленных на рынке,
    3 место — занесение в общемировой каталог решений для Tablet PC.
    Участие в конкурсе позволит разработчикам заявить о себе в новом, бурно развивающемся сегменте рынка ПО.
    Получить дополнительную информацию по условиям участия в конкурсе, а также зарегистрироваться для участия можно на сайте www.tablet.ru.
  2. Вышел Dundas Gauge 1.5 для .NET
    Dundas Software объявила о выходе Dundas Gauge 1.5 для .NET. В версии 1.5 присутствуют интерактивные шкалы для веб, рендеринг во флэш, новый стиль шкалы Knob и т.д.
  3. Вышел генератор кода/мэппер MyGeneration 1.0
    MyGeneration Software выпустила 100% бесплатный генератор кода и инструмент мэппинга. MyGeneration поддерживает Microsoft SQL, Oracle, IBM DB2, MySQL, PostgreSQL, Microsoft Access, FireBird, Interbase, SQLite и VistaDB.
  4. Вышла VistaDB 2.0.12
    VistaDB 2.0.12 - движок БД, вышедший с большим количеством улучшений: на 60% меньше объём, необходимый к поставке вместе с приложением (теперь только 400kb), исходники на C# для провайдера ADO.NET, более быстрый доступ к данным на общих сетевых ресурсах, новое демо на C# и VB.NET с исходными кодами, поддержка Delphi 2005 и т.п.
  5. Вышла новая версия панели eStream PanelBar.NET 1.4
    eStream PanelBar.NET позволяет разработчикам создавать мощные и привлекательные меню для asp.net приложений буквально двумя строчками кода.
  6. Вышел OraDirect .NET с поддержкой .NET Framework 2.0
    Команда Core Lab объявляет о выходе новой версии провайдера данных OraDirect .NET Data Provider версии 2.50 с поддержкой .NET Framework 2.0, Visual Studio .NET 2005 Beta, Borland Delphi 2005.

{К содержанию}

Строим независимые от конкретной БД приложения ASP.NET

Строим независимые от конкретной БД приложения ASP.NET

ЯЗЫК:
Автор статьи: Fredrik Ålund

ПЕРЕВОД: Чужа В.Ф. ака hDrummer
КОД К СТАТЬЕ: MpmWeb.zip (18 024 KB)

В этой статье мы покажем вам как написать независимое от баз данных и провайдеров данных веб-приложение с помощью технологии ASP.Net и ADO.Net, используя новый менеджер поставщиков данных Mimer Provider Manager (MPM).

Почему Mimer Provider Manager?

Когда вы разрабатываете приложения, использующие базы данных с помощью технологии ADO.NET, то вы используете поставщики данных для разных БД. Такой подход не позволяет писать приложения, независимые от БД. Система Mimer Provider Manager позволяет строить эффективные приложения, которые могут работать с различными базами данных без изменения кода. Mimer Provider Manager использует унифицированный интерфейс, инкапсулирующий работу с БД различных поставщиков, позволяя строить гибкие приложения для работы с БД.
Mpm использует различные плагины для доступа к различным провайдерам ADO.NET. С точки зрения приложения Mpm является просто ещё одним поставщиком данных ADO.NET, так что свою программу можно разрабатывать привычным способом. На данный момент плагины разработаны для Oracle, SQL Server, Mimer SQL, Odbc, и OleDb. Есть также общий плагин, поддерживающий любого провайдера, используя отражение, правда из-за этого он немного медленнее работает.
Фильтры SQL – это другая интересная особенность Mpm. Эта технология позволяет вам писать фильтры, которые модифицируют SQL-запрос, отсылаемый базе данных. Таким образом можно выполнять автоматическую конвертацию между различными диалектами SQL, чем достигается настоящая независимость от БД. Фильтр, поддерживающий различные типы параметров, поставляется с Mpm, а также вы легко можете написать свои собственные фильтры.
Mpm следует схеме именования ADO.NET. Например, для создания соединения используется класс MpmConnection. Это означает, что для конвертации существующей системы для поддержки Mpm необходимо всего лишь заменить поставщик данных.
Определения источников данных, плагинов и фильтров SQL могут храниться в конфигурационном файле и поставляться с приложением, так что вам не придётся ничего конфигурировать на клиенте. Также эти конфигурационные данные можно хранить в реестре. Сборки Mpm устанавливаются в Global Assembly Cache (GAC), но можно их устанавливать в каталог вашего приложения и использовать их вне зависимости от наличия в GAC.
Mpm включает Mimer Provider Manager Administrator, который может быть использован для определения источников данных, доступных приложению. А поскольку в приложении вы указываете только имя источника данных, то переключать БД можно на лету – не затрагивая кода приложения. Этот Администратор можно использовать также для того, чтобы сообщить системе, какой из фильтров SQL вы собираетесь использовать и какие плагины загружать. Другими словами, вам ничего не нужно менять в коде для того, чтобы сменить фильтр, конвертирующий ваши запросы к Microsoft SQL Server на запросы к Oracle или в запросы ANSI SQL. Кроме редактирования глобальных настроек Mpm, вы можете создавать и редактировать конфигурационные файлы, специфичные для вашего приложения, включая web.config. Секция Mpm будет создана для вас в этих файлах, если она там ещё не существует. Mimer Provider Manager Administrator широко поддерживает технологию «перетащи и брось». Это означает, что можно легко переключаться от использования глобальной конфигурации к локальной, используя два экземпляра Администратора, один с глобальной, а другой – с локальной конфигурациями и просто перетаскивать между ними плагины, фильтры и источники данных.
Mimer Provider Manager Administrator упрощает построение строк соединений путём использования Сетки свойств. Ваша строка строится путём выбора соответствующих настроек из ниспадающих списков. При смене БД настройки будут автоматически конвертироваться к синтаксису нового поставщика данных.
Mpm интегрирован в Visual Studio .NET, так что вы можете перетаскивать MpmCommands, MpmConnections и т.п. на ваши формы. Документация также интегрирована, поэтому с ней можно ознакомиться как с любой стандартной документацией компании Microsoft, включая динамическую помощь. Также присутствует механизм, разработанный для генерации новых плагинов. Он исполнен в виде волшебника Visual Studio .NET. Mpm поддерживает концепцию выполнения «бок-о-бок», так что несколько разных версий системы могут быть установлены на один компьютер и исполняться параллельно.

Браузер БД в виде веб-риложения

Для демонстрации работы с Mpm мы разработали небольшое веб-приложение ASP.NET, использующее Mpm. В этом приложении вы можете выбрать источник данных и просмотреть существующие таблицы. Приложение разработано с помощью языка C#. Архитектура ADO.NET позволяет вам работать с БД в подсоединённом состоянии, либо в отсоединённом. В подсоединённой модели поставщик данных используется для соединения с БД, выполнения команд и получения результатов. В отсоединённой модели используется DataAdapter. Мы также будем выполнять всю работу в основном с его помощью. Однако, мы будем использовать MpmCommand и MpmDataReader для получения списка таблиц БД. Важной частью пользовательского интерфейса являются два ниспадающих списка DropDownLists и одна сетка данных DataGrid.

Для заполнения ниспадающего списка именами БД мы используем класс Mimer.Mpm.Data.Extensions.MpmInfo:

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
dropDownDataSource.DataSource = MpmInfo.DataSourceNames;
dropDownDataSource.DataBind();
}}

Класс MpmInfo используется для получения информации в режиме времени выполнения о системе Mpm, например такой, как доступные источники данных, фильтры SQL и плагины.

Когда источник данных выбирается в ниспадающем списке DropDownList, то вызывается метод dropDownDataSource_SelcectedIndexChanged(...). Он в свою очередь вызывает GetTables(string dataSoure) передавая в виде параметра выбранный источник данных. GetTables(...) получает все доступные таблицы в БД, используя стандартное представление INFORMATION_SCHEMA:

private void GetTables(string dataSource)
{
MpmCommand tableCommand = null;
MpmConnection mpmConnection = new MpmConnection("Data Source Name=" + dataSource);
MpmDataReader reader = null;
dropDownTables.Items.Clear();
try
{
if(mpmConnection.DataSourceDescriptor.DbmsType == MpmDbmsTypes.Oracle)
{
throw new NotSupportedException("Oracle does not have INFORMATION_SCHEMA by default");
}
mpmConnection.Open();
tableCommand = mpmConnection.CreateCommand();
tableCommand.CommandText = "select table_schema, table_name from information_schema.tables where table_type='BASE TABLE'";
reader = tableCommand.ExecuteReader();
ListItem li;
while(reader.Read())
{
li = new ListItem(reader.GetString(0) + "." + reader.GetString (1), "\"" + reader.GetString(0) + "\"." + "\"" + reader.GetString(1) + "\"");
dropDownTables.Items.Add(li);
}
}
catch(MpmException mex)
{
//Handle the error
throw mex;
}
finally
{
if(reader != null)
{
reader.Close();
}
if(mpmConnection.State != ConnectionState.Closed)
{
mpmConnection.Close();
}}}

Как вы видите, составные, использующие ADO.NET, такие же, как и при использовании любого другого поставщика данных, единственное отличие – упрощенная строка соединения и схема наименования Mpm.

Код, приведенный выше, заполняет ниспадающий список доступными таблицами когда одна из них выбрана, вызывает метод dropDownTables_SelectedIndexChanged(...). Этот метод вызывает LoadDataSet(string tableName), который строит DataSet, а мы её привязываем к нашей сетке данных DataGrid:

private void dropDownTables_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(dropDownDataSource.SelectedItem.ToString() != "" && dropDownTables.SelectedItem.ToString() != "")
{
LoadDataSet(dropDownTables.SelectedItem.Value);
DataSet ds = (DataSet)Session["ds"];
Session["tableName"] = dropDownTables.SelectedItem.Value;
dataGrid.DataSource = ds.Tables[Session["tableName"].ToString()].DefaultView;
dataGrid.Enabled=true;
dataGrid.CurrentPageIndex = 0;
dataGrid.DataBind();
dataGrid.Visible = true;
} }

private void LoadDataSet( string tableName)
{
try
{
StringBuilder selCmd = new StringBuilder();
string conStr = "Data Source Name=" + dropDownDataSource.SelectedItem.ToString();
MpmConnection mpmConnection = new MpmConnection(conStr);
selCmd.Append("select * from ");
selCmd.Append(tableName);
MpmDataAdapter mpmDataAdapter = new MpmDataAdapter(selCmd.ToString(), mpmConnection);
DataSet ds = new DataSet();
mpmDataAdapter.Fill(ds, tableName);
Session["ds"] = ds;
}
catch(MpmException mex)
{
//Handle the error
throw mex;
} }

Итоговый набор данных DataSet хранится в сессии пользователя, поскольку в приложении мы поддерживаем разбиение на страницы. Вместо пересоздания DataSet из БД мы просто берём её из сессии пользователя. Это конечно не лучшее решение при большом количестве пользователей и больших таблицах, поскольку потребует большого объёма памяти. Поэтому альтернативно можно использовать метод mpmDataAdapter.Fill(ds, startRecord, maxRecords, tableName).

Несколько строк кода, которые мы здесь показали, и используются для работы с БД в приложении-примере. И этого вполне достаточно для построения браузера баз данных, способного просматривать любую доступную на сервере таблицу.
Более подробно о системе MPM можно узнать на сайте http://developer.mimer.com/mpm или посетив страницу http://www.sourceforge.net/projects/mimerpm .

{К содержанию}

Время кода

Деструктор и метод Dispose

ЯЗЫК: C#
АВТОР: Чужа В.Ф.,
dotnetgrains.sql.ru

Как вы знаете, в C# существует понятие деструктора, не смотря на то, что сборщик мусора автоматически собирает неиспользуемые объекты, удаляя их из памяти (конкретно – из управляемой кучи). Деструктор существует для того, чтобы освобождать ценные ресурсы при уничтожении объекта и вызывается автоматически, если, конечно существует. Для этих же целей существует и метод Dispose, который объявлен в интерфейсе IDisposable, и служащий для унификации имени метода, предназначенного для НЕМЕДЛЕННОГО освобождения тех же ценных ресурсов – в этом его главное отличие от деструктора, вызываемого по милости Сборщика Мусора.

using System;

namespace hDrummer.DestructorAndDispose
{
class TestDD
{
[STAThread]
static void Main(string[] args)
{
// если просто создадим объект,
// то после завершения исполнения метода
// он выйдет за область видимости и при уничтожении
// GC будет вызван деструктор
DD d = new DD();
// Если вызвать метод Dispose, то объект вызывает dispose немедленно
// для освобождения ценных ресурсов
// d.Dispose();

Console.ReadLine();
// после отработки метода вызовется и деструктор
}

class DD :IDisposable
{
~DD()
{
Console.WriteLine("Running destructor");
}
#region члены IDisposable

public void Dispose()
{
Console.WriteLine("Running Dispose method");
}

#endregion
} } }

На этом всё.


{К содержанию}

Форумы .Net - вопросы оставшиеся без ответа

Problem with reflection in designer for custom control
Как настроить IIS версии 6.0 на публикацию asp-страниц?
Что я делаю нетак (ExecuteOracleScalar)
есть COM-Object на С++ и клиент JavaScript
две таблицы Parent-Child и 2 комбобокса - проблема
KeyPreview
Вопрос по Crystal Reports
перемещение по DBGrid



На этом тридцать первый выпуск .Net Собеседника закончен.
До следующего номера.


Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения и замечания.


Рассылки Subscribe.Ru
.Net Собеседник - Новости мира Net, C#, ASP.Net

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.dotnetgrains
Отписаться

В избранное