ADO.NET. Управление базами данных. Связь по схеме OLE DB провайдера. Коррекция стилей DataGridView, страница 51

cmd = new SqlCommand(

  "SELECT ProductID, ProductName From Products WHERE ProductID=@ProductID", сn);

par = cmd.Parameters.Add (new SqlParameter ("@ProductID", SqlDbType.Int));

Console.WriteLine("\n{0,-36}{1}", "Product","Quantity");

foreach (DictionaryEntry en in idQuant)

{

  par.Value = (int)en.Key;

  reader = cmd.ExecuteReader();

  while (reader.Read())

  {

   Console.WriteLine("{0,2}. {1,-35}{2,2}",

    reader.GetInt32(0),reader.GetString(1), en.Value);

  }

  reader.Close();

}

Интересно сравнить результаты, полученные на последнем шаге, с теми, которые получены путем вызова хранимой процедуры CustOrderHist. Они должны быть идентичными.

Транзакции

Следующие фрагменты показывают как пользоваться объектами класса SqlTransaction.

SqlConnection cn = new SqlConnection(sCon);

SqlTransaction trans = null;

try

{

 cn.Open();

 trans = cn.BeginTransaction();

SqlCommand cmd = new SqlCommand("Insert into Tableame VALUES ('Rick')", cn);

 cmd.ExecuteNonQuery();

trans.Commit();

}

catch

{

if (trans != null)

  trans.Abort();

}

finally

{

if( cn.State == ConnectionState.Open )

  cn.Close();

}

Создание новой таблицы

Попробуйте создать новую таблицу с помощью кода. Команда SQL имеет приблизительно такой вид.

CREATE TABLE TZ (

   id  int IDENTITY(1,1)PRIMARY KEY,

   name varchar(20) NOT NULL)

INSERT TZ VALUES ('Lisa')

INSERT TZ VALUES ('Mike')

INSERT TZ VALUES ('Clara')

SELECT * FROM TZ

Установка баз данных

При работе с источниками данных SQL Server Express в Visual Studio 2005 вам может понадобиться установить сами базы. Попробуйте воспользоваться такими командами (их надо дать из командной строки, с точностью до диска).

D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data>sqlcmd -E -S (local)\SQLExpress -i InstNwnd.sql

Рассматриваемая команда должна установить базу NorthWind.mdf. Другие—устанавливаются аналогичными командами, например, известная база Pubs.mdf устанавливается командой:

sqlcmd -E -S (local)\SQLExpress -i InstPubs.sql

Команду нужно отдать в директории Data, где располагаются все остальные базы SQL Server. Доступ к базам обеспечивается такими командами:

D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data>

   sqlcmd -E -S (local)\SQLExpress -d NorthWind –Q "sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'"

D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data>

   sqlcmd -E -S (local)\SQLExpress -d NorthWind -Q "sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'"

или для базы ASPNETDB:

D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data>

   sqlcmd -E -S (local)\SQLExpress -d ASPNETDB –Q "sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'"

D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data>

   sqlcmd -E -S (local)\SQLExpress -d ASPNETDB -Q "sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'"

Задание

Разработайте приложение для управления данными, имеющее примерно такой вид:

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

Новый рисунок

Важно, чтобы в базе было не менее трех связанных таблиц и поля с изображениями или музыкой (BLOB-поля, что означает — Binary Large Objects). При навигации по главной таблице (Teams) второй DataGridView демонстрирует выборку из данных подчиненной таблицы (Players), которые связаны с первой. Третий DataGridView отслеживает перемещение по строкам второго, а следовательно, и первого (так как второй связан с первым). Пользуйтесь документом 2005 DataGridView (Task).

Сценарий работы с блоками двоичных данных

В задании вам придется работать с картинками (блоками двоичных данных). Картинки (растровые изображения), звук и другие большие массивы двоичных данных хранятся в базе в виде массивов байт (поля типа byte[]), их обычно называют BLOB-поля (Binary Large Objects Fields). В этом задании вам понадобится довольно хитрый синхронизатор текущей позиции.