Лекція 2. ОБ'ЄКТИ ADO. NET 1.З'єднання з базою даних 2.Командний рядок з'єднання ConnectionString 3.Поимилки зєднання з БД 4.Пул інструкцій 5.Властивості.

Презентация:



Advertisements
Похожие презентации
Департамент образования и науки Тюменской области Государственное автономное профессиональное образовательное учреждение Тюменской области «Западно-Сибирский.
Advertisements

РЭУБД РЭУБД ADO (Microsoft ActiveX Data Object )
Высокоуровневые методы информатики и программирования Лекция 27 Основы ADO.Net.
Разработка приложений для работы с БД На примере PHP и ASP.Net.
Низкоуровневые операции в ИС. Сокеты в C#. Понятие сокета Если требуется получить доступ к сетевым операциям низкого уровня, в программе следует использовать.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – работа с базами данных посредством ADO.NET Из цикла.
ADO.NET Интегрированная среда разработки. ADO.NET Общая картина Все типы ADO.NET предназначены для выполнения одного набора задач: установить соединение.
Объект Command Свойства объекта Command Connection CommandText.
Объектный доступ к Cache из среды.NET Александр Харитонов, InterSystems.
Исключительные ситуации. Схема обработки исключений Try { //охраняемый блок trow (new MyException();) } catch(MyExeption e) { … } catch(Exeption e){ …
Web-сервисы. Понятие сервиса Сервисы в Web являются наследниками COM-объектов в обычных и распределенных приложениях. COM-объекты предоставляли любому.
Java Database Connectivity (JDBC) Универсальное API для доступа к данным.
Дмитрий Петухов ЦКЗ Аргус. Технологии доступа к данным Популярные ORM ы NHibernate Демо.
Программируемый клиент ORACLE Технология Pro C/C++
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Технология удаленного доступа к объектам Remoting.
PL/SQL Курсоры. Курсор – специальный элемент, связанный с SQL-оператором SELECT. Объявление курсора происходит в секции объявления базового блока. Работа.
Обеспечение безопасности данных. Управление доступом к данным. Управление доступом к данным. Управление пользователями БД. Управление пользователями БД.
Java : доступ к базам данных, технология JDBC. Примеры баз данных.
Администрирование информационных систем Начало работы с MS SQL Server 2000.
Транксрипт:

Лекція 2. ОБ'ЄКТИ ADO. NET 1.З'єднання з базою даних 2. Командний рядок з'єднання ConnectionString 3. Поимилки зєднання з БД 4. Пул інструкцій 5.Властивості обєкту Сommand 6. Методи обєкту Сommand

Параметр Описание Provider (Поставщик)Свойство применяется для установки или возврата имени поставщика для соединения, используется только для объектов OleDbConnection Connection Timeout или Connect Timeout (Время ожидания связи) Длительность времени ожидания связи с сервером перед завершением попытки и генерацией исключения в секундах. По умолчанию 15 Initial Catalog (Исходный каталог) Имя базы данных Data Source (Источник данных)Имя используемого SQL-сервера, когда установлено соединение, или имя файла базы данных Microsoft Access Password (Пароль)Пользовательский пароль для учетной записи SQL Server User ID (Пользовательский ID) Пользовательское имя для учетной записи SQL Server Integrated Security или Trusted Connection (Интегрированная безо­пасность, или Довери­ тельное соединение) Параметр, который определяет, является ли соединение защищенным. True, False и SSPI - возможные значения (SSPI - эквивалент True) Persist Security Info (Удержание защитной информации) Когда установлено False, нуждающаяся в защите информация, такая как пароль, не возвращается как часть соединения, если связь установлена или когда-либо была установленной. Выставление этого свойства в True может быть рискованным в плане безопасности. По умолчанию False Workstation IDИмя робочей станции или компьютера Таблица 1 Основные параметры строки соединения

Data Source=.\ Serv_name; AttachDbFilename=" Pass\file.mdf"; Integrated Security=True; Connect Timeout=30; User Instance=True Событие Описание Disposed Возникает при вызове метода Dispose экземпляра класса InfoMes- sage Возникает при получении информационного сообщения от поставщика данных StateChang e Возникает при открытии или закрытии соединения. Поддерживается информация о текущем и исходном состояниях События объекта Connection

string connectionString Source=.\Srv_name; AttachDbFilename=" + ";Integrated Security=True;Connect Timeout=30"; string commandText = "SELECT * FROM Tab1"; private void btnFill_Click(object sender, System.EventArgs e) { SqlConnection conn = new SqlConnection(); conn.ConnectionString = connectionString; conn.Disposed+=new EventHandler(conn_Disposed); conn.StateChange+= new StateChangeEventHandler(conn_StateChange); SqlDataAdapter dataAdapter = new SqlDataAdapter(commandText, conn); DataSet ds = new DataSet(); dataAdapter.Fill(ds); dataGridl.DataSource = ds.Tables[0].DefaultView; conn.Dispose();}

Таблица 3 - Ошибки SQL Server Номер ошибки Описание 17Неверное имя сервера 4060Неверное название базы данных 18456Неверное имя пользователя или пароль Таблица 4 Уровни ошибок SQL Server Интервал возвращаемых значений Описание Действие 11-16Ошибка, созданная пользователем Пользователь должен повторно вве ­ сти верные данные 17-19Ошибки программного обеспечения или оборудования Пользователь может продолжать ра ­ боту, но некоторые запросы будут недоступны. Соединение остается открытым 20-25Ошибки программного обеспечения или оборудо ­ вания Сервер закрывает соединение. Пользователь должен открыть его снова

Таблица 4 Параметры пула соединения поставщика MS SQL Server Параметр ОписаниеЗначение по умолчанию Connection Lifetime Время (в секундах), по истечении которого откры ­ тое соединение будет закрыто и удалено из пула. Сравнение времени создания соединения с текущим временем проводится при возвращении соединения в пул. Если соединение не запрашивается, а время, заданное параметром, истекло, соединение закрыва ­ ется. Значение 0 означает, что соединение будет за ­ крыто по истечении максимального предусмотрен ­ ного таймаута (60 с.) 0 Enlist Необходимость связывания соединения с контек ­ стом текущей транзакции потока True Max Pool Size Максимальное число соединений в пуле. При ис ­ черпании свободных соединений клиентское при ­ ложение будет ждать освобождения свободного со ­ единения 100 Min Pool Size Минимальное число соединений в пуле в любой момент времени 0 Pooling Использование пула соединенийTrue

Властивості Command: Connection - подключение к базе данных CommandType - тип команды (запроса), Text. Текстовая команда состоит из SQL-конструкции, StoredProcedure. Текстовая команда состоит из названия хранимой процедуры. CommandText - собственно сам текст запроса. TableDirect. Текстовая команда состоит из названия таблицы базы данных

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

public Form1() { InitializeComponent(); string commandText = "SELECT Pole1, Pole2, Pole3 FROM Tab1"; string ConnectionString " + "Data Source= Pass\file.mdb"; OleDbConnection conn=new OleDbConnection(ConnectionString); conn.Open(); OleDbCommand MyCommand=new OleDbCommand(); MyCommand.Connection = conn; //или OleDbCommand MyCommand=conn.CreateCommand(); MyCommand.CommandText = commandText; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(); dataAdapter.SelectCommand = MyCommand; DataSet ds = new DataSet(); dataAdapter.Fill(ds, "Tab1"); dataGridView1. DataSource = ds.Tables["Tab1"].DefaultView; conn.Close(); }

private string connectionString Source =.\Serv_name; AttachDbFilename = " + ";Integrated Security=True; Connect Timeout=30; User Instance=True"; private string commandText = "SELECT * FROM Tab2"; public Form1() { InitializeComponent(); SqlConnection conn = new SqlConnection(connectionString); conn.Open(); SqlCommand myCommand = conn.CreateCommand(); //обо myCommand.Connection = conn; myCommand.CommandText = commandText; //обо myCommand.ExecuteNonQuery(); SqlDataAdapter dataAdapter = new SqlDataAdapter(); dataAdapter.SelectCommand = myCommand; DataSet ds = new DataSet(); dataAdapter.Fill(ds, " Tab2"); conn.Close(); dataGridView1. DataSource = ds.Tables["Tab2"].DefaultView; }

using System; using System.Data.SqlClient; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string connectionString Source=.\ Serv_name;+ Pass\file.mdf.mdf" + ";Integrated Security=True;+ Connect Timeout=30;User Instance=True"; string commandText = "SELECT * FROM Tab2"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandText = "UPDATE K_tour " + "SET Pole1 = XXXXX' WHERE [K_tour] = 3"; myCommand.ExecuteNonQuery(); conn.Close(); }}}

using System; using System.Data.SqlClient; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string connectionString ADO\BDSQL2.mdf"+ "integrated Security=True;Connect Timeout=30;User Instance=True"; string commandText = "SELECT * FROM Tab2"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandText = "SELECT COUNT (*) FROM Tab2"; string Znach_text = Convert.ToString(myCommand.ExecuteScalar()); conn.Close(); Console.WriteLine(Text: " + Znach_text); Console.ReadKey(); } } }

myCommand.CommandText = "SELECT COUNT (*) FROM Туры"; string KolichestvoTurov = Convert.ToString(myCommand.ExecuteScalar()); myCommand.CommandText = "SELECT MAX (Цена) FROM Туры"; string MaxPrice = Convert.ToString(myCommand.ExecuteScalar()); myCommand.CommandText = "SELECT MIN (Цена) FROM Туры"; string MinPrice = Convert.ToString(myCommand.ExecuteScalar()); myCommand.CommandText = "SELECT AVG (Цена) FROM Туры"; string AvgPrice = Convert.ToString(myCommand.ExecuteScalar()); conn.Close(); Console.WriteLine("Количество туров: " + KolichestvoTurov + "\n Самый дорогой тур, цена в руб. : " + MaxPrice + \n Самый дешевый тур, цена в руб.: " +MinPrice +"\n Средняя цена туров: " + AvgPrice);

using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { string connectionString Source=.\ Serv_name; Pass\file.mdf+ ";Integrated Security=True;Connect Timeout=30;User Instance=True"; string commandText = "SELECT * FROM Tab1"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandText = "SELECT * FROM Tab1"; SqlDataReader dataReader = myCommand.ExecuteReader(); while (dataReader.Read()) { Console.WriteLine(dataReader["Pole1"]); } dataReader.Close(); conn.Close(); Console.ReadKey(); }

Console.WriteLine(dataReader[1]); Console.WriteLine(dataReader[0]); Console.WriteLine(dataReader[1]); Console.WriteLine(dataReader[2]); Console.WriteLine(dataReader[3]); Console.WriteLine(Convert.ToString(dataReader[0]) + " " + Convert.ToString(dataReader[1]) + " " + Convert.ToString(dataReader[2]) +" " + Convert.ToString(dataReader[3]));

private void proc1_Action(object sender, System.EventArgs e) { try { string Param1 = Convert.ToString(Contrl_X.Text); int Param2 = int.Parse(Contrl_X.Text); conn = new SqlConnection(); conn.ConnectionString Source=.\ Serv_name; Pass\file.mdf+ ";Integrated Security=True;Connect Timeout=30;User Instance=True"; conn.Open(); SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandText = "UPDATE Tab1 SET Pole1 WHERE [Pole 1] Param2";

SqlDbType.NVarChar, 50); myCommand. Param1"].Value = znach1; Param2", SqlDbType.Int, 4); myCommand. Param2"].Value = znach2; int UspeshnoeIzmenenie = myCommand.ExecuteNonQuery(); if (UspeshnoeIzmenenie !=0) { MessageBox.Show("Изменения внесены", "Изменение записи"); } else { MessageBox.Show("Не удалось внести изменения", "Изменение записи"); } conn.Close(); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } finally { conn.Close(); }

public Form1() { InitializeComponent(); try { conn = new SqlConnection(); conn.ConnectionString Source=.\ Serv_name; Pass\file.mdf+ ";Integrated Security=True;Connect Timeout=30;User Instance=True"; conn.Open(); SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandText = "SELECT * FROM Tab1"; dataReader = myCommand.ExecuteReader(); while (dataReader.Read()) { int Pole1 = dataReader.GetInt32(0); string Pole2= dataReader.GetString(1); string Pole3 = dataReader.GetString(2); string Pole4 = dataReader.GetString(3);

//Выводим данные в элемент listBox1 listBox1.Items.Add(Pole_name1: " + Pole1 …); //Создаем экземпляр item класса ListViewItem для записи в него данных из dataReader ListViewItem item = new ListViewItem(new string[] {Convert.ToString(dataReader[0]), Convert.ToString(dataReader[1]), Convert.ToString(dataReader[2]), Convert.ToString(dataReader[3])} ); listView1.Items.Add(item); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } finally { dataReader.Close(); conn.Close(); }

private void proc_name(object sender, System.EventArgs e) { SqlConnection conn = new SqlConnection(); conn.ConnectionString = connectionString; SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandType = CommandType.StoredProcedure; myCommand.CommandText = "[proc1]"; conn.Open(); string Pole1 = Convert.ToString(myCommand.ExecuteScalar()); lblPole1. Text = MaxPrice; conn.Close(); }

private void proc1_name(object sender, System.EventArgs e) { try { conn = new SqlConnection(); conn.ConnectionString = ConnectString; SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandType = CommandType.StoredProcedure; myCommand.CommandText = "[proc1]"; int Param1_value = int.Parse(Contr1.Text); SqlDbType.Int, 4); Param1 "].Value = Param1_value; Param1"].Direction = ParameterDirection.Input; SqlDbType.NVarChar, 60); Param2"].Direction = ParameterDirection.Output; conn.Open(); myCommand.ExecuteScalar(); Contr2. Text = } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { conn.Close(); } }

int TouristID = int.Parse(this.txtTouristlD.Text); SqlDbType.Int, 4); = TouristID; //Необязательная строка, т.к. совпадает со значением по умолчанию. = ParameterDirection.Input; SqlDbType.NVarChar, 60); = ParameterDirection.Output; conn.Open(); myCommand.ExecuteScalar(); lblFamily.Text = } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { conn.Close(); } }

public Form1() { InitializeComponent(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConnectionString; SqlCommand myCommand = conn.CreateCommand(); myCommand.CommandType = CommandType.StoredProcedure; myCommand.CommandText = "[proc_Tworesult]"; conn.Open(); SqlDataReader dataReader = myCommand.ExecuteReader(); while(dataReader.Read()) {listBox2.Items.Add(dataReader.GetString(1)+" "+dataReader.GetString(2)); } dataReader.NextResult(); while(dataReader.Read()) { listBox1. Items. Add(dataReader.GetString(1) + ". Дополнительная информация: "+dataReader.GetString(3)); } dataReader.Close(); conn.Close(); }

using System.Data.SqlClient; namespace EasyTransaction { class Classl {[STAThread] static void Main(string[] args) { //Создаем соединение SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConnectionString conn.Open(); SqlCommand myCommand = conn.CreateCommand(); //Создаем транзакцию myCommand.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Serializable);

try { myCommand.CommandText = "INSERT INTO …"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "INSERT INTO …"; myCommand.ExecuteNonQuery(); //Подтверждаем транзакцию myCommand.Transaction.Commit(); Console.WriteLine("Передача данных успешно завершена"); } catch(Exception ex) { //Отклоняем транзакцию myCommand.Transaction.Rollback(); Console.WriteLine("При передаче данных произошла ошибка: "+ ex.Message); } finally { conn.Close(); } } end Main } end Class } end namespace

//Создаем соединение... //Создаем транзакцию myCommand.Transaction = conn.BeginTransaction(); try { //Выполняем команды, вызываем одну или несколько хранимых процедур //Подтверждаем транзакцию myCommand.Transaction.Commit(); } catch(Exception ex) { //Отклоняем транзакцию myCommand.Transaction.Rollback(); } finally { //Закрываем соединение conn.Close(); }

Проблемы выполнения транзакций: Dirty reads Non-repeatable reads Phantom reads Четыре уровня изоляции тран­закции: Read uncommitted. Read committed. Repeatable read. Serializable. Isolation levelDirty readNonrepeatable readPhantom Read uncommittedYes Read committedNoYes Repeatable readNo Yes SerializableNo Уровни изоляции Microsoft SQL Server