Опубликован: 05.08.2007 | Доступ: свободный | Студентов: 2200 / 83 | Оценка: 4.47 / 4.09 | Длительность: 20:11:00
ISBN: 978-5-9556-0097-0
Лекция 2:

Объекты ADO .NET

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Объект Command

Объект Command применяется для выполнения SQL-запросов к источнику данных. Чтобы выполнить запрос, свойству Connection объекта Command следует задать объект - имя созданного Connection:

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;
conn.Open();
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = conn;

Объект Connection также предоставляет метод CreateCommand, позволяющий упростить данный процесс - этот метод возвращает новый объект Command, уже инициализированный для использования вашего объекта Connection:

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString;
conn.Open();
OleDbCommand myCommand = conn.CreateCommand();

Эти два способа совершенно эквивалентны.

Теперь нам следует определить SQL-запрос, который будет извлекать данные. Как и раньше, строкой, в которой будет содержаться этот запрос, будет CommandText. Объявляем переменную CommandText, извлекающую все столбцы таблицы Customer:

string сommandText = @"SELECT Address1, Address2, City, 
 [Contact First Name], [Contact Last Name], [Contact Position],
 [Contact Title], Country, [Customer Credit ID], [Customer ID],
 [Customer Name], [E-mail], Fax, [Last Year's Sales], Phone,
 [Postal Code], Region, [Web Site] FROM Customer";

Объект myСommand имеет свойство, которое так и называется - CommandText. Чтобы избежать путаницы, изменим название переменной - CommandText на commandText (с маленькой буквы):

myCommand.CommandText = commandText;

Создаем объект OleDbDataAdapter:

OleDbDataAdapter dataAdapter = new OleDbDataAdapter();

Объект dataAdapter имеет свойство SelectCommand в котором мы и будем указывать объект myCommand:

dataAdapter.SelectCommand = myCommand;

Создаем объект DataSet:

DataSet ds = new DataSet();

Заполняем ds данными из dataAdapter:

dataAdapter.Fill(ds, "Customers");

Указываем источник данных DataSource для dataGrid1:

dataGrid1.DataSource = ds.Tables["Customers"].DefaultView;

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

conn.Close();

Все! Запускаем приложение. Мы получили уже знакомый результат, но теперь мы действительно управляем всеми объектами, работающими с данными.

Полный листинг проекта ConnectionMDB:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;

namespace ConnectionMDB
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.DataGrid dataGrid1;
		string ConnectionString = 
		 @"Provider=""Microsoft.Jet.OLEDB.4.0"";
		 Data Source=""E:\Program Files\Microsoft Visual Studio
		 .NET 2003\Crystal Reports\Samples\Database\xtreme.mdb"
		 ";User ID=Admin;Jet OLEDB:Encrypt Database=False";

		string commandText = @"SELECT Address1, Address2, City,
		 [Contact First Name], [Contact Last Name], [Contact Position],
		 [Contact Title], Country, [Customer Credit ID], [Customer ID],
		 [Customer Name], [E-mail], Fax, [Last Year's Sales],
		 Phone, [Postal Code], Region, [Web Site] FROM Customer";


		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();
			OleDbConnection conn = new OleDbConnection(ConnectionString);
 			//OleDbConnection conn = new OleDbConnection(); 
			//conn.ConnectionString = ConnectionString;
			conn.Open();
			OleDbCommand myCommand = new OleDbCommand();
			myCommand.Connection = conn;
			myCommand.CommandText = commandText;
			//OleDbCommand myCommand = conn.CreateCommand();
			OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
			dataAdapter.SelectCommand = myCommand;
			DataSet ds = new DataSet();
			dataAdapter.Fill(ds, "Customers");
			dataGrid1.DataSource = ds.Table
			 ["Customers"].DefaultView;
			conn.Close();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		Windows Form Designer generated code
		
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void Form1_Load(object sender, System.EventArgs e)
		{
		
		}
	}
}

Сравните использование строк ConnectionString и connectingText объектом myCommand с аналогичным использованием объектом DataAdapter ( ProgrammDataMDB и ProgrammDataSQL ).

Создание объекта Connection для базы данных SQL принципиально не отличается от примера, рассмотренного выше. В следующем фрагменте кода описываются те же объекты Connection и Command:

using System.Data.SqlClient;

string CommandText = "SELECT CustomerID, CompanyName, ContactName,
 ContactTitle, Address, City, Region, PostalCode, Country, Phone,
 Fax FROM Customers";
string connectionString = "workstation id=7EA2B2F6068D473;
 integrated security=SSPI;data source=\"(local)\";
 persist security info=False;initial catalog=NorthwindCS";
			
SqlConnection conn = new SqlConnection(connectionString);
//SqlConnection conn = new SqlConnection(); 
//conn.ConnectionString = ConnectionString;
			conn.Open();
			SqlCommand myCommand = new SqlCommand();
			myCommand.Connection = conn;
			myCommand.CommandText = CommandText;
			//SqlCommand myCommand = conn.CreateCommand();
			SqlDataAdapter dataAdapter = new SqlDataAdapter();
			dataAdapter.SelectCommand = myCommand;
			DataSet ds = new DataSet();
			dataAdapter.Fill(ds, "Customers");
			dataGrid1.DataSource = ds.Tables["Customers"].DefaultView;
			conn.Close();

В программном обеспечении к курсу вы найдете приложения ConnectionMDB и ConnectionSQL (Code\Glava1\ ConnectionMDB и ConnectionSQL).

У вас наверняка могло сложиться впечатление, что использование визуальных средств Microsoft Visual Studio .NET для добавления и конфигурирования объектов ADO .NET несравненно проще и логичней, чем программный способ создания этих объектов. Однако это впечатление глубоко ошибочно. В действительности только последний пример может претендовать на завершенное приложение - все остальные являются своего рода вспомогательными модулями. Повторю, что только полностью вручную написанный код объектов ADO .NET позволяет создавать ясные, надежные и гибкие приложения.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >