| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Руководство для начинающих по использованию SQL Server из C#
Автор:
By [MSA] Matt Newman, перевод выполнил
kpumuk
специально для
Realcoding.NET ВведениеВ этой статье я хочу показать, как добавлять и читать данные из баз данных 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: using System.Data.SqlClient;
Затем мы создаем SqlConnection myConnection = new SqlConnection("user id=username;" +
"password=password;server=serverurl;" +
"Trusted_Connection=yes;" +
"database=database; " +
"connection timeout=30");
Примечание: разрыв в строке соединения служит только для форматирования
SqlConnection.ConnectionStringСтрока подключения - это просто набор опций и их значений, которые указывают
как и куда подключаться. Пока я изучал справочные файлы Visual Studio .NET, я
обнаружил несколько полей, имеющих много имен, но работающих одинаково, как,
например, User ID
Password или PwdПоле пароля используется с User ID. Не имеет смысла вход в систему без имени
пользователя, а только с паролем.
Data Source, или Server, или Address, или Addr, или Network AddressПросматривая документацию MSDN, я нашел множество путей указать сетевой
адрес. В документации утверждается, что нет отличий между ними, и они могут
использоваться равнозначно. Адрес - это правильный сетевой адрес, для краткости
я использую только адрес
Integrated Sercurity или Trusted_Connection
Connect Timeout или Connection TimeoutЭти опции определяют время ожидания ответа сервера до генерации ошибки в
секундах. Значением по умолчанию является
Initial Catalog или Database
Network Library или NetОпция Network Library важна, если вы связываетесь с сервером по протоколу,
отличному от TCP/IP. Значение по умолчанию для SqlConnection.Open()Это последняя часть установки соединения, и в простом случае выполняется следующим кодом (не забудьте убедиться, что ваше соединение получило строку подключения ранее): try
{
myConnection.Open();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
Обзор командКоманды SQL, вероятно, наиболее сложная часть использования базы данных SQL, но среда .NET предоставляет обертки, которые чудесно все делают, избавляя от большей части работы. SqlCommandЕсть идеи, для чего используется SqlCommand myCommand = new SqlCommand("Command String", myConnection);
// - или -
myCommand.Connection = myConnection;
Строка команды также может быть указана двумя способами через свойство SqlCommand myCommand= new SqlCommand("INSERT INTO table (Column1, Column2) " +
"Values ('string', 1)", myConnection);
// - или -
myCommand.CommandText = "INSERT INTO table (Column1, Column2) " +
"Values ('string', 1)";
Теперь рассмотрим значения. myCommand.ExecuteNonQuery()
SqlDataReaderВставка данных - это хорошо, но получение их назад так же важно. Вот теперь
на сцену выходит try
{
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("select * from table",
myConnection);
myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
Console.WriteLine(myReader["Column1"].ToString());
Console.WriteLine(myReader["Column2"].ToString());
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Как вы видите, SqlParameterСуществует маленькая проблема при использовании SqlCommand продемонстрированным мной способом - он оставляет большую дыру в безопасности. Например, путем использования ранее продемонстрированного подхода, ваша строка команды получается примерно такой, если вы получаете данные от пользователя: SqlCommand myCommand = new SqlCommand(
"SELECT * FROM table WHERE Column = " + input.Text, myConnection);
Все красиво и прекрасно, если пользователь вводит данные в корректном виде,
однако, что случится, если пользователь введет SqlParameter myParam = new SqlParameter("@Param1", SqlDbType.VarChar, 11);
myParam.Value = "Garden Hose";
SqlParameter myParam2 = new SqlParameter("@Param2", SqlDbType.Int, 4);
myParam2.Value = 42;
SqlParameter myParam3 = new SqlParameter("@Param3", SqlDbType.Text);
myParam.Value = "Обратите внимание, что я не
указал размер. " +
"Если я сделаю это, текст будет обрезан.";
Существует соглашение по именованию (оно может быть обязательным, я не
уверен), называть параметры начиная с символа SqlCommand myCommand = new SqlCommand(
"SELECT * FROM table WHERE Column = @Param2", myConnection);
myCommand.Parameters.Add(myParam2);
Это остановит мошенников от попыток внедриться в вашу строку команды. Это не все, для чего нужны параметры, если вы хотите узнать больше - хорошее место начать отсюда[^]. Не забывайте закрыть, когда вы закончили!Закрытие соединения так же просто, как и открытие. Просто вызовите try
{
myConnection.Close();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
Когда хорошие соединения становятся плохимиДоверенные соединения всегда были загадкой для меня, я никогда не мог понять,
почему IIS и SQL-сервер не могли поладить. К счастью Pete (moredip) обратил
внимание на полезный раздел документации. Чтобы сделать его более простым, я
решил добавить его в эту статью. Я разбил его на две разные секции: IIS 6 и
другие версии IIS. Чтобы начать, убедитесь, что IIS 6 на Windows 2003 ServerЯ знаю, что это будет работать на IIS 6 под Windows 2003 Server, потому что
делал это, а также потому, что сейчас это единственная ОС с IIS 6. На IIS 6
процесс ASP.NET выполняется под аккаунтом ' osql -E -S %SERVER%%INSTANCE% -Q "sp_grantlogin 'NT AUTHORITYNETWORK SERVICE'"
Теперь ваше приложение ASP.NET может логиниться на сервер. Все, что осталось - дать права на базы данных. osql -E -S %SERVER%%INSTANCE% -d %DATABASE% -Q
"sp_grantdbaccess 'NT AUTHORITYNETWORK SERVICE'"
osql -E -S %SERVER%%INSTANCE% -d %DATABASE% -Q
"sp_addrolemember 'db_owner', 'NT AUTHORITYNETWORK SERVICE'"
Эти 2 строки дают права на одну из баз данных. Таким образом, если вы хотите дать права на другую базу данных - просто измените %DATABASE% и выполните обе строки. IIS 5.1Это должно работать на всех других комбинациях с IIS 5.1 (возможны разные
версии). Единственное отличие между IIS 5.1 и IIS 6 - это аккаунт, под которым
выполняется процесс ASP.NET. IIS 5.1 работает под osql -E -S %SERVER%%INSTANCE% -Q "sp_grantlogin '%MACHINENAME%ASPNET'"
Теперь ваше приложение ASP.NET может логиниться на сервер. Все, что осталось - это дать права на базы данных. osql -E -S %SERVER%%INSTANCE% -d %DATABASE%
-Q "sp_grantdbaccess '%MACHINENAME%ASPNET'"
osql -E -S %SERVER%%INSTANCE% -d %DATABASE%
-Q "sp_addrolemember 'db_owner', '%MACHINENAME%ASPNET'"
Эти 2 строки дают права на одну базу данных. Если вы хотите дать права на другую базу, просто измените %DATABASE% и снова выполните обе строки. Свободные концыТеперь вы владеете основами, необходимыми для начала использования базы
данных SQL в ваших веб или настольных приложениях. Рубрика: C# C Sharp)
HTML 5: пять вещей вызывающих особый интер....
HTML 5 — это грядущее обновление гипертекстового языка разметки, основного способа создания контента для размещения его во всемирной паутине. Разработка HTML остановилась в 1999 году, на версии HTML 4.01 и с тех пор web-содержимое изменилось так, что текущие спецификации HTML перестали соответствовать сегодняшним требованиям. HTML 5 нацелен на то, чтобы увеличить функциональную совместимость HTML и соответствовать растущим требованиям разнообразного и смешанного web-контента. HTML 5 так же нацелен на устранение недостатков четвертой версии. В этой статье мы взглянем на 5 новых интересных вещей в HTML 5.
Подробнее... |
Рубрика: Html
| Добавлено: 22.12.2008
asp.net: ListView с разных сторон.
Элемент управления ListView был представлен в .Net Framework 3.5 как замена устаревшему GridView. Новый элемент имеет более расширенный функционал, чем его предшественник, но в тоже время лишен некоторых внутренних механизмов, что впрочем целиком следствие из расширенной универсальности ListView. Среди отличий ListView и GridView можно назвать и гибкую настройку разметки, что позволяет выводить данные не только в табличном виде, но и вообще в любом каком пожелает программист. Благодаря шаблонам ItemTemplate, EditItemTemplate, InsertItemTeplate можно настроить внешний вид при любом из состояний ListView: редактировании или выборе элемента.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Создание кросс-таб отчета в Stimulsoft Rep....
Компания Стимулсофт предоставляет для разработчиков мощный набор инструментов для создания отчетов для Microsoft Visual Studio .Net 2005 и 2008; эти инструменты доступны как для Windows Forms, так и для Web Forms. Это генератор отчетов Stimulsoft Reports.Net. Генератор отчетов Stimulsoft Reports.Net имеет ряд особенностей: простая работа с дизайнером отчетов, полная поддержка экспорта в PDF, Word, Excel и многие другие форматы. Crystal Report и Microsoft Reporting Service – очень хорошие программные продукты для повседневной работы, но, если Вам необходимо создать отчеты с поддержкой кросс-табов, drill down, Ajax, штрих-кодов и возможностью подключения одновременно более одного источника данных, то Stimulsoft Reports.Net поможет Вам сэкономить массу времени. Также, данный генератор отчетов позволяет пользователям создавать свои собственные отчеты любой сложности. И все эти особенности делают Stimulsoft Reports.Net хорошим выбором в сфере программных продуктов для Business Intelligence.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|