Cc++c# — Печать из Microsoft SQL Server


Содержание

SQL Server — соединение SQL из проекта Visual C ++ Windows Form

Я очень новичок в C ++. только что создал C ++ Windows Forms проект с использованием Visual Studio Community 2015. И использовал следующую основную функцию для получения соединения SQL.

Когда я собираю и запускаю приведенный выше код, он всегда выдает «Не удалось подключиться к SQL Server».
Строка подключения SQL приведена ниже как,

Я получил вышеуказанный формат строки подключения от этот ссылка на сайт.
И я использую Microsoft SQL Server 2014 через SQL Management Studio.

Примечание. Он всегда запускает регистр SQL_ERROR при переключении.
Я пытаюсь отследить ошибку. Но мне не повезло.

Почему это происходит?

Любая помощь будет оценена.
Благодарю.

Решение

Это предложение.

Попробуйте Visual C ++ MFC Template.

Делайте вещи ниже, где хотите.

Вы должны создать источник данных ODBC, и он должен быть указан как «Драйвер ODBC 11 для SQL Server».
Я использую VS Community 2015 и SQL Server 2014.

C/c++/c# — Печать из Microsoft SQL Server

Этим материалом я начну новую серию статей, посвященных работе с базой данных в C# Visual Studio с помощью Microsoft SQL Server Compact 3.5. В процессе работы мы создадим приложение Windows Forms, в котором можно будет работать с файлом базы данных в формате sdf: добавлять записи в таблицу, удалять и изменять их. Также бонусом приложение сделаем «работающим из коробки» и на максимальном количестве даже чистых операционных систем. Уровень статей рассчитан на начинающего разработчика, обладающего хотя бы минимальным опытом работы с Visual Studio.

Сначала необходимо скачать и установить Microsoft SQL Server Compact 3.5 — я качал отсюда. После этого добавляем ссылку в обозревателе решений: вкладка «.NET» — библиотека «System.Data.SqlServerCe.Entity». После создания проекта по шаблону Windows Forms, надо настроить подключение к базе данных, да и не мешало бы её создать. Выбираем «Обозреватель баз данных» — «Подключения данных» — «Добавить подключение» — Источник данных «Microsoft SQL Server Compact 3.5 (Поставщик данных среды .NET для Microsoft SQL Server Compact 3.5)» — создать базу данных (предположим Books.sdf) в любом месте на компьютере — Проверить подключение — Ок. Пароль не устанавливаем, можно выбрать сортировку по «Россия — русский».

Далее создаем таблицу в этой базе, назовем её tbBooks; в ней два столбца: id и name. id — тип int, уникальный; name — тип nvarchar, остальные параметры по умолчанию.

Что такое? Visual Studio подчеркивает строку и показывает ошибку «Не удалось найти имя типа или пространство имен «SqlCeConnection» (пропущена директива using или ссылка на сборку?)»? У нас имеет место ошибка с директивой using:

Теперь ошибка должна исчезнуть. Для работы с базами данных есть очень удобный инструмент DataGridView. Добавляем его на нашу форму и подключаем к источнику данных (нашей таблице в базе): «Добавить источник данных проекта» — «База данных» — «Набор данных» — Выбираем наше подключение Books.sdf. Среда может попросить перенести файл в рабочий каталог и изменить настройки подключения: соглашаться не стоит — мы не предатели. Выбираем нашу таблицу tbBooks и подтверждаем наше подключение.

Если сейчас запустить проект, то можно даже изменять ячейки нашей таблицы. Однако, теперь мы имеем сразу две проблемы: во-первых, в столбце id ввод не чисел выбивает страшную и непонятную ошибку, а во-вторых, изменения не сохраняются. Первая проблема решается просто:

Таким образом, в этой статье мы научились создавать базы данных, подключения к ним, таблицы в них, а также редактировать с помощью встроенного интерфейса.

Примеры SQL-запросов. Microsoft SQL Server и язык T-SQL

В статье «Создание базы данных SQL Server» была описана простая БД автотранспортного предприятия Garage, состоящая из трех таблиц: Cars, Drivers, Routes.

Среда Visual Studio 2020 Community позволяет исследовать SQL-запросы без программирования. Для примера найдем нашу БД Garage в окне Обозревателя объектов SQL Server. После клика правой кнопкой на имени БД, в выпадающем меню выберем позицию Создать запрос… В окне SQLQuery1.sql запишем:

Use Garage
Select * From Cars
Select * From Drivers
Select * From Routes

Первая строка указывает имя используемой БД, а остальные три – выбирают поля соответствующих таблиц.

Запустив запросы на выполнение (зеленая кнопка-треугольник Executive или F5), вы увидите содержимое всех ваших трех таблиц, например:

Теперь перейдем к программированию. Из статьи «Генератор поставщиков данных. Пример независимого кода» используем способ доступа к данным через файл App.config (просто скопируйте его).

Сначала выведем исходные данные — как есть (для прямого сравнения результатов). Затем добавим запрос: «Какие водители и автомобили закреплены за конкретными маршрутами?». После этого удалим в таблице Drivers запись о каком-либо водителе и добавим другую. После чего изменим номер маршрута в таблице Routes.

Текст файла Program.cs

Замечание о первичных ключах. Если какое-либо поле объявляется как первичный ключ (у нас это все поля, имена которых начинаются с ID), то не может существовать записей с одинаковыми ID. Поэтому запрос Insert помещен в блок try, а обработка исключения – в блок catch.

Поэкспериментируйте с SQL-запросами, выполняя их как на закладке Запросы, так и в программе.

Использование Common Language Runtime (CLR) в Microsoft SQL Server 2005 / MSSQL / ASP. NET

Автор: Никита Егоров (nikitaegorov@gmail.com)
Опубликовано: 03 июля 2006
Уровень: Учебник

Предыстория

Для создания бизнес приложений, основанных на SQL Server 2000, необходимо программировать бизнес логику, используя внутренний язык работы с запросами T-SQL. Но в силу его ограниченной функциональности часто создание такой логики отнимает много времени и усилий на отладку. C появлением SQL Server 2005 ситуация в корне меняется: в этой версии декларирована возможность применять при программировании хранимых процедур и различных пользовательских функций языки более высокого уровня, а именно CLR-языков (Visual Basic.NET и C#).

Поискав в Интернете материалы по интеграции SQL Server 2005 и CLR на русском языке, я нашел лишь одну статью, в которой приводились примеры по использованию CLR в SQL Server 2005 (http://www.osp.ru/win2000/2005/08/034.htm). После ее прочтения стало понятно, что автор использовал довольно специфичную версию SQL Server 2005, и поэтому корректно запустить некоторые из промеров не удалось.

Изучив часть примеров, поставляемых с MS SQL Server 2005, и почитав MSDN и SQL Server Books Online, я убедился, что некоторые примеры тоже неработоспособны.

После этого я решил попробовать сам разобраться в этом вопросе, и результатом моей работы служит эта статья.

Подготовка к работе


После установки Microsoft SQL Server2005, необходимо выполнить некоторые дополнительные настройки для того, чтобы получить возможность работы с CLR.

Для этого откроем SQL Server Management Studio и выполним следующий скрипт:

Результат работы скрипта:

Данное действие необходимо, чтобы разрешить SQL Server 2005 выполнять пользовательские сборки.

Создание тестовой базы данных

Для того, чтобы иметь возможность выполнять тестирование создаваемых сборок, необходимо с начала создать тестовую базы данных (пусть она имеет название Test2005).

В этой базе данных будет всего одна таблица с именем Users, содержащая 4 столбца:

Название Тип Описание
ID int Уникальный номер
Name nvarchar(50) Имя сотрудника
DateBegin smalldatetime Дата подключения
DateEnd smalldatetime Дата отключения

Скрипт для создания таблицы:

Пусть созданная таблица содержит следующие данные:

Name DateBegin DateEnd
Егоров 01.01.2006 NULL
Петров 02.01.2006 NULL
Иванов 01.01.2006 04.04.2006
Павлов 02.01.2006 04.04.2006
Иванеева 05.05.2006 NULL
Сидоров 01.01.2006 NULL

После выполнения этих действий можно приступить к созданию сборки.

Создание проекта для работы с базой данных

Для того, чтобы начать создание сборки необходимо создать проект, для этого выполним следующие действия:

Запустим Microsoft Visual Studio 2005

Создадим новый проект с названием TestingCLR, выбрав заготовку SQL Server Project в разделе Database нужного языка (Рис. 1).

В появившемся окне нам предлагают создать связь с базой данных (Рис. 2)

Нажмем кнопку Add New Reference и в появившемся окне выберем используемый для тестирования SQL Server, учетную запись, созданную базу данных и нажмем кнопку ОК.

Созданный проект имеет следующую структуру (Рис. 3):

Первоначально в проекте содержится файл Test.sql, данный файл используется для тестирования создаваемой сборки.

После создания проекта можно перейти к созданию первой хранимой процедуры при помощи CLR.

Создание хранимой процедуры на языке CLR

Для создания хранимой процедуры необходимо нажать правой кнопкой мыши на проекты и выбрать подпункт New Item, пункта Add. После этого на экране появится диалог создания файла (Рис. 4)

Выберем в этом окне Store Procedure, введем название CreateHTMLLog и нажмем OK.

Создаваемая хранимая процедура будет создавать HTML документ с данными о пользователях, дата отключения которых больше либо равна дате, переданной ей как параметр.

Исходный код класса:

Чтобы протестировать созданную хранимую процедуру, добавим в файл Test.sql одну строчку, которая вызываем созданную нами процедуру:

Запустим проект на выполнение, и в окне Output можно будет увидеть результаты работы созданной хранимой процедуры.

Теперь выполним в SQL Server Management Studio ту же строчку, что мы добавили в Test.sql, и результат выполнения будет примерно такой (Рис. 5):

Если полученный HTML код сохранить, как файл, то получится примерно такая страничка (Рис. 6):

Пояснения по исходному коду хранимой процедуры

SQLContext – это абстрактный объект, представляющий собой вызывающий контекст, который позволяет получить доступ к таким объектам, как SQLPipe, SQLTriggerContext и WindowsIdentity.

SQLPipe – объект, являющийся своего рода туннелем, позволяющим передавать необходимую информацию вызывающему контексту.

SQLTriggerContext – объект, содержащий информацию о том, что вызвало срабатывание триггера.

WindowsIdentity – объект, представляющий пользователя в системе Windows

Создание пользовательской функции, возвращающей скалярное значение

Добавим в проект новый файл, для этого в диалоге создания файла (Рис. 4) выберем User-Defined Function и назовем функцию QuantityWord.

Данная функция будет подсчитывать количество определенных символов в тексте. Исходный текст функции:

Цукерберг рекомендует:  Проверка наличия глушилки Google Adsense через JavaScript


Для проверки необходимо изменить файл Test.sql, теперь он должен содержать следующую строчку:

Если установить в любом месте исходного кода функции точку останова, и запустить проект в режиме «Start Debugging», то при выполнении запроса можно будет пошагово выполнить созданную нами функцию.

Результат работы данного запроса, если его запустить в SQL Server Management Studio, будет иметь следующий вид (Рис. 7):

Создание пользовательской функции, возвращающей таблицу

Отдельно я решил рассмотреть пользовательские функции, возвращающие как результат своей работы таблицу, так как в примерах поставляемых с SQL Server 2005 они не работают.

Добавим в проект новый файл, для этого в диалоге создания файла (Рис. 4) выберем User-Defined Function и назовем ее ReturnLetter.

Данная функция будет возвращать таблицу, в которой посимвольно разбито передаваемое функции слово.

Исходный код функции:

Для проверки созданной функции необходимо изменить файл Test.sql, он должен содержать следующую строчку:

После запуска проекта на выполнение в окне Output будут результаты работы функции.

Результат работы запроса, если его запустить в SQL Server Management Studio, будет иметь следующий вид (Рис. 8):

Пояснения по исходному коду функций

Хочу обратить внимание на тег, которым помечаются функции:

[Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = «FillRow», TableDefinition = «Chars nchar(1)»)]

FillRowMethodName – В этом параметре указывается имя функции для заполнении таблицы.

TableDefinition – Параметр, отвечающий за метаданные, возвращаемые пользователю (странным образом данные параметр отсутствует в примерах C#, но в SQL Server Books Online (BOL) мне удалось найти, как его использовать).

Значение параметра TableDefinition равное «Testid int, Testname nvarchar(4000)» показывает, что данная функция возвращает таблицу, состоящую из 2-х столбцов. Первый столбец с именем Testid и типом int, а второй – Testname с типом nvarchar(4000).

Хотелось бы обратить внимание на определение функции FillRow на языке VB.NET

В примерах, которые поставляются с SQL Server 2005, выходные параметры не помечены как Out(), хотя BOL настоятельно рекомендует это делать (пробовал запускать как с ним, так и без него, никаких изменений не заметил). Но думаю, что лучше следовать тому, что написано в BOL.

Если ваша функция возвращает таблицу с несколькими столбцами, то тогда Out параметры перечисляются через запятую:

Создание пользовательской функции агрегирования

Функции агрегирования или агрегатные функции – это функции, которые работают с подмножеством значений и возвращают скалярное значение. Ярчайшим примеров таких функция являются функции подсчета сумм Sum и количества строк Count. В этом примере мы построим такую функцию, которая будет объединять строки и как результат выдаст строку, где через запятую перечислены все входящие имена пользователей за месяц.

Исходный код функции:

Чтобы протестировать созданную функцию агрегирования, необходимо внести изменения в файл Test.sql, этот файл должен содержать следующий текст:

После запуска проекта на выполнения результаты работы можно увидеть в окне Output.

Если же запрос из файла Test.sql выполнить в SQL Server Management Studio, то результат будет примерно такой (Рис. 9):

Пояснения по исходному коду агрегатных функций

Обратите внимание, что для создания функции агрегирования используется не класс, а структура, помеченная тегом сериализации и специальным тегом SqlUserDefinedAggregate.

Дополнительные (необязательные) атрибуты SqlUserDefinedAggregate:

IsInvariantToDuplicates – Устанавливается true, если функция агрегирования нечувствительна к повторениям (например, MAX и MIN нечувствительны, а SUM чувствительна).

IsInvariantToNulls – Устанавливается true, если функция инварианта к NULL (например, MIN и SUM используют данный атрибут, а COUNT не использует)

IsInvariantToOrder – Атрибут зарезервирован для будущего использования.

IsNullIfEmpty – Атрибут используется для отметки, что агрегат может возвращать NULL, если не одного значения не было накоплено.

Создание триггеров

Последний вопрос, который я хотел бы рассмотреть – создание триггеров c использованием CLR.

Создадим триггер, который проверяет введенную дату в столбце DateBegin. Если дата меньше 1 мая 2006 года, то триггер прерывает транзакцию.

Исходный код триггер:

Чтобы проверить работу триггера в файл Test.sql внесем следующий текст:

После запуска проекта на выполнение результаты запроса из файла Test.sql можно будет увидеть в окне Output.


Если же данный запрос на обновление запустить в SQL Server Management Studio, то результат его работы будет таким (Рис. 10):

Пояснения по исходному коду триггера

В данном примере цикл прохода по столбцами сделан для наилучшего понимания работы CLR триггеров.

Использование триггеров доставило мне немало проблем. В BOL и MSDN отсутствует информация о том, как отменить транзакцию, как запретить вставку неправильных данных в таблицу. В примере из статьи Винода Кумара используются методы, не поддерживаемые текущей версией SQL Server 2005.

Покопавшись в BOL, я нашел, что отменить транзакцию, в которой выполняются CLR функции нет никакой возможности. CLR функции могут отменять только те транзакции, которые определены внутри их кода.

Поэкспериментировав с различными вариантами отмены транзакций, можно сделать вывод – есть только один способ сделать это – вызвать исключение в CLR функции. Также можно в качестве результата передать пользователю RAISERROR, но самое главное – выполнение данного запроса не заключать в Try…Catch.

Если следовать такой схеме, то результат вставки неправильных данных в таблицу будут выглядеть так (Рис 11):

Теперь я хотел бы пояснить вопрос относительно класса SQLTriggerContext.

Данные класс содержит следующие свойства и методы:

ColumnCount – количество колонок содержащихся в таблице, для которой вызывается триггер

EventData – XML данные о том, что вызвало срабатывание триггера

TriggerAction – Свойство, показывающее, какое действие вызвало срабатывание триггера

IsUpdatedColumn – Метод для проверки изменялись ли данные в определенной колонке.

Основные методы и свойства класса SQLPipe:

IsSendingResults – Свойство, показывающее, что SQLPipe находится в режиме отправки одного результирующего множества клиенту

ExecuteAndSend – Выполняет команду и сразу отправляет результат клиенту

Send – Перегруженный метод, который позволяет отправлять клиенту одну строку результата, несколько строк результата, или сообщение.

SendResultsStart – Используется для отправки клиенту метаданных о том, какие данные он будет получать.

SendResultsRow – Отправка одной строки данных клиенту

SendResultsEnd – Отмечает окончание отправки данных и возвращает SQLPipe в начальное состояние.

Ручное подключение сборки к SQL Server 2005

В этом разделе будут рассмотрены методы ручного подключения сборки к SQL Server 2005, а также представлен исходный код хранимых процедур, функций и триггеров которые необходимы для работы с CLR.

Подключение сборки к базе данных:

Запустив SQL Server Management Studio, перейдите в раздел Assemblies созданной базы данных Test2005 (Рис. 12)

В меню правой кнопки мыши выбираем пункт New Assembly, и в появившемся окне нажимаем кнопку Browse (Рис. 13)

После этого выбираем файл TestingCLR.dll, находящийся в папке bin\Debug созданного проекта и нажимаем кнопку OK.

Теперь создадим хранимую процедуру, которая будет вызывать созданную нами CLR процедуру. Для этого в SQL Server Management Studio на панели инструментов нажмем кнопку New Query и в открывшемся окне введем следующий текст:

И запускаем его на выполнение.

В результате чего в разделе Programmablity/Store Procedures появится процедура CreateLog.

Результаты подключения можно проверить, выполнив запрос:

Теперь создадим оболочку для функции QuantityWord, для этого в окно выполнения запросов внесем текст:

После выполнения этой команды в разделе Programmablity/Scalar-valued Function появиться функцияQuantityWord, для ее проверки выполним запрос:

Создаем оболочку для функции ReturnLetter, в окно выполнения запросов вносим текст:

Выполняем эту команду и проверяем правильность работы:

Подключение функции агрегирования происходит в том же режиме:

После выполнения всех этих действий структура базы данных должна иметь примерно следующий вид (Рис.14):

Заключение

В этой статье я попытался рассмотреть основы использования Common Language Runtime в Microsoft SQL Server 2005. В данной статье не рассмотрен вопрос создания User-Defined Type с использование CLR. Рассмотрению этого вопроса будет посвящена другая статья об интеграции SQL Server 2005 с .NET Framework.


Для чего это все надо

Что же дает интеграция .NET и SQL Server 2005. Теперь для создания хранимых процедур, пользовательских функций и триггеров, реализующих бизнес логику можно использовать такие CLR языки программирования как Visual Basic .NET и C#. Так же появилась возможность создавать свои собственные агрегатные функции (например, написать замену функции SUM или MAX). Теперь можно использовать большую часть функционала .NET, такого как регулярные выражения, работа с веб-службами, сложные математические расчеты. Многие скажут, что такой функционал можно было и на T-SQL реализовать, но попробуйте реализовать созданную в этой статье функцию агрегирования текстовых данных, попробуйте написать проверку введенного пользователем E-mail на T-SQL. И поймете что простое использование регулярного выражения «\b[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]<2,4>\b», позволит не только увеличить производительность труда, но и заметно скажется на возможностях реализуемой бизнес логики. Так же теперь к процессу разработки первичной бизнес логики, можно подключать не только людей уверенно знающих T-SQL, но и программистов на VB.NET и C#. Подробнее о том, как устроена работа SQL Server 2005 и .NET можно прочитать в статье Винода Кумара «Как получить максимум от CLR» (http://www.osp.ru/win2000/2005/08/034.htm).

Используемые источники

  1. Кумар В. Как получить максимум от CLR – Журнал “WINDOWS IT Pro” #08, 2005год (http://www.osp.ru/win2000/2005/08/034.htm)
  2. Microsoft SQL Server 2005 Books Online
  3. MSDN Library for Visual Studio 2005

Особая благодарность Туманову Анатолию Александровичу от автора Егорова Никиты (C…R…a…S…H)

Руководство для начинающих по использованию SQL Server из C#

Автор: By [MSA] Matt Newman, перевод выполнил kpumuk специально для Realcoding.NET
оригинал http://codeproject.com/cs/database/sql_in_csharp.asp

Введение

В этой статье я хочу показать, как добавлять и читать данные из баз данных SQL Server или MSDE. Этот код должен работать на обоих SQL-серверах. Я использую как 2000, так и MSDE. Кроме того, я использую Visual Studio 2002, но все это должно работать и с Visual Studio 2003, Web Matrix, и SDK из командной строки. Приведенный код должен работать как с приложениями C#, так и с веб-приложениями C# и веб-сервисами. Этот код не компилируется на FreeBSD с помощью Rotor [^].

Предыстория

Часть моего текущего проекта требует от меня сохранять и восстанавливать информацию из базы данных. Я решил использовать C# как свой основной язык с тех пор, как начал читать книгу Inside C# Second Edition [^] от Tom Archer [^], которая, таким образом, является обязательной. Однако я не смог найти примеры того, как красиво и в общем виде использовать SQL-сервер с C#.

Использование кода

Я не включал пример приложения, потому что код, который приводится в статье, может быть использован в реальности и должен работать без проблем. Также во всей статье я буду ссылаться на SQL Server, MSDE — это свободная версия SQL Server, которая не предоставляет некоторых графических инструментов и имеет несколько других ограничений, например, размер базы данных. Этот код должен работать на обоих без проблем.

Устанавливаем любимое соединение

В действительности нет никакой магии вуду для создания соединения с SQL-сервером, допуская, что он был правильно установлен,- это я не буду рассматривать в данной статье. .NET позволяет очень легко работать с SQL. Первым шагом является добавление пространства имен клиента SQL:

Затем мы создаем SqlConnection и указываем строку подключения.

Примечание: разрыв в строке соединения служит только для форматирования

SqlConnection.ConnectionString

Строка подключения — это просто набор опций и их значений, которые указывают как и куда подключаться. Пока я изучал справочные файлы Visual Studio .NET, я обнаружил несколько полей, имеющих много имен, но работающих одинаково, как, например, Password и Pwd взаимозаменяемы. Я не включал всех опций для SqlConnection.ConnectionString в этот раз. Как только я получу шанс проверить и использовать остальные опции, я включу их в статью.

User ID

User ID используется для аутентификации средствами SQL. В своей практике я обычно игнорирую этот параметр, используя Trusted_Connection или аутентификацию средствами Windows. Если с именем пользователя связан пароль, используется Password или Pwd .

Password или Pwd

Поле пароля используется с User ID. Не имеет смысла вход в систему без имени пользователя, а только с паролем. Password и Pwd полностью взаимозаменяемы.

«Password=validpassword;»
-или-
«Pwd=validpassword;»

Data Source, или Server, или Address, или Addr, или Network Address

Просматривая документацию MSDN, я нашел множество путей указать сетевой адрес. В документации утверждается, что нет отличий между ними, и они могут использоваться равнозначно. Адрес — это правильный сетевой адрес, для краткости я использую только адрес localhost в примерах.

Цукерберг рекомендует:  Php - Проведение вебинаров.

«Data Source=localhost;»
-или-
«Server=localhost;»
-или-
«Address=localhost;»
-или-
«Addr=localhost;»
-или-
«Network Address=localhost;»

Integrated Sercurity или Trusted_Connection

Integrated Security и Trusted_Connection используются для указания, является ли соединение безопасным, например, как аутентификация средствами Windows или SSPI. Распознаваемые значение — это true , false и sspi . В соответствии с документацией MSDN, sspi является эквивалентом true . Примечание: Я не знаю, как работает SSPI , или как влияет на соединение.

Connect Timeout или Connection Timeout

Эти опции определяют время ожидания ответа сервера до генерации ошибки в секундах. Значением по умолчанию является 15 (секунд).

«Connect Timeout=10;»
-или-
«Connection Timeout=10;»

Initial Catalog или Database

Initial Catalog и Database — это просто два способа выбора базы данных, связанной с соединением.

«Inital Catalog=main;»
-или-
«Database=main;»


Network Library или Net

Опция Network Library важна, если вы связываетесь с сервером по протоколу, отличному от TCP/IP. Значение по умолчанию для Network Library — это dbmssocn или TCP/IP. Доступны следующие опции: dbnmpntw (Named Pipes, именованные каналы), dbmsrpcn (Multiprotocol), dbmsadsn (Apple Talk), dbmsgnet (VIA), dbmsipcn (Shared Memory, разделяемая память), dbmsspxn (IPX/SPX) и dbmssocn (TCP/IP). И, как и раньше, Network Library и Net могут использоваться взаимозаменяемо. Примечание: Соответствующий сетевой протокол должен быть установленн в системе, к которой вы подключаетесь.

SqlConnection.Open()

Это последняя часть установки соединения, и в простом случае выполняется следующим кодом (не забудьте убедиться, что ваше соединение получило строку подключения ранее):

SqlConnection.Open() — это void-функция, которая не возвращает ошибок, а выбрасывает исключение, потому не забывайте помещать ее в try/catch блок, чтобы предотвратить взрыв программы на фронте пользователя.

Обзор команд

Команды SQL, вероятно, наиболее сложная часть использования базы данных SQL, но среда .NET предоставляет обертки, которые чудесно все делают, избавляя от большей части работы.

SqlCommand

Есть идеи, для чего используется SqlCommand ? Если вы предположили, что он используется для команд SQL, то вы совершенно правы. SqlCommand требует как минимум двух вещей для функционирования. Строка команды и соединение. Для начала рассмотрим требование соединения. Существует два пути указания соединения, оба проиллюстрированы ниже:

Строка команды также может быть указана двумя способами через свойство SqlCommand.CommandText . Теперь давайте посмотрим на наш первый SqlCommand . Чтобы оставить пример простым, это будет простая команда INSERT .

Теперь рассмотрим значения. table — это просто таблица в базе данных. Column1 и Column2 — всего лишь названия колонок. В секции значений я показал, как добавлять типы string и int . Значение строки помещается в одинарные кавычки, а целое, как вы видите, передается как есть. Последний шаг — исполнение команды с помощью:

SqlDataReader

Вставка данных — это хорошо, но получение их назад так же важно. Вот теперь на сцену выходит SqlDataReader . «Считыватель данных» — это не все, что вам понадобится; кроме него нужен еще и SqlCommand . Следующий код демонстрирует, как настроить и выполнить простой reader:

Как вы видите, SqlDataReader не получает доступ к базе данных, он просто сохраняет данные и предоставляет простой интерфейс использования данных. SqlCommand довольно прост, table — это таблица, из которой вы читаете данные. Column1 и Column2 — колонки в этой таблице. Так как существует большая вероятность того, что вы будете читать более одной строки, требуется цикл while для получения всех записей. И, как всегда, вы хотите использовать try и catch , чтобы не прерывалось выполнение.

SqlParameter

Существует маленькая проблема при использовании SqlCommand продемонстрированным мной способом — он оставляет большую дыру в безопасности. Например, путем использования ранее продемонстрированного подхода, ваша строка команды получается примерно такой, если вы получаете данные от пользователя:

Все красиво и прекрасно, если пользователь вводит данные в корректном виде, однако, что случится, если пользователь введет value1, DROP table ? В лучшем случае сгенерируется исключение (я не ставлю цель проверить, что делает этот пример,- он просто демонстрирует подход), в худшем — вы можете поцеловать вашу таблицу на прощание. Вы можете обработать весь ввод пользователя и вырезать все, что вызывает проблемы, или использовать SqlParameter . Класс SqlParameter довольно большой, я только покажу вам основы использования параметров. По существу, вам нужны три вещи, чтобы создать параметр. Это имя, тип данных и их размер. (обратите внимание, что некоторые типы данных, нужные вам, не требуют указания размера, как Text ).

Существует соглашение по именованию (оно может быть обязательным, я не уверен), называть параметры начиная с символа @ . Далее, как вы будете использовать параметр? Это будет довольно просто, как показывает следующий код.

Это остановит мошенников от попыток внедриться в вашу строку команды. Это не все, для чего нужны параметры, если вы хотите узнать больше — хорошее место начать отсюда[^].

Не забывайте закрыть, когда вы закончили!

Закрытие соединения так же просто, как и открытие. Просто вызовите SqlConnection.Close() , но не забывайте поместить его в блок try/catch, потому что, как и SqlConnection.Open() , он не возвращает ошибок, а выбрасывает исключение.

Когда хорошие соединения становятся плохими

Доверенные соединения всегда были загадкой для меня, я никогда не мог понять, почему IIS и SQL-сервер не могли поладить. К счастью Pete (moredip) обратил внимание на полезный раздел документации. Чтобы сделать его более простым, я решил добавить его в эту статью. Я разбил его на две разные секции: IIS 6 и другие версии IIS. Чтобы начать, убедитесь, что osql.exe находится в ваших системных путях, или найдите его вручную. Он должен находится там же, где и ваш SQL Server в каталоге 2000 server/client tools. На моей системе это что-то вроде этого: %Install Directory%\ 80 \Tools\BINN\ . Для простоты я буду использовать псевдо-переменные в примерах, потому не смущайтесь. Например, псевдо-переменная будет выглядеть так: %VARIABLE% . Сервер будет указываться как %SERVER%\%INSTANCE% . Если вы не используете имена экземпляров, это может быть просто %SERVER% , ( local ), если сервер является локальной машиной. Если же используете имена экземпляров, это будет что-то вроде ServerName\ServerInstance и т.д. Я также буду использовать %DATABASE% для указания названия базы данных.

IIS 6 на Windows 2003 Server

Я знаю, что это будет работать на IIS 6 под Windows 2003 Server, потому что делал это, а также потому, что сейчас это единственная ОС с IIS 6. На IIS 6 процесс ASP.NET выполняется под аккаунтом ‘ NT AUTHORITY\NETWORK SERVICE ‘.

Теперь ваше приложение ASP.NET может логиниться на сервер. Все, что осталось — дать права на базы данных.

Эти 2 строки дают права на одну из баз данных. Таким образом, если вы хотите дать права на другую базу данных — просто измените %DATABASE% и выполните обе строки.

IIS 5.1

Это должно работать на всех других комбинациях с IIS 5.1 (возможны разные версии). Единственное отличие между IIS 5.1 и IIS 6 — это аккаунт, под которым выполняется процесс ASP.NET. IIS 5.1 работает под %MACHINENAME%\ASPNET , где %MACHINENAME% — это название машины.

Теперь ваше приложение ASP.NET может логиниться на сервер. Все, что осталось — это дать права на базы данных.

Эти 2 строки дают права на одну базу данных. Если вы хотите дать права на другую базу, просто измените %DATABASE% и снова выполните обе строки.

Свободные концы

Теперь вы владеете основами, необходимыми для начала использования базы данных SQL в ваших веб или настольных приложениях.

Эта статья не законченная. Я планирую расширить ее и добавить примеры приложений, как только появится время. С информацией о хранимых процедурах, как и с увеличенным разделом опций подключения. Если вы имеете пожелания, оставляйте их на форуме ниже.

Работа с базами данных в Windows Forms с использованием языка программирования C++

Как известно, начиная с версии 2008, работа с базами данных (БД) в Windows Forms средствами Microsoft Visual C++ (VC++) невозможна. Однако это не совсем так.

Начиная с версии 2008, стала недоступна работа с БД с помощью уже привычного графического интерфейса. То есть, для работы с ними нельзя создать и настроить, а, следовательно, и использовать, не визуальные элементы управления DataSet, BindingSource и TableAdapter. В то же время возможно работы с БД при помощи «обычных» классов ADO.NET полностью сохранилась.

Для реализации взаимодействия с БД служат «обычные» классы OleDbConnection, OleDbCommand и OleDbDataReader. Но, в виду того, что в Windows Forms используется управляемый код с привязкой C++/CLI, их использование имеет некоторые особенности.


Рассмотрим пример. Есть БД Microsoft Office Access, которая содержит список авторов книг в таблице Author.

Создадим простое приложение, которое будет загружать данные из этой таблицы (надписи элементов управления, включая заголовки столбцов DataGridView, предварительно настроены с помощью визуального конструктора).

Данные будем загружать в элемент управления DataGridView при нажатии на кнопку «Получить данные».

Создадим в обработчике события нажатия этой кнопки подключение к БД.

C# и MS SQL Server

Создание базы данных

Для работы с базами данных нам естественно прежде всего надо иметь какую-нибудь базу данных. В данном случае мы будем рассматривать основные концепции ADO.NET преимущественно на примере MS SQL Serverа. Поэтому вначале нам надо установить SQL Server Express. Все необходимые материалы для установки можно найти по адресу https://www.microsoft.com/en-US/download/details.aspx? >

Для начала создадим простейшую базу данных на MS SQL Server. Для этого откроем SQL Server Management Studio и нажмем на узел Databases правой кнопкой мыши. После этого в открывшемся контекстном меню выберем New Database :

После этого нам открывается окно для создания базы данных:

В нем в поле Database Name нам надо ввести название базы данных. Введем usersdb . Больше здесь вводить ничего не требуется, и поэтому нажмем на ОК.

После этого в узле Databases появляется новый элемент, который представляет только что созданную базу данных usersdb. Раскроем его и нажмем правой кнопкой мыши на его подузел Tables:

Затем нам открывается дизайнер таблицы:

В нем надо указать три столбца: Id, Name и Age, которые будут представлять соответственно уникальный идентификатор пользователя, его имя и возраст. У первого и третьего столбца надо указать тип int (то есть целочисленный), а у столбца Name — тип nvarchar (строковый).

Кроме того, в окне свойств таблицы в поле Name надо ввести имя таблицы — Users, а в поле Identity ввести Id, то есть тем самым указывая, что столбец Id будет идентификатором.

И в конце нам надо установить курсор на столбец Id и в панели инструментов программы нажать на золотой ключик. После этого напротив поля Id также должен появиться золотой ключик. Этот ключик будет указывать, что столбец Id будет выполнять роль первичного ключа.

Создать приложение для добавления записей в т аблицу MS SQL

В этой статье на нашем сайте уже было немного рассказано о том , как в простейших случаях добавить записи в таблицу данных MS SQL Server. Но такой вариант вряд ли можно назвать удачным — не все пользователи обладают достаточной квалификацией (знанием оболочки Management Studio) для выполнения подобных манипуляций. Будет гораздо надежней и грамотней предложить операторам ввода вставлять (заносить) записи в базу данных через более комфортный и привычный (по сравнению с Management Studio) пользовательский интерфейс — иначе говоря , через форму.

Цель разобранного ниже несложного примера — дать представление о том , каким образом реализовать подобный подход с использованием Windows- приложения на языке C# в среде разработки Visual Studio ( VS).

Прим. Подборку простых советов для программиста C# можно посмотреть на нашем сайте по этой ссылке

Приступаем к генерации нашего учебного приложения для добавления записей в таблицу MS SQL Server .

Первым делом создаем в VS 2013 проект (меню Файл>Создать>Проект) . :

. в виде Windows-приложения и назовем его InsSotrudniki :

Далее добавим в проект Win-форму приблизительно следующего вида и разместим на ней необходимые управляющие элементы — кнопки и текстбоксы :

На событие нажатия на кнопку btnInsert Click ‘вешаем’ код такого содержания, который в V isual S tudio будет выглядеть сл. образом :

Поскольку в данном примере приходиться работать с MS SQL Server, в пространстве имен не забудьте указать соотв. ссылки (выделено красным):

Запускаем наше нехитрое приложение для вставки новых записей в таблицу MS SQL S erver по F5 на выполнение и видим такой результат :

С целью проверки результата можно заглянуть в соответствующую табличку в MS SQL Server — для наглядности одна и та же запись была вставлена 3 раза:

Цукерберг рекомендует:  5 примеров использования mod_rewrite

Для тех, кто хочет воспользоваться данным примером, приводим код программы , который запускается при нажатии на кнопку Вставить запись :

private void btnInsert_Click(object sender, EventArgs e)

// Создаем и открываем соединение с MS SQL Server .

string strConn = «Data Source = sim\\sqlexpress; Initial Catalog = MySampleBase; Integrated Security=True»;

SqlConnection Conn = new SqlConnection(@strConn);

// Заготовка Sql-предложения Insert .

string sInsSql = «Insert into Sotrudniki(SotrId, FIO, Dolgnost, Zarplata) Values(<0>, ‘<1>‘, ‘<2>‘, <3>)» ;

// Считываем данные с формы .

string FIO = txtFIO.Text;

string Dolgnost = txtDolgnost.Text;

float ZPlata = Convert.ToSingle(txtZarplata.Text);

// Формируем запрос на вставку данных с формы .


string sInsSotr = string.Format(sInsSql, ID, FIO, Dolgnost, ZPlata);

SqlCommand cmdIns = new SqlCommand(sInsSotr, Conn);

Записная книжка программиста-новичка, C#, SQL, PHP и все-все-все

Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?

Рубрики

Свежие записи

Свежие комментарии

  • Calator prin Romania к записи Как переименовать проект/каталог проекта в Visual Studio?
  • iukovl к записи Как изменить максимальный размер загружаемого файла в php
  • sdfdsgeg к записи Работа с файлом конфигурации (configuration) в C# — читаем и сохраняем
  • iukovl к записи Как изменить максимальный размер загружаемого файла в php
  • Надежда к записи Ошибка в коде привела к убыткам в 476 миллионов долларов и банкротству компании

Архивы

Чтение и запись данных на MS SQL Server с помощью OLE DB и ADO.NET

Временами у программистов возникает жгучее желание прочитать что-то из базы данных. Программисты становятся нервными и раздражительными, теряют сон и лихорадочно тыкают пальцами в клавиатуру. Ради всеобщего блага и мира во всем мире рассмотрим несложную работу с базой данных из C# с помощью ADO.NET и OLE DB. Хотя данный механизм поддерживает разные базы данных вроде Oracle, здесь и сейчас будем использовать MS SQL Server.

Две основных задачи при работе с базой данных

1. Считать данные по select в DataTable, для дальнейшей обработки или вывода на экран

2. Выполнение sql-команды, что-то делающей на сервере (insert, update, delete, вызов функции или хранимой процедуры

3. Последовательное чтение из select-выборки строки за строкой. В основном используется в веб-приложениях, в настольных проще скачать сразу всю выборку в оперативную память, экономия от чтения только нужных строк незначительна.

4. Редкий случай. Автоматическое обновление таблицы в базе на основании изменений в DataTable (как правило редактируемой через визуальный интрфейс). В реальной жизни данные обычно читаются через сложный запрос с кучей join или представление, так что автоматическая синхронизация не подходит.

Основные классы, используемые для этих целей: OleDbConnection — соединение с базой, создаем со строкой, содержащей параметры соеднинения, открываем, закрываем, OleDbCommand — создаем с экземпляром соединения и sql-командой, если нужно просто выполнить update или получить единичное значение, то хватит этого класса, OleDbDataAdapter — создается с OleDbCommand, специализируется на разовом чтении наборов строк в DataTable, может автоматически создавать колонки DataTable на основании выборки, переносить изменения из DataTable в таблицу в базе, OleDbDataReader — последовательное чтение строк в DataTable по одной за раз (он работает внутри OleDbDataAdapter), DataTable/ DataSet — основной контейнер для данных. В перечислении OleDbType хранятся типы данных базы данных.

1. Считать данные по select в DataTable, для дальнейшей обработки или вывода на экран

2. Выполнение sql-команды, что-то делающей на сервере (insert, update, delete, вызов функции или хранимой процедуры.

Особенно стоить отметить проблемы с датами. Реализация дат в .Net крайне кривая — изначально даты не могут быть пустыми, а реальной жизни они пустые сплошь и рядом. Самое правильное решение — использовать специальный класс даты, исправляющий косяки программистов из Microsoft. Более ленивые разработчики держат все даты в коде строками и конвертируют их в DateTime только при необходимости, например при записи в базу или DataTable. Nullable DateTime не спасает, так как пустая дата в интерфейсе должна выглядеть пустой строкой, а при записи в базу как DBNull.Value — и банальный null в коде не конвертируется в эти значения без дополнительных плясок с бубном.

Первый вариант подразумевает банальное склеивание строки запроса. Считается плохой практикой и особенно опасен в веб-приложениях, так как уязвим для хакерских атак. Проблема с пустыми датами так просто не решается. Кроме того при работе с датами появляется дополнительная проблема — разные форматы строк даты в зависимости от региональный настроек .Net Framework, среды разработки и sql-сервера. Выглядеть это может сюрреалистически — один и тот же запрос работает в SQL Managment Studio, но вылетает при выполнении из кода. Частично спасает особый формат строки дат, не зависящий от региональных настроек. Тем не менее так нередко делают в маленьких программках для внутреннего пользования, о существовании которых внешний мир никогда не узнает.

Правильный вариант подразумевает создание команды с набором строго типизированных параметров. Считайте, что предыдущего абзаца не было.

Хранимая процедура вызывается точно так же, разнообразия ради другой вариант записи значений в параметры (он не связан именно с хранимой процедурой):

Расширенный вариант описания параметра с указанием размера поля и привязкой к конкретной колонке таблицы.

Если нам не нужна привязка параметра команды к определенному полю DataTable, то лучше всего не указывать размер вообще, так например если строка будет меньше указанной длинны Varchar, то добрый .Net фреймворк добавит в строку пробелов до указанной длины, испортив передаваемые на сервер данные.

Значение единичного поля читается методом ExecuteScalar()

Надо особо отметить, что ExecuteScalar возвращает Object и если запрос не вернул вообще ничего, то результат будет null и конвертация в нормальный тип данных вылетит с ошибкой. Если возможна ситуация, когда в ответ мы ничего не получим, то надо делать так:

3. Последовательное чтение из select-выборки строки за строкой
Чтение одной строки (несколько читаются в цикле);

4. Редкий случай. Автоматическое обновление таблицы в базе на основании изменений в DataTable (как правило редактируемой через визуальный интерфейс).

Необходимо прописать для DbAdapter четыре команды на каждый возможный случай — select, insert, update, delete.

Стань мастером C#: подборка книг по языку родом из Microsoft

C# — объектно-ориентированный язык программирования, созданный в 1998–2001 годах компанией Microsoft как язык разработки приложений для платформы Microsoft .NET Framework. Он совмещает в себе силу и гибкость C++ с простотой Visual Basic.


C#, конечно же, уступает по популярности таким языкам, как C, Java, C++ и PHP, но, несмотря на это, он используется довольно часто. Ниже вы найдёте подборку книг, которые помогут вам в изучении этого языка программирования.

C# Programming Yellow Book

Эта книга — пособие для первокурсников на факультете компьютерных наук университета Халла. Вот рассматриваемые темы:

  1. Компьютеры и программы. Вы узнаете, что такое компьютер, как работают программы и как их писать. В конце раздела начнётся знакомство с самим C#.
  2. Обработка данных. В этой главе разбирается написание простой программы.
  3. Создание программ. Вы научитесь разбивать программы на отдельные части и использовать массивы.
  4. Создание решений. Здесь рассматривается процесс создания сложного проекта.
  5. Продвинутое программирование. Заканчивается книга разбором более сложных и мощных возможностей C#.

Для скачивания также доступны и другие материалы учебного курса.

Fundamentals of Computer Programming with C#

Данная книга предназначена для новичков. Она учит вас мыслить как программист, а C# в данном случае — просто инструмент, который можно заменить на Java, C++, PHP или Python. Это книга о программировании, а не о C#.

Она была написана командой болгарских разработчиков, затем её перевели на английский.

Изучаем C#

C# спроектирован и разработан специально для применения с .NET Framework — он идеально подходит для создания мощных Windows-приложений.

Прочитав эту книгу, вы освоите не только C# и .NET, но и XAML, Visual Studio и даже программирование под Windows Phone.

C# 7.0. Карманный справочник

Вам никогда не хотелось иметь всегда под рукой книгу, в которой можно быстро найти ответ по той или иной особенности языка? Для C#-программистов такая книга уже существует — «C# 7.0. Карманный справочник». Это наиболее актуальная версия книги, охватывающая стандарт C# 7.0. Кроме того, книга также подойдет для опытных программистов, пишущих на Си, C++ или Java и желающих освоить в сжатые сроки новый для себя язык как для саморазвития, так и для использования в существующем проекте.

Принципы, паттерны и методики гибкой разработки на языке C#

Авторы Роберт и Мика Мартины собрал в этой книге множество методов гибкой разработки, а также продемонстрировали на примерах их работоспособность. Применяя объектно-ориентированный подход, авторы рассматривают конкретные паттерны, применяемые к проектированию приложений, описывают методы рефакторинга и способы эффективного использования различных видов UML-диаграмм.

Microsoft Visual C#. Подробное руководство

Данная книга наиболее полно охватывает все возможности языка C#. Кроме того, она сертифицирована Microsoft. В ней много материала по работе с переменными, операторами, выражениями и методами, разработке надежных приложений с обработкой ошибок и исключений, использованию коллекции, созданию запросов LINQ и основам объектно-ориентированного программирования.

В 8 издании рассматривается стандарт C# 6.0 и среда разработки Visual Studio 2015. Книга ориентирована на тех, кто уже знает хотя бы один из языков программирования, но желающих знать C#, а также на программистов, уже знакомых с C# и желающих углубить свои знания в разработке приложений.

Разработка обслуживаемых программ на языке C#

В книге содержится 10 рекомендаций по разработке легко поддерживаемых и адаптируемых программ. Данные советы были выработаны авторами книги путем анализа сотен функционирующих систем. У этой книги также имеется версия для языка Java. Руководство будет полезно тем, кто стремится написать качественный код, который смогут в дальнейшем читать и поддерживать другие программисты.

C# Programming

Эта книга подробно описывает возможности языка C#. Рассматриваются основы языка, классы, продвинутые концепции, фреймворк .NET и ключевые слова.

В изучении C# вам также поможет этот русскоязычный видеокурс.

Creating Mobile Apps with Xamarin.Forms

Эта книга рассказывает о создании кроссплатформенных мобильных приложений при помощи Xamarin.Forms. Рассматриваются такие темы, как анимация, MVVM, триггеры, поведения, макеты и рендеры.

The Daily Design Pattern

В этой книге вы найдете подробный анализ 22 популярных паттернов проектирования и их реализации на C#.

Также советуем обратить внимание на серию видеоуроков по этой же теме.

Threading in C#

Это подробное руководство познакомит вас с возможностями работы с потоками в C#. Кстати, доступна и версия на русском языке.

Introduction to programming and the C# language

Эта книга — практическое введение в C#. В ней на простых примерах объясняются все основные концепции ООП. Цель книги — научить вас разрабатывать полноценные приложения и помочь выбрать дальнейшее направление развития.

Кстати, для изучения ООП вам может пригодиться и этот русскоязычный видеокурс.

Object Oriented Programming using C#

В этой книге при помощи небольших упражнений объясняется объектно-ориентированный подход к программированию. Кульминацией является написание большой программы. Затрагиваются следующие темы:

  • абстракция;
  • наследование;
  • полиморфизм;
  • ООП;
  • UML;
  • agile;
  • разработка через тестирование.

Object-Oriented Programming in C# Succinctly

Эта книга познакомит вас с основами объектно-ориентированного программирования. В ней достаточно как теории, так и практических примеров. Вот разделы книги:

  1. Три столпа ООП.
  2. Интерфейсы.
  3. SOLID.
  4. Шаблоны проектирования.
  5. Шаблоны GRASP.
  6. Архитектура.
  7. Другие парадигмы.

C# Code Contracts Succinctly

Контрактное программирование — это метод проектирования ПО, предполагающий, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы. В C# такой подход реализуется при помощи библиотеки Code Contracts, об использовании которой и рассказывает эта книга. Вот её оглавление:

  1. Вступление.
  2. Использование контрактов для кода.
  3. Полезные советы.
  4. Тестирование контрактов для кода.
  5. Расширения контрактов для кода.
  6. Заключение.
  7. Полезные ресурсы.

Data Capture and Extraction with C# Succinctly

Обнаружение и извлечение информации — это одна из самых сложных задач, поэтому для её решения стоит пользоваться специальными инструментами. Эта книга расскажет вам, как извлекать данные из электронных писем, скриншотов, сайтов и текстов при помощи языка C#.

Если вы знаете другие бесплатные книги по C#, которые стоит добавить в нашу подборку, делитесь ими в комментариях!

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих