Рассылка закрыта
При закрытии подписчики были переданы в рассылку "BloggLand и Я | Блоггландия" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
В девятнадцатом выпуске рассылки '.Net Собеседник' вы можете прочесть обзор новых компонент и продуктов, разработанных с использованием платформы .Net,
Информационный Канал Subscribe.Ru |
.Net Собеседник #19
Содержание- От автора
- Обзор новостей
- Статья выпуска - Отслеживаем пользователя на страницах сайта с помощью ASP.Net (начало)
- Время кода - Динамическое добавление DSN
- Форумы .Net на www.sql.ru
От автора
Здравствуйте, коллеги!
Язык C# обладает мощными средствами форматирования строк, позволяющими
оригинально решить многие проблемы не прибегая к излишним хитростям. Синтаксис
использования этих средств достаточно прост. Однако при нечастом использовании
легко забывается. Думаю, что эта простая таблица поможет вам в случае
необходимости вспомнить нужный символ, здесь приведены символы форматирования
чисел:
Параметр | Значение |
C* | Значение выводится в денежном формате. |
D | Выводятся десятичные значения. Если после буквы указано число, то оно будет означать количество выводимых знаков. |
E | Вывод числа в экспоненциальном виде. |
F | Фиксированная точность. |
G | Общий формат. |
N | Форматирует число с использованием разделителей между разрядами. |
X | Вывод значения в шестнадцатиричном виде. |
* такой же эффект дают строчные буквы |
static void Main(string[] args)
{ int i = 1000; decimal j = 1000.05M; < BR > Console.WriteLine("Итого : {0:c}", i); // Итого : 1 000,00 р. Console.WriteLine("Итого : {0:c}", j); // Итого : 1 000,05 р. Console.WriteLine("Итого : {0:D10}", i); // Итого : 0000001000 Console.WriteLine("Итого : {0:E}", i); // Итого : 1,000000E+003 Console.WriteLine("Итого : {0:E}", j); // Итого : 1,000000E+003 Console.WriteLine("Итого : {0:F}", i); // Итого : 1000,00 Console.WriteLine("Итого : {0:F}", j); // Итого : 1000,05 Console.WriteLine("Итого : {0:G}", i); // Итого : 1000 Console.WriteLine("Итого : {0:G}", j); // Итого : 1000,05 Console.WriteLine("Итого : {0:N}", i); // Итого : 1 000,00 Console.WriteLine("Итого : {0:N5}", i); // Итого : 1 000,00000 Console.WriteLine("Итого : {0:N}", j); // Итого : 1 000,05 Console.WriteLine("Итого : {0:N5}", j); // Итого : 1 000,05000 Console.WriteLine("Итого : {0:X}", i); // Итого : 3E8 } |
Но это уже тема для отдельной статьи.
Обзор новостей
-
Вышел
Aspose.Office 2.0
- Набор компонет, включающий компоненты для чтения и записи в файлы MS Office – такие, как Aspose.Excel, Aspose.Word, Aspose.PowerPoint и Aspose.Project.
-
Вышел TransKing 1.56, доступен
к бесплатной загрузке
- TransKing – это инструмент для конвертирования проектов VB и VB.NET в проекты на C# одним щелчком мыши.
-
ComponentOne® выпускает ComponentOne Doc-To-Help 7.2 Professional
- Новая профессиональная версия Professional 7.2 экономит время разработчиков на платформе .NET путём автоматизации документирования объектной модели и т.п.
-
Вышла Nevron Diagram для WinForms
3.0
- Профессиональный компонент для визуализации диаграмм для Windows Forms, который годится для отображения графиков, диаграмм, моделей БД и т.д.
-
CenterSpace Software анонсировала NMath Stats 2.0
- CenterSpace Software начала поставки NMath Stats 2.0, мощной библиотеки .NET, поддерживающей статистические вычисления.
-
Вышел Graphics
Server .NET 2.0
- Graphics Server Technologies, LP объявила о выходе Graphics Server .NET 2.0. Этот новый апгрейд содержит много инноваций, среди которых Design Time Click and Drag.
-
Новая
статья: Программное использование Windows Clipboard
- Windows использует Clipboard для хранения данных, которые необходимо передать из одного приложения в другое. Чаще всего вы используете знаменитые Ctrl+X, Ctrl+C и Ctrl+V для вырезания, копирования и вставки данных. Однако, иногда вам может быть необходимо вставить данные в клипбоард через код. В этом случае можно использовать класс Clipboard…
-
Доступен плагин VSCmdShellWindow Visual Studio 2003
- Плагин для Visual Studio 2003 (да и скорее всего для 2005) , VSCmdShellWindow – это инструмент, создающий оболочку cmd.exe внутри IDE. Он позволяет вам выполнять команды Visual Studio из вашего текущего каталога.
-
Вышла документация для SQL Server 2005 Express
- На сайте Microsoft Download Center появилась документация по SQL Server 2005 Express (наследника MSDE) .
-
Вышел
Aspose.Component 2.0
- Набор компонент, включающий такие комопненты, как Aspose.Excel, Aspose.Word, Aspose.PowerPoint, Aspose.Project, Aspose.Pdf, Aspose.Chart, Aspose.Spell, Aspose.Recurrence.
- FIX: A System.ArgumentException exception occurs when you try to create a Windows form that inherits from a Windows form that contains a dataset
- "Argument '3': cannot convert from 'System.TimeSpan' to 'System.Management.ObjectGetOptions'" error message when you use the System.Management.ObjectGetOptions enumeration in Visual C# .NET
- The ASP.NET worker process restarts before the timeout setting has lapsed
- How to handle Office PowerPoint 2003 events by using Visual Basic .NET 2003
- How to sum the fields in a Windows Forms DataGrid control and display the calculated totals in a footer by using Visual C# .NET
Статья выпуска
Отслеживаем пользователя на страницах сайта с помощью ASP.Net (начало)
ЯЗЫК: C#, ASP.Net
Автор статьи: Vikram
http://www.codeproject.com/
Код к статье :
Демонстрационный проект
Вступление
Location - Location - Location
<html>
<body> <script language="Javascript" src="http://gd.geobytes.com/Gd?after=- 1&variables=GeobytesCountry,GeobytesCity,GeobytesRegion"> </script> <script language="javascript"> if(typeof(sGeobytesCountry) != "undefined" && typeof(sGeobytesRegion) != "undefined" && typeof(sGeobytesCity) != "undefined") { var url = 'index.aspx?IPCity='+sGeobytesCity+'&IPRegion='+ sGeobytesRegion+'&IPCountry='+sGeobytesCountry; document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL="+url+"'>"); } else { document.write("<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.aspx'>"); } </script> </body> </html> |
Проблемы с сессионным состоянием
Если вы разрабатываете масштабируемое веб-приложение в ASP.NET, то рано или
поздно вам придется изменить ваше сессионное состояние с InProc на StateServer
или SQLServer. Во время изучения ASP.NET мы всегда использовали сессии InProc,
однако потом нам приходилось изменять сессионное состояние на StateServer – из
соображений масштабируемости. Есть прекрасный
FAQ по Session State от Patrick Y. Ng на сайте ASP.NET и он стоит того,
чтобы быть прочитанным, поскольку в нем подробно рассказано о сессионном
состоянии.
- Событие Session_End не поддерживается в режиме StateServer или SQLServer.
- При использовании режима StateServer или SQLServer объекты должны быть сериализованы.
Отслеживание страниц ASP.NET
Я не ставил себе целью заново изобрести отслдеживание страниц в ASP.NET. Все, что я хотел – всего лишь заставить работать код Wayne's для всех трех случаев. Я перечислил изменения, которые я сделал в этом коде из-за ограничений, указанных выше.
- Сымитировать событие Session_End в режиме StateServer или SQLServer Session путем создания объекта кэша с событием, которое произойдет точно в момент окончания сессии
- Этот подход имеет свои недостатки, поскольку объекты сессии будут уже недоступны при имитации события session_end, т.к. ASP.NET уже уничтожит сессию к тому моменту, когда мы попытаемся получить к ней доступ.
- Мы имитируем объект сессии путем создания простой статической хэш-таблицы, в которой будут находиться наши объекты до прекращения существования сессии.
- Создадим класс Session Tracker
- Сохранить этот класс в сессии ASP.NET
- Использовать куки для хранения предыдущих значений переменных, которые мы хотим отслеживать
- Обновлять класс-отслеживатель в сессии при посещении странички пользователем
- Публиковать данные при возникновении событий session_start и session_end
- Отображать итоговую страницу статистики посещений по окончании сессии
- Создать класс Tracker для модифицированной сессии.
- Симулировать событие session_end по окончании сессии.
- Сохранить этот класс в статической хеш-таблицы при посещении страницы пользователем.
- Обновить класс – отслеживатель в статической хеш-бталице при посещении страницы пользователем.
- Публиковать данные при возникновении событий session_start и session_end
- Отображать итоговую страницу статистики посещений по окончании сессии
В файле global.asax.cs содержатся методы выполняющиеся в ответ на определенные события. Каждое веб-приложение содержит свой собственный файл global.asax.cs, но я не использую этот файл, а в место него использую HTTP Module по следующим причинам:
- Http Module может быть многократно использован в различных веб-приложениях, разрабатываемых вами.
- Нет необходимости копировать код из одного файла global.asax нашего веб-приложения в другое веб-приложение, если код должен быть одинаков для всех таких приложений.
- Храним общий код в своей собственной библиотеке и используем эту библиотеку во всех веб-приложениях
В моем демонстрационном проекте есть небольшая библиотека EADFramework. EAD расшифровывается как Enterprise Application Development. Создайте ссылку на эту библиотеку классов в своем веб-проекте. Модифицируйте файл web.config для регистрации HttpModule и установите параметры используемые вашим Page Tracking.
<?xml version="1.0" encoding="utf-8" ?>
<configuration> <appSettings> <add key="MailFrom" value="yourMailFrom@yourserver.com" /> <add key="MailTo" value="yourMailTo@yourserver.com" /> <add key="SmtpServer" value="smtp.yourmailserver.com" /> <add key="SiteTracking" value="Full" /> <add key="ExcludeIPList" value="127.0.0.1,10.,192.168,172.16" /> </appSettings> <system.web> <httpModules> <add name="EADHttpModule" type="EAD.Controller.EADHttpModule, EADFramework" /> </httpModules> <compilation defaultLanguage="c#" debug="true" /> <br><trace enabled="false" requestLimit="10" pageOutput="false" traceMode= "SortByTime" localOnly="true"/><br><sessionStatemode="StateServer"stateConnectionString="tcpip=127.0.0.1:42424" timeout="20" /> </system.web> </configuration> |
(окончание в следующем номере)
Время кода
Динамическое добавление DSN
ЯЗЫК: C#
АВТОР: Bas Goedemans, http://www.codeproject.com/
ПЕРЕВОД: Чужа В.Ф ака hDrummer
Вступление
Начнём с того, что обычно я использую OLEDB-соединение к БД. Но после того, как я столкнулся с ошибкой в .NET Framework (в европейской, в моём случае датской версии, теряется десятичный разделитель из-за того, что это не точка). У меня просто не было другого выбора и я стал использовать ODBC – в нём такой ошибки нет. Всё бы ничего, если бы не эти чёртовы DSN-имена. У меня не было никакого желания добавлять DSN-имена вручную, я обшарил всю сеть и… не нашёл ничего. После того, как я получил несколько подсказок на форуме Microsoft, я решил написать эту статью. Используем вызовы функций API для динамического создания имён DSN.
Строим класс
Импорт API
Для того, чтобы импортировать ODBCCP32.dll, которая и содержит необходимую функцию API, мы должны добавить ссылку на пространство имён InteropServices.
using System.Runtime.InteropServices; |
Теперь можно импортировать dll и создать наше свойство:
[DLLImport("ODBCCP32.dll")] private static extern bool SQLConfigDataSource(IntPtr parent, int request, string driver, string attributes); |
Параметр parent ссылается на хэндл родительского окна и может быть установлен в 0. Параметр request является числом от 1 до 6 и обозначает запрашиваемое действие. Вот список этих действий:
- ODBC_ADD_DSN (используется для добавления пользовательского DSN)
- ODBC_CONFIG_DSN (используется для конфигурирования пользовательского DSN)
- ODBC_REMOVE_DSN (используется для удаления пользовательского DSN)
- ODBC_ADD_SYS_DSN (используется для добавленияuse системного DSN) ODBC_CONFIG_SYS_DSN (используется для конфигурирования системного DSN)
- ODBC_REMOVE_SYS_DSN (используется для удаления системного DSN)
Создаём другие методы
Теперь можно создать и методы, которые потом с лёгкостью можно использовать. Давайте предположим, что мы будем всегда подсоединяться к БД Microsoft Access. В этом случае нам необходимо знать только имя DSN и путь к БД. Итак, наш метод AddUserDSN будет выглядеть так:
public bool AddUserDSN(string DSName, string DBPath)
{ returnSQLConfigDataSource((IntPtr)0,1,"MicrosoftAccessDriver(*.MDB)\0","DSN="+DSName+"\0Uid=Admin\0pwd=\0DBQ=" + DBPath + "\0"); } |
Этот метод вернёт true, если действие будет выполнено успешно. Теперь мы можем так вызвать наш метод:
DSNAdmin.AddUserDSN("MyDSNName", @"C:\MyDBPath\MyDB.mdb"); |
Теперь пользователям не надо искать конфигурационный диалог DSN-имени, они могут изменять путь к БД без того, чтобы заботиться об изменении свойств DSN стандартными методами.
{К содержанию}
Форумы .Net - вопросы оставшиеся без ответа
Как IErrorInfo.GetDescription failed with DB_E_NOLOCALE(0x80040E41). Как сохранить данные из ADO Recordset, что бы распечатать?По поводу нового форума
добавление удаление в DataGrid
Генерация Exel с помощью ASP
Работа с SVGView
чем отличается объявление скрипта в заголовке страницы от объявления в теле?
FronPage Server Extensions
передача параметров при загрузке страницы
Не могу прочитать из АД !?!
Unable to create a new web project
WinForm - подскажите, можно ли печатать с prinpreviewDialog xls-файлы?
как научить TcpListener видеть нескольких клиентов?
Как определить высоту в пикселях TaskBar-а ?
cmd.executeNonQuery возвращает после ~20-30 секунд...
На этом девятнадцатый выпуск .Net Собеседника закончен.
До следующего номера.
Чужа Виталий Ф. aka hDrummer,
hdrummer@sql.ru - жду ваши предложения, вопросы и замечания.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Адрес подписки |
Отписаться |
В избранное | ||