Кратко съдържание 2
Съдържание 17
Предговор 39
За кого е предназначена тази книга? 39
Необходими начални познания 40
Какво представлява .NET Framework? 40
Какво обхваща тази книга? 40
Фокусът е върху .NET Framework 1.1 41
Как е представена информацията? 41
Защо C#? 41
Поглед към съдържанието на книгата 42
Глава 1. Архитектура на .NET Framework 43
Глава 2. Въведение в езика C# 43
Глава 3. Обектно-ориентирано програмиране в .NET 43
Глава 4. Обработка на изключения в .NET 43
Глава 5. Обща система от типове 44
Глава 6. Делегати и събития 44
Глава 7. Атрибути 44
Глава 8. Масиви и колекции 44
Глава 9. Символни низове 44
Глава 10. Регулярни изрази 45
Глава 11. Вход/изход 45
Глава 12. Работа с XML 45
Глава 13. Релационни бази от данни и MS SQL Server 46
Глава 14. ADO.NET и работа с данни 46
Глава 15. Графичен потребителски интерфейс с Windows Forms 46
Глава 16. Изграждане на уеб приложения с ASP.NET 47
Глава 17. Многонишково програмиране и синхронизация 47
Глава 18. Мрежово и Интернет програмиране 47
Глава 19. Отражение на типовете (Reflection) 48
Глава 20. Сериализация на данни 48
Глава 21. Уеб услуги с ASP.NET 48
Глава 22. Отдалечено извикване на методи (Remoting) 48
Глава 23. Взаимодействие с неуправляван код 49
Глава 24. Управление на паметта и ресурсите 49
Глава 25. Асемблита и разпространение (deployment) 49
Глава 26. Сигурност в .NET Framework 49
Глава 27. Mono - свободна имплементация на .NET 49
Глава 28. Помощни инструменти за .NET разработчици 50
Глава 29. Практически проект 50
За използваната терминология 50
Конвенция за кода 51
Константите пишем с главни букви 51
Член-променливите пишем с префикс "m" 51
Параметрите на методите пишем с префикс "a" 51
Именуване на идентификатори 52
Именуване на контроли 52
Конвенции за базата данни 53
Как възникна тази книга? 53
Курсът по програмиране за платформа .NET в СУ (2002/2003 г.) 53
Проектът на Microsoft Research и БАРС 53
Курсът по програмиране за .NET Framework в СУ (2004/2005 г.) 54
Курсът по програмиране за .NET Framework в СУ (2005/2006 г.) 54
Проектът за настоящата книга 54
Авторският колектив 56
Александър Русев 56
Александър Хаджикръстев 56
Антон Андреев 56
Бранимир Ангелов 56
Васил Бакалов 57
Виктор Живков 57
Деян Варчев 57
Димитър Бонев 57
Димитър Канев 57
Галин Илиев 58
Георги Пенчев 58
Иван Митев 58
Ивайло Димов 58
Ивайло Христов 59
Лазар Кирчев 59
Манол Донев 59
Мартин Кулов 59
Михаил Стойнов 60
Моника Алексиева 60
Николай Недялков 60
Панайот Добриков 60
Преслав Наков 61
Радослав Иванов 61
Светлин Наков 61
Стефан Добрев 62
Стефан Кирязов 62
Стефан Захариев 62
Стоян Дамов 62
Тодор Колев 63
Христо Дешев 63
Христо Радков 63
Цветелин Андреев 63
Явор Ташев 64
Благодарности 64
Светлин Наков 64
Авторският колектив 64
Българска асоциация на разработчиците на софтуер 64
Microsoft Research 65
SciForge.org 65
Софийски университет "Св. Климент Охридски" 65
telerik 65
Други 65
Сайтът на книгата 66
Лиценз 66
Общи дефиниции 66
Права и ограничения на потребителите 67
Права и ограничения на авторите 67
Права и ограничения на БАРС 67
Права и ограничения на Microsoft Research 68
Глава 1. Архитектура на платформата .NET и .NET Framework 71
Необходими знания 71
Съдържание 71
В тази тема ... 71
Какво представлява платформата .NET? 73
Визията на Microsoft 73
Архитектура на .NET платформата 73
.NET Enterprise Servers 74
.NET Framework и Visual Studio .NET 2003 75
.NET Building Block Services 76
.NET Smart Clients 76
Какво е .NET Framework? 77
Компоненти на .NET Framework 77
Архитектура на .NET Framework 77
Операционна система 78
Common Language Runtime 78
Base Class Library 78
ADO.NET и XML 79
ASP.NET и Windows Forms 79
Езици за програмиране 79
Common Language Runtime 79
Задачи и отговорности на CLR 80
Управляван код 81
Управление на паметта 82
Intermediate Language (IL) 83
Компилация и изпълнение 84
Архитектура на CLR 85
Как CLR изпълнява IL кода? 86
Асемблита 87
Проблемът "DLL Hell" 88
Метаданни 88
IL код 89
Ресурси 89
Разгръщане на асемблита 89
.NET приложения 90
Преносими изпълними файлове 90
Application domains 91
Интеграция на езиците за програмиране 92
Common Language Specification (CLS) 92
Common Type System (CTS) 92
Common Language Infrastructure (CLI) 93
.NET езиците 94
Framework Class Library 95
Пакетите от FCL 96
Visual Studio .NET 97
Писане на код 97
Създаване на потребителски интерфейс 98
Компилиране 99
Изпълняване и тестване 100
Проследяване на грешки 100
Създаване на инсталационен пакет 101
Получаване на помощ 101
VS.NET е силно разширяема среда 101
Упражнения 102
Използвана литература 102
Глава 2. Въведение в C# 104
Необходими знания 104
Съдържание 104
В тази тема... 104
Какво е C# 105
Принципи при дизайна на езика C# 105
Компонентно-ориентиран 105
Всички данни са обекти 105
Сигурност и надеждност на кода 106
Всичкият код е на едно място 108
Програмите на C# 108
Нашата първа програма на C# 108
Как работи програмата? 109
Създаване на проект, компилиране и стартиране от Visual Studio.NET 110
Запазени думи в C# 112
Типове данни в C# 112
Стойностни типове (value types) 113
Референтни типове (reference types) 113
Примитивни типове 113
Типове дефинирани от потребителя 113
Преобразуване на типовете 114
Изброени типове (enumerations) 115
Идентификатори 116
Декларации 116
Константи 117
Оператори 117
Изрази (expressions) 118
Програмни конструкции (statements) 118
Елементарни програмни конструкции 118
Съставни конструкции 118
Програмни конструкции за управление 119
Специални конструкции 122
Коментари в програмата 122
Вход и изход от конзолата 122
Вход от конзолата 123
Изход към конзолата 123
Дебъгерът на Visual Studio .NET 124
Инструментът ILDASM 126
XML документация в C# 127
Тагове в XML документацията 128
Извличане на XML документация от C# сорс код 128
Генериране на HTML документация от VS.NET 130
Директиви на предпроцесора 131
Директиви за форматиране на сорс кода 131
Директиви за условна компилация 132
Директиви за контрол над компилатора 132
Документацията на .NET Framework 133
MSDN Library 133
.NET Framework и MSDN Library 134
Упражнения 135
Използвана литература 136
Глава 3. Обектно-ориентирано програмиране в .NET 137
Необходими знания 137
Съдържание 137
В тази тема ... 137
Предимства и особености на ООП 139
Моделиране на обекти от реалния свят 139
Преизползване на програмния код 139
Основни принципи на ООП 139
Капсулация на данните 139
Наследяване 140
Полиморфизъм 140
Основни понятия в ООП 140
Клас 141
Обект 141
Инстанциране 141
Свойство 141
Метод 141
Интерфейс 141
Наследяване на класове 141
Абстракция на данните 141
Абстракция на действията 142
ООП и .NET Framework 142
Типове данни 142
Реализация на понятието клас 142
Множествено наследяване 143
Класове 143
Членове на тип 144
Видимост на членовете 145
Член-променливи 145
Константни полета 146
Полета само за четене 147
Методи 147
Статични членове 149
Конструктори 150
Статичен конструктор 156
Свойства 159
Индексатори 164
Структури 169
Структури – пример 170
Предаване на параметрите 170
Параметри за връщане на стойност (out) 171
Предаване по референция (ref) 172
Предаване по стойност (in) 173
Променлив брой параметри 175
Предаване на променлив брой параметри от различен тип 175
Предефиниране на оператори 176
Приоритет и асоциативност 176
Операторите в C# 177
Предефинируеми оператори 177
Предефиниране на оператори – пример 177
Наследяване 182
Класове, които не могат да се наследяват (sealed) 184
Наследяване при структурите 184
Конвертиране на обекти 185
Интерфейси 186
Членове на интерфейс 187
Реализиране на интерфейс 188
Обекти от тип интерфейс 191
Явна имплементация на интерфейс 192
Абстрактни класове 194
Абстрактни членове 194
Наследяване на абстрактни класове 195
Виртуални членове 198
Предефиниране и скриване 198
Клас диаграми 201
Изобразяване на типовете и връзките между тях 201
Пространства от имена (namespaces) 203
Дефиниране 204
Достъп до типовете 204
Подпространства 205
Как да организираме пространствата? 206
Принципи при обектно-ориентирания дизайн 207
Функционална независимост (loose coupling) 208
Силна логическа свързаност (strong cohesion) 208
Упражнения 208
Използвана литература 210
Глава 4. Управление на изключенията в .NET 213
Необходими знания 213
Съдържание 213
В тази тема ... 213
Изключенията в ООП 214
Изключенията в .NET Framework 214
Прихващане на изключения 215
Програмна конструкция try-catch 215
Как CLR търси обработчик за изключенията? 216
Прихващане на изключения – пример 216
Прихващане на изключения на нива – пример 217
Свойства на изключенията 219
Йерархия на изключенията 220
Подредбата на catch блоковете 221
Изключения и неуправляван код 222
Предизвикване (хвърляне) на изключения 223
Хвърляне и прихващане на изключения – пример 224
Хвърляне на прихванато изключение – пример 224
Собствени изключения 225
Дефиниране на собствени изключения 226
Собствени изключения – пример 226
Конструкцията try–finally 229
Къде е проблемът? 230
Решението 230
Конструкцията try-catch-finally 231
try-finally за освобождаване на ресурси 233
Препоръчвани практики 234
Упражнения 235
Използвана литература 235
Глава 5. Обща система от типове
(Common Type System) 237
Необходими знания 237
Съдържание 237
В тази тема ... 237
Какво е CTS? 238
CTS и езиците за програмиране в .NET 238
CTS e обектно-ориентирана 238
CTS описва .NET типовете 238
Стойностни и референтни типове 238
Къде са ми указателите? 239
Йерархията на типовете 239
Типът System.Object 240
Стойностни типове (value types) 240
Референтни типове (reference types) 240
Стойностни срещу референтни типове 241
Стойностни и референтни типове – пример 242
Защита от неинициализирани променливи 246
Автоматична инициализация на променливите 246
Типът System.Object 246
Защо стойностните типове наследяват референтния тип System.Object? 247
Потребителските типове скрито наследяват System.Object 247
Методите на System.Object 247
Предефиниране на сравнението на типове 248
Оператори за работа с типове в C# 251
Оператор is 251
Оператор as 251
Оператор typeof 251
Оператори is и as – пример 252
Клониране на обекти 253
Плитко клониране 253
Дълбоко клониране 254
Плитки срещу дълбоки копия 254
Интерфейсът ICloneable 254
Клониране на обекти в .NET Framework 254
Имплементиране на ICloneable – пример 254
Опаковане (boxing) и разопаковане (unboxing) на стойностни типове 257
Опаковане (boxing) на стойностни типове 257
Разопаковане (unboxing) на опаковани типове 258
Особености при опаковането и разопаковането 258
Как работят опаковането и разопаковането? 258
Пример за опаковане и разопаковане 259
Аномалии при опаковане и разопаковане 260
Интерфейсът IComparable 262
Системни имплементации на IComparable 263
Имплементиране на IComparable – пример 263
Интерфейсите IEnumerable и IEnumerator 264
Интерфейсът IEnumerable 265
Интерфейсът IEnumerator 265
Имплементиране на IEnumerable и IEnumerator 265
Упражнения 268
Използвана литература 269
Глава 6. Делегати и събития 272
Необходими знания 272
Съдържание 272
В тази тема ... 272
Какво представляват делегатите? 273
Инстанциране на делегат 273
Делегатите и указателите към функции 273
Callback методи и делегати 273
Статични или екземплярни методи 273
Пример за делегат 273
Видове делегати 274
Единични (singlecast) делегати 274
Множествени (multicast) делегати 275
Инструментът .NET Reflector 279
Използване на .NET Reflector 279
Събития (Events) 280
Шаблонът "Наблюдател" 281
Изпращачи и получатели 281
Събитията в .NET Framework 281
Деклариране на събития 281
Операции върху събития 281
Разлика между събитие и делегат 282
Конвенция за събитията 282
Събития – пример 283
Делегатът System.EventHandler 287
Пример за използване на System.EventHandler 288
Събития и интерфейси 288
Имплементиране на събития в интерфейс 289
Събития и интерфейси – пример 289
Интерфейси, събития, делегати 291
Упражнения 293
Използвана литература 293
Глава 7. Атрибути 295
Необходими знания 295
Съдържание 295
В тази тема ... 295
Какво представляват атрибутите в .NET? 296
Прилагане на атрибути 296
Атрибутите са обекти 298
Параметри на атрибутите 298
Задаване на цел към атрибут 299
Къде се използват атрибутите? 300
Декларативно управление на сигурността 300
Използване на автоматизирана сериализация на обекти 300
Компонентен модел на .NET 301
Създаване на уеб услуги в ASP.NET 301
Взаимодействие с неуправляван (Win32) код 302
Синхронизация при многонишкови приложения 302
Дефиниране на собствени атрибути 302
Собствени атрибути – пример 303
Дефиниране на собствен атрибут – пример 303
Извличане на атрибути от асембли 304
Мета-атрибутът AttributeUsage 305
Как се съхраняват атрибутите? 306
Какво се случва по време на компилация? 306
Какво се случва при извличане на атрибут? 307
Упражнения 307
Използвана литература 307
Глава 8. Масиви и колекции 310
Необходими знания 310
Съдържание 310
В тази тема ... 310
Какво e масив? 311
Деклариране на масиви 311
Заделяне на масиви 311
Масивите в .NET Framework 311
Елементи на масивите 312
Видове масиви 312
Масиви – пример 312
Прости числа – пример 313
Масиви от референтни типове – пример 314
Многомерни масиви 316
Инициализиране и достъп до елементите 316
Разположение в паметта 316
Многомерни масиви – пример 317
Масиви от масиви 319
Инициализиране и достъп до елементите 320
Разположение в паметта 320
Триъгълник на Паскал – пример 320
Типът System.Array 322
Свойства 322
Методи 322
Имплементирани интерфейси 323
Създаване на ненулево-базиран масив – пример 324
Сортиране на масиви 326
Сортиране с IComparer – пример 327
Двоично търсене 328
Двоично търсене – пример 329
Съвети за работа с масиви 329
Какво е колекция? 330
Колекциите в .NET Framework 330
Списъчни и речникови колекции 330
Колекциите са слабо типизирани 331
Интерфейсите за колекции 331
Списъчни колекции 332
Интерфейсът IList 332
Класът ArrayList 332
Други списъчни колекции 334
Речникови колекции 335
Интерфейсът IDictionary 336
Класът Hashtable 336
Производителност на Hashtable 337
Собствени хеш-функции 339
Класът SortedList 341
Силно типизирани колекции 342
Специални колекции 342
Упражнения 343
Използвана литература 343
Глава 9. Символни низове
(Strings) 346
Необходими знания 346
Съдържание 346
В тази тема ... 346
Стандартът Unicode 348
В началото бе ASCII 348
Unicode 349
Символите в Unicode 349
Кодови двойки 350
Графични знаци (графеми) 350
Типът System.Char 351
Методи за класификация на символите 351
Методи за смяна на регистъра 351
Символни низове в .NET Framework 351
Символните низове и паметта 352
Класът System.String 353
Правила за сравнение на символни низове 353
Методи и свойства на System.String 354
Escaping последователности 361
Ефективно конструиране на низове чрез класа StringBuilder 364
Проблемът с долепването на низове 364
Решението на проблема – класът StringBuilder 364
Членове на StringBuilder 365
Използване на StringBuilder – пример 366
Задаване на първоначален размер за StringBuilder 367
Сравнение на скоростта на String и StringBuilder – пример 368
Класът StringInfo 369
Използване на StringInfo – пример 369
Интерниране на низове 370
Форматиращи низове 371
Използване на форматиращи символи 371
Форматиране на числа 372
Отместване при форматирането 374
Форматиране на дати и часове 375
Потребителско форматиране 376
Интернационализация 378
Културите в .NET Framework 378
Класът CultureInfo 378
Свойства на класа CultureInfo 378
Класът CultureInfo – пример 379
Списък на културите – пример 379
Извличане на списък от всички култури в .NET Framework – пример 380
Парсване на типове 381
Парсване на числови типове 382
Парсване на дати 384
Кодиращи схеми 385
Кодиращи схеми UTF 385
UTF-8 386
UTF-16 386
UTF-32 387
Подредба на байтовете при UTF-16 и UTF-32 387
Други кодиращи схеми 387
Кодиращи схеми – пример 388
Конвертиране със System.Text.Encoding 388
Кодиране Base64 390
Работа с Unicode във Visual Studio.NET 391
Упражнения 396
Използвана литература 398
Глава 10. Регулярни изрази 402
Необходими знания 402
Съдържание 402
В тази тема ... 402
Регулярни изрази 403
Какво е регулярен израз? 403
За какво се използват регулярните изрази? 403
Регулярни изрази и крайни автомати 404
История на регулярните изрази 404
Няколко прости примера 405
Лесен пример за начало 405
Търсене на телефонни номера 405
Пример за регулярен израз в .NET 405
Езикът на регулярните изрази 406
Литерали 407
Метасимволи 407
Escaping при регулярните изрази 407
Най-важното за работата с регулярни изрази 409
Шаблонът не е за съвпадение с целия низ 409
Съвпаденията се откриват в реда на срещане 409
Търсенето приключва, когато се открие съвпадение 409
Търсенето продължава от последното съвпадение 410
Регулярният израз търси за всички възможности подред 410
Основни метасимволи 410
Класове от символи 410
Метасимволи за количество 413
"Мързеливи" метасимволи за количество 415
Метасимволи за местоположение 416
Метасимволът за избор | 419
По-обстоен пример с разгледаните метасимволи 420
Регулярните изрази в .NET Framework 422
Пространството System.Text.RegularExpressions 422
Представяне на шаблони 423
Търсене с регулярни изрази 424
Няколко основни правила при търсенето 424
Класът Match 424
Последователно еднократно търсене с Match(…) и NextMatch() 425
Тагове за хипервръзки в HTML код – пример 426
Още нещо за позицията на следващото търсене 428
Търсене за съвпадения наведнъж с Matches(…) и MatchCollection 428
Групи в регулярните изрази 429
Предимства на групите 429
Неименувани (анонимни) групи 430
Именувани групи 431
Номериране на групите 431
Търсене с групи в .NET 432
Класовете Group и GroupCollection 432
Как извличаме информацията от групите? 432
Парсване на лог – пример 434
Извличане на хипервръзки в HTML документ – пример 435
Работа с обратни препратки 436
Обратни препратки към именувани групи 437
Извличане на HTML тагове от документ – пример 438
Работа с Captures 440
Валидация с регулярни изрази 441
Видове валидация 441
Полезни съвета за валидация с регулярни изрази 442
Валидация с метода IsMatch(…) 442
Валидни e-mail адреси – пример 442
Валидни положителни цели числа – пример 443
Заместване с регулярни изрази 444
Заместване със заместващ шаблон 444
Специални символи в заместващия шаблон 445
Заместване с MatchEvaluator 447
Разделяне на низ по регулярен израз 447
Разделяне с групи в шаблона 448
Методите Escape(…) и Unescape(…) 449
Методът Unescape(…) 450
Настройки и опции при работа с регулярните изрази 450
Multiline 450
Singleline 450
IgnoreCase 451
ExplicitCapture 451
RightToLeft 452
Compiled 452
Допълнителни възможности на синтаксиса на регулярните изрази 452
Символът \G – последователни съвпадения 453
Групи, които не запазват съвпадение 453
Метасимволи за преглед напред и назад 454
Условен избор 456
Коментари в регулярните изрази 457
Модификатори на регулярните изрази 457
Особености и метасимволи, свързани с Unicode 458
Метасимволите за Unicode категории 458
Възможни проблеми с Unicode 459
Предварително компилиране и запазване на регулярни изрази 459
Кога да използваме регулярни изрази 461
Няколко думи за ефективността 462
Няколко регулярни израза от практиката 463
Размяна на първите две думи в низ 463
Парсване на декларации = 463
Парсване на дати 464
Премахване на път от името на файл 465
Валидация на IP адреси 465
Полезни Интернет ресурси 465
Инструментът The Regulator 466
Упражнения 469
Използвана литература 471
Глава 11. Вход и изход 473
Необходими знания 473
Съдържание 473
В тази тема ... 473
Какво представляват потоците? 474
Потоци – пример 474
Потоците в .NET Framework 475
Базови потоци (base streams) 476
Преходни потоци (pass-through streams) 476
Основни операции с потоци 476
Типът System.IO.Stream 476
Четене от поток 477
Писане в поток 478
Изчистване на работните буфери 478
Затваряне на поток 478
Промяна на текущата позиция в поток 480
Буферирани потоци 480
Файлови потоци 480
Създаване на файлове поток 480
Четене и писане във файлов поток 481
Пример – замяна на стойност в двоичен файл 481
Четци и писачи 482
Двоични четци и писачи 482
Текстови четци и писачи 484
Четци, писачи и кодирания 488
Потоци в паметта 488
Четене от MemoryStream – пример 488
Писане в MemoryStream – пример 489
Операции с файлове. Класове File и FileInfo 490
File и FileInfo – пример 490
Работа с директории. Класове Directory и DirectoryInfo 491
Рекурсивно обхождане на директории – пример 491
Класът Path 493
Специални директории 494
Наблюдение на файловата система 495
Наблюдение на файловата система – пример 495
Как работи примерът? 496
Работа с IsolatedStorage 497
IsolatedStorage – пример 497
Упражнения 499
Използвана литература 500
Глава 12. Работа с XML 502
Необходими знания 502
Съдържание 502
В тази тема... 502
Какво е XML? 504
XML (Extensible Markup Language) 504
Какво представлява един markup език? 504
XML markup – пример 504
Универсална нотация за описание на структурирани данни 504
XML съдържа метаинформация за данните 505
XML е метаезик 505
XML е световно утвърден стандарт 505
XML е независим 505
XML – пример 505
XML и HTML 505
Прилики между езиците XML и HTML 506
Разлики между езиците XML и HTML 506
Добре дефинирани документи 506
XML изисква добре дефинирани документи 507
Пример за лошо дефиниран XML документ 507
Кога се използва XML? 507
Обмяна на информация 507
Съхранение на структурирани данни 507
Недостатъци на XML 508
Обемисти данни 508
Повишена необходимост от физическа памет 508
Намалена производителност 508
Пространства от имена 508
Дефиниране на пространства от имена 509
Използване на тагове с еднакви имена – пример 509
Пространства по подразбиране 510
Пространства по подразбиране – пример 510
Пространства от имена и пространства по подразбиране – пример 510
Схеми и валидация 511
XML схеми – защо са необходими? 511
XML схеми – видове 512
Езикът DTD 512
XSD схеми 513
XDR схеми 516
Редакторът за схеми на VS.NET 518
XML парсери 522
XML парсери – приложение 523
XML парсери – видове 523
DOM 523
SAX 524
XML и .NET Framework 524
.NET притежава вградена XML поддръжка 524
.NET и DOM моделът 525
Парсване на XML документ с DOM – пример 525
Класовете за работа с DOM 527
Класът XmlNode 528
Класът XmlDocument 529
Промяна на XML документ с DOM – пример 529
Построяване на XML документ с DOM – пример 532
SAX парсери и XmlReader 533
Класът XmlReader 533
Разлика между pull и push парсер моделите 533
Push парсер 533
Pull парсер 533
XmlReader – основни методи и свойства 533
Класът XmlReader – начин на употреба 534
XmlReader – пример 534
Кога да използваме DOM и SAX? 536
Класът XmlWriter 536
XmlWriter – основни методи 536
Работа с XmlWriter 537
XmlWriter – пример 537
Валидация на XML по схема 540
Класът XmlValidatingReader 540
XmlValidatingReader – основни методи, свойства и събития 541
Валидация на XML – пример 541
Валидация на XML при DOM 546
XPath 547
Описание на езика 547
XPath в .NET Framework 550
XSLT 558
Технологията XSLT 558
XSLT и .NET Framework 559
Упражнения 563
Използвана литература 565
Глава 13. Релационни бази от данни и MS SQL Server 568
Необходими знания 568
Съдържание 568
В тази тема ... 569
Релационни бази от данни 570
Модели на базите от данни 570
Системи за управление на БД 571
Таблици 572
Схема на таблица 573
Първичен ключ 573
Външен ключ 573
Връзки (релации) 573
Множественост на връзките 574
Релационна схема 575
Нормализация 578
Ограничения (Constraints) 581
Индекси 582
Езикът SQL 582
Изгледи (Views) 583
Съхранени процедури (stored procedures) 584
Тригери (Triggers) 585
Транзакции 586
Въведение в SQL Server 591
История на SQL Server 591
Системни компоненти на SQL Server 2000 591
Програмиране за SQL Server 2000 593
Въведение в T-SQL 595
Data Definition Language (DDL) 595
Data Manipulation Language (DML) 599
DBCC команди в SQL Server 610
Съхранени процедури 612
Транзакции в SQL Server 616
Пренасяне на база от данни 620
Упражнения 625
Използвана литература 626
Глава 14. Достъп до данни с ADO.NET 628
Необходими знания 628
Съдържание 628
В тази тема ... 629
Модели за работа с данни в ADO.NET 630
Свързан модел (connected model) 630
Несвързан модел (disconnected model) 631
Еволюция на приложенията 633
Еднослойни приложения 633
Двуслойни приложения (клиент-сървър) 633
Трислойни приложения 634
Многослойни приложения 636
Какво е ADO.NET? 637
Пространства от имена на ADO.NET 638
Еволюция на ADO към ADO.NET 638
Компоненти на ADO.NET 639
Доставчици на данни (Data Providers) в ADO.NET 640
Стандартни доставчици на данни в ADO.NET 642
Компоненти за работа в несвързана среда 643
SqlClient Data Provider 643
Видове автентикация в SQL Server 2000 643
Символен низ за връзка към база от данни (Connection String) 644
Connection Pooling 645
Реализация на свързан модел в ADO.NET 646
Кога да използваме свързан модел? 646
Свързан модел от гледна точка на програмиста 646
Класовете в свързана среда 647
Класът SqlConnection 648
Експлицитно отваряне и затваряне на връзка 648
Имплицитно отваряне и затваряне на връзка 649
Използване на метода Dispose() 649
Събитията на SqlConnection 649
Класът SqlCommand 651
По-важни свойства на SqlCommand 652
По-важни методи на SqlCommand 652
Класът SqlDataReader 653
По-важни методи и свойства на SqlDataReader 653
Свързан модел – пример 653
Описание на примера 655
Създаване на SqlCommand 655
Създаване на SqlCommand чрез Server Explorer 656
Създаване на SqlCommand чрез Toolbox 656
Параметрични SQL заявки 658
Необходимост от параметрични заявки 658
Класът SqlParameter 660
Параметрични заявки – пример 660
Първичен ключ с пореден номер – извличане 663
Използване на транзакции 664
Работа с транзакции в SQL Server 664
Работа с транзакции в ADO.NET 664
Транзакции – пример 665
Връзка с други бази от данни 667
OLE DB Data Provider 668
Стандартът OLE DB 668
Връзка към OLE DB 669
Връзка с OLE DB – пример 669
Правилна работа с дати 671
Работа с дати – пример 672
Описание на примера 675
Работа с картинки в база от данни 675
Двоични данни в MS SQL Server 676
Двоични данни в Oracle 676
Двоични данни в MS Access 676
Съхранение на графични обекти – пример 676
Как работи примерът? 680
Работа с големи обеми двоични данни 681
Четене на обемни данни 681
Запис на обемни данни 681
ADO.NET в несвързана среда 682
Типични сценарии за работа в несвързана среда 683
Несвързан модел в ADO.NET, XML и уеб услуги 683
Класове за достъп до данните в несвързана среда 684
DataSet – обектен модел 685
Колекции в DataSet 685
Схема на DataSet 685
Силно типизирани DataSets 686
Създаване на DataSet 687
Поддръжка на автоматично свързване 691
Класът DataTable 692
DataTable поддържа списък на всички промени 692
Основни свойства на DataTable 693
Основни методи на DataTable 693
Работа с DataTable 694
Използване на ограничения (constraints) 697
Първичен ключ 697
ForeignKey и Unique ограничения 698
Потребителски изрази 699
Пример за дефиниране на колона чрез израз 700
DataRelation обекти 700
Релации и ограничения 700
Релации и потребителски интерфейс 701
Релации и потребителски изрази 701
Основни методи, използващи релации 702
Класът DataView 702
Филтриране чрез израз 703
Филтриране по версията на данните 703
Сортиране по колона (колони) 703
Запазване и зареждане на данните от DataSet 704
DataSet.ReadXml() 704
DataSet.WriteXml() 705
ReadXml() и WriteXml() – пример 706
Използване на DataAdapter 708
Архитектура на класа DataAdapter 708
Адаптерни класове за различните доставчици 709
Създаване на DataAdapter 709
Методът Fill() на класа DataAdapter 710
Свойството MissingSchemaAction 710
Запълване на няколко таблици 710
Задаване на съответствие за таблици и колони 711
Извличане на информация за схемата на източника 712
Свойства AcceptChangesDuringFill и ContinueUpdateOnError 712
Събития на DataAdapter 712
Обновяване на данните в източника 713
Класът CommandBuilder 713
Потребителска логика за обновяване на източника 715
Извличане на обновени стойности в DataSet 715
DataAdapter – пример 716
Обновяване на свързани таблици 719
DataSet.GetChanges() и DataSet.HasChanges() 719
Параметри на методите 719
Какво правят двата метода? 720
Кога да използваме GetChanges() и HasChanges()? 720
DataSet.GetChanges() – пример 720
Грешките в DataSet и DataTable обектите 721
Несвързан модел – типичен сценарий на работа 722
Реализация на несвързан модел с DataSet и DataAdapter – пример 723
Класът XmlDataDocument 729
Предимства на XmlDataDocument 729
Начини за синхронизация 729
XmlDataDocment – пример 730
Сигурността при работа с бази от данни 731
Сигурност при динамични SQL заявки 732
Connection pooling и сигурност 732
Съхраняване на connection string 732
Защитна стена 732
Криптиране на комуникацията 733
Упражнения 733
Използвана литература 735
Глава 15. Графичен потребителски интерфейс с Windows Forms 736
Глава 16. Изграждане на уеб приложения с ASP.NET 737
Глава 17. Многонишково програмиране и синхронизация 738
Глава 18. Мрежово и Интернет програмиране 739
Глава 19. Отражение на типовете (Reflection) 740
Глава 20. Сериализация на данни 741
Глава 21. Уеб услуги с ASP.NET 742
Глава 22. Отдалечено извикване на методи (Remoting) 743
Глава 23. Взаимодействие с неуправляван код 744
Глава 24. Управление на паметта и ресурсите 745
Глава 25. Асемблита и разпространение 746
Глава 26. Сигурност в .NET Framework 747
Глава 27. Mono - свободна имплементация на .NET 748
Глава 28. Помощни инструменти за .NET разработчици 749
Глава 29. Практически проект 750
Заключение 751