Добавлен: 09.02.2019
Просмотров: 1435
Скачиваний: 5
Site - Возвращает или задает ISite объекта Component. (Inherited from Component)
TableMappings - Получает коллекцию, обеспечивающую основное сопоставление между исходной таблицей и DataTable. (Inherited from DataAdapter)
UpdateBatchSize - Возвращает или задает число строк, обработанных при каждом обращении к серверу.
UpdateCommand - Возвращает или задает инструкцию Transact-SQL или хранимую процедуру, используемую для обновления записей в источнике данных.
using System.Data;using System.Data.SqlClient;
public partial class Form1 : Form
{
SqlConnection conn;
SqlCommand cmd;
SqlDataAdapter myAdapter;
// Объекты для локальной копии БД
DataSet myDataSet;
DataTable Person;
BindingSource personBS;
}
string connStr ="Data Source =(local)\\SQLEXPRESS;" +"Initial Catalog = MyBase;" +"Integrated Security = True" ;( при подключении к базе данных используется те же права доступа, что и при загрузке Windows) conn = new SqlConnection(connectionString); conn.Open();string sqlStr = "SELECT Name, Post, Oklad FROM Person";cmd = new SqlCommand(sqlStr, conn); myAdapter=newSqlDataAdapter(cmd);Person=newDataTable();SqlDataAdapter.myAdapter.Fill(Person);personBS=newBindingSource();personBS.DataSource = Person; dataGridView1.DataSource = personBS;
5) Место нахождения файлов базы данных MS SQL server. Системные базы данных. Подключение к базе данных, указывая путь файла базы данных.
Место нахождения файлов базы данных MS SQL server задается при ее создании.
Системная база данных |
Описание |
master |
В этой базе данных хранятся все данные системного уровня для экземпляра SQL Server. |
tempdb |
Рабочее пространство для временных объектов или взаимодействия результирующих наборов. |
msdb |
Используется агентом SQL Server для планирования предупреждений и задач. |
model |
Используется в качестве шаблона для всех баз данных, создаваемых в экземпляре SQL Server. Изменение размера, параметров сортировки, модели восстановления и других параметров базы данных model приводит к изменению соответствующих параметров всех баз данных, создаваемых после изменения. |
resource |
Системные объекты физически хранятся в базе данных resource, но логически отображаются в схеме sys любой базы данных. |
Строка подключения strConn определяет место нахождения базы данных и параметры подключения к этой базе данных. Для определения строки подключения в окне Обозреватель серверов выделите базу данных и откройте окно свойств. В окне свойств скопируйте значение параметра Строка подключения и вставляйте эту строку в код обработчика Form1_Load.
private void Form1_Load(object sender, EventArgs e)
{
string strConn = "Data Source=(local)\\SQLEXPRESS; " +
"Initial Catalog=MyBase;" +
"Integrated Security=True; Pooling=False";
string strCmd = "SELECT Name, Post, Oklad, BirthDay FROM Person";
SqlDataAdapter adapPerson = new SqlDataAdapter(strCmd, strConn);
DataTable Person = new DataTable();
adapPerson.Fill(Person);
dataGridView1.DataSource = Person;
}
6) Команда SELECT языка SQL. Определение вычисляемых полей. Операнд WHERE команды SELECT. Формирование условий отбора записей с помощью операций сравнения.
Команда SELECT языка SQL.
Команда SELECT предназначена для отбора нужных записей.
Команда SELECT имеет следующий упрощенный формат:
SELECT {<Список полей> }
FROM <Список таблиц>
WHERE <Условия отбора записей>
В этой команде обязательно должен быть указан только список полей и операнд FROM, а остальные операнды могут отсутствовать. В списке операнда FROM перечисляются имена таблиц, из которых отбираются записи. Этот список должен содержать как минимум одну таблицу. Например, для отбора всех записей таблицы следует выполнить SQL-запрос:
SELECT Name, Oklad, Post FROM Person
Определение вычисляемых полей.
Кроме физических полей таблиц, в SELECT-запрос можно включать вычисляемые поля. Для получения вычисляемого поля в списке полей указывается не имя этого поля, а выражение, по которому рассчитывается его значение. Например,
SELECT Name, Post, Oklad, Oklad*1.5 AS Зарплата
FROM Person
Здесь через ключевое слово AS вводится имя вычисляемого поля. Ввод имени поля не обязателен, но использование имени поля позволяет представлять информацию более наглядно.
Операнд WHERE команды SELECT. Формирование условий отбора записей с помощью операций сравнения.
На практике требуется отобрать записей, которые удовлетворяют каким-либо условиям отбора записей. Это условие отбора записей задается с помощью операнда WHERE.
Критерий отбора записей представляет собой логическое выражение, в котором можно использовать следующих операторов сравнения.
= - равно; <= - меньше или равно;
> - больше; <> - или != - не равно;
< - меньше; !> - не больше;
>= - больше или равно; !< - не меньше.
В качестве примера можно привести следующий SQL-запрос.
SELECT Name, Oklad FROM Person
WHERE Oklad > 20000;
Эта команда определяет получение списка сотрудников, имеющих оклад более 20000 рублей.
private void sql_load2_Click(object sender, EventArgs e)
{
/*string str = "SELECT Id, Name, Age, Position, Experience, Salary FROM Person Where Salary between 37000 and 50000";
com.CommandText = str;
// Скачивание данных таблицы
Person.Clear();
myAdapter.Fill(Person);*/
}
7) Соединение с базой данных MS Access. Провайдеры и классы для доступа к базе данных MS Access. Программный доступ к базе данных Access.
Вначале запустите Access и создайте базу данных с именем AccessDB. В этой базе данных создайте таблицу Person и заполняйте эту таблицу с несколькими записями. Пользовательский интерфейс MS Access достаточно прост, как выполнить создание таблиц и заполнение их данными вы наверно, догадаетесь без проблем.
Теперь переходите в среду Visual Studio.NET и подключитесь на эту базу данных. Для этого выполните команду Сервис/Подключиться к базе данных. При этом появляется окно выбора источника данных. В этом окне выберите строку Файл базы данных Microsoft Access и нажмите на кнопку Продолжить. Тогда появится окно подключения к базе данных, где следует выбрать имя файла базы данных
С помощью кнопки Обзор выберите файл базы данных, например, D:\AccessDB.mdb и нажмите на кнопку. OK. Тогда в окне Обозреватель серверов появится выбранная база данных.
Наборы классов для работы с базами данных зависят от типа используемой СУБД. В случае использования базы данных Access эти классы находятся в пространстве имен System.Data.OleDb. Подключите в приложение это пространство имен:
using System.Data.OleDbClient;
Имена классов для доступа к базам данных различных СУБД похоже друг другу и зависят от поставщика данных. Например, класс для соединения базе данных MS SQL Server называется SqlConnection, а аналогичный класс для соединения базе данных Access называется OleDbConnection. Как видно, имена классов для работы с базой данных Access различаются от имен классов для работы с базой данных MS SQL Server только приставкой “OleDb” и “Sql”.
Заметим, что по функциональности эти классы имеют одинаковые возможности. Для примера, ниже приведен порядок использования классов для работы с базой данных Access. Вначале объявляйте глобальных переменных - объектов классов для работы с базой данных Access:
public partial class Form1 : Form
{
OleDbConnection conn;
OleDbCommand cmd;
OleDbDataAdapter adapPerson;
DataTable Person;
Теперь переопределите код обработчика события Form1_Load. Для получения строки подключения в окне Обозреватель серверов вначале выделяйте базу данных AccessDB, затем из окна свойств скопируйте строку подключения.
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=E:\\AccessDB.mdb";
conn = new OleDbConnection(strConn);
conn.Open();
8) Операнд WHERE команды SELECT. Формирование условий отбора записей с помощью операторов LIKE, IN, BETWEEN, NOT, IS NULL.
Для составления более сложных условий отбора с помощью операнда WHERE можно использовать следующих операторов:
1. Оператор LIKE.
Этот оператор позволяет формировать условие отбора записей по шаблону. В строке шаблона можно использовать один или несколько символов подстановки. Назначение этих символов представлено ниже:
_ - замещение одного символа. Например, J_y соответствует Joy и Jay.
% - замещение любого количества символов, в том числе и нулевого. Например, Иван% соответствует фамилиям Иван, Иванов, Иванчук и т.п.
[символы] – соответствует одному любому символу перечисленных в скобках. Например, [sm]ay соответствует say и may.
[^символы] – соответствует одному любому символу, не включенному в скобки. Например, [^a] соответствует любому символу кроме a.
[Символ1 – Символ2] – соответствует диапазону символов. Например, [a-c]bc соответствует словам abc, bbc и cbc.
# - соответствует одной любой цифре. Например, А# соответствует от А0 до А9.
В качестве примера, в коде предыдущей программы замените SQL-запрос на следующий запрос:
SELECT Name, Post, Oklad FROM Person
WHERE Name LIKE 'Иван%'
В результате выполнения этого SQL-запроса будет получен список служащих, фамилии которых начинаются на Иван.
2. Оператор IN
Чтобы извлечь записи, значения полей которых содержатся в некотором заданном списке, в условии WHERE можно использовать оператор IN. Например, следующий SELECT-запрос использует оператор IN для получения записей таблицы Person, у которых ID равен 1, 3 и 15.
SELECT ID, Name, Post, Oklad
FROM Person
"WHERE ID IN (1, 3, 15)";
3. Оператор BETWEEN
Оператор BETWEEN в условии WHERE можно использовать для извлечения записей, значения полей которых находятся в указанном диапазоне. Например, следующий запрос извлекает записей о служащих, у которых DepID находится между 2 и 4:
SELECT Name, Oklad, DepID
FROM Person
WHERE DepID BETWEEN 2 AND 4
4. Использование оператора NOT
Оператор NOT с другим оператором в условии WHERE можно использовать для инвертирования значения оператора. Например, следующий SELECT-запрос использует оператор NOT для инвертирования значения оператора BETWEEN в примере, который был показан ранее:
SELECT Name, DepID, Oklad, DepID
FROM Person
WHERE DepID NOT BETWEEN 2 AND 4
5. Оператор IS NULL
Поля могут иметь значение NULL. Значение NULL отличается от пустой строки или нуля – это значение, которое либо еще не задано, либо неизвестно. Можно использовать оператор IS NULL в условии WHERE для определения, равно ли значение поля NULL.
Например, следующий SELECT-запрос использует оператор IS NULL для получения записей о служащих, у которых поле Oklad содержит значение NULL:
SELECT Name, Post FROM Person
WHERE Oklad IS NULL;
string str = "SELECT Id, Name, Age, Position, Experience, Salary FROM Person Where Experience > 4 and Salary between 37000 and 50000";
com.CommandText = str;
// Скачивание данных таблицы
Person.Clear();
myAdapter.Fill(Person);*/
9) Использование свойства Filter класса BindingSource для фильтрации записей таблицы. Сортировка записей операндом ORDER BY и свойством Sort класса BindingSource.
Использование свойства Filter класса BindingSource для фильтрации записей таблицы :
Для хранения имени поля для фильтрации определите глобальную переменную filterField. Предполагается, что по умолчанию фильтрация происходит по полю Name.
string filterField = "Name";
Для текстового поля определите обработчик события TextChanged, где определяется условие фильтрации:
private void textBox1_TextChanged(...)
{
bsPerson.Filter = filterField + " LIKE '" + textBox1.Text + "%'";
}
Как видно, при изменении текста в текстовом поле формируется новое условие фильтрации. Например, когда фильтрация происходит по полю Name, то условие фильтрации может быть следующего вида:
Name LIKE ‘Иван%’
ИЛИ
Задать Filter свойства необходимое выражение.
В примере выражение является именем столбца, за которым следует значение для столбца.
BindingSource1.Filter = "ContactTitle='Owner'";
Сортировка записей операндом ORDER BY
Оператор ORDER BY позволяет отсортировать извлекаемые значения по определенному столбцу:
SELECT * FROM <имя таблицы> ORDER BY <название столбца >
Сортировка записей свойством Sort класса BindingSource:
-
Задайте Sort свойства к имени столбца, который будет следуют ASC или DESC для указания по возрастанию или убыванию.
-
Несколько столбцов разделяются запятыми.
BindingSource1.Sort = "Country DESC, Address ASC";
10) Перемещение по записям таблицы с помощью свойств и методов класса BindingSource.
Свойство Position класса BindingSource содержит номер текущей записи таблицы, которое доступно для чтения и записи. Изменив значение этого свойства можно перемещаться на нужную запись.
Для перемещения по записям таблицы класс BindingSource имеет следующие методы:
MoveNext() – переход на следующую запись;
MovePrevious() – переход на предыдущую запись;
MoveFirst() – переход на первую запись;
MoveLast() – переход на последнюю запись.
private void button1_Click(...)
{
// Переход на следующую запись
personBS.MoveNext();
int curRecord = personBS.Position;
MessageBox.Show(
Convert.ToString(curRecord));
}
private void button2_Click(...)
{
// Переход на запись с номером
int curRecord =
Convert.ToInt32(textBox1.Text);
personBS.Position = curRecord;
}
11) Доступ к полям текущей записи с помощью класса BindingSource
Для доступа к полям текущей записи также можно использовать свойство Current класса BindingSource. Это свойство дает указатель на текущую запись таблицы, который затем может использоваться для доступа к полям этой записи. Для демонстрации работы с этим свойством на форме разместите два текстовых поля и определите обработчик события CellClick элемента управления dataGridView1.
private void dataGridView1_CellClick(...)
{
DataRowView dataRow =(DataRowView)personBS.Current;
textBox1.Text = dataRow["Name"].ToString();
textBox2.Text = dataRow["Oklad"].ToString();
}
Как видно, вначале с помощью свойства Current берется ссылка на текущую запись, а затем эта ссылка преобразуется на тип DataRowView. Этот тип представляет собой запись таблицы в объекте DataGridView.
Далее, для обращения к полям текущей записи используются составные имена полей:
dataRow["Name"]
dataRow["Oklad"]
Замечание. Свойство Current предназначено только для чтения. Поэтому с помощью этого свойства нельзя изменить значения поля текущей записи.
12) Доступ к полям текущей записи с помощью DataGridView
При отображении таблицы на DataGridView только одна запись таблицы является доступной (текущая запись). Имеется различные способы считывания значений полей текущей записи и изменения их. Ниже для этой цели использованы следующие свойства элемента управления DataGridView:
CurrentRow – содержит указатель на текущую запись;
CurrentCell - содержит указатель на выделенную ячейку текущей записи.
Для демонстрации работы с этими полями измените форму предыдущего приложения, как это показано на рисунке 1.16.
Рис. 1.16. Отображение полей текущей записи
При выборе записи в dataGridView1 в текстовых полях textBox1 и textBox2 должны появиться фамилия служащего и его оклад, а значение выбранной ячейки должно отображаться в текстовом поле textBox3. Для реализации этой функциональности напишите обработчик события CellClick для элемента управления dataGridView1.
private void dataGridView1_CellClick(...)
{
// Выбор текущей записи
DataGridViewRow curRow = dataGridView1.CurrentRow;
textBox1.Text = curRow.Cells["Post"].Value.ToString();
textBox2.Text = curRow.Cells["Oklad"].Value.ToString();
// Выбор текущей ячейки
DataGridViewCell curCell = dataGridView1.CurrentCell;
textBox3.Text = curCell.Value.ToString();
}
В этом примере для обращения к ячейкам текущей записи используется свойство Cells, которое представляет собой коллекцию полей. Для обращения к конкретному полю следует использовать название поля или индекс поля. Например,
curRow.Cells["Oklad"].Value – обращению по названию поля
curRow.Cells[4].Value – обращению по индексу поля.
Индексы полей нумеруются начиная с нуля, в зависимости от того, как эти поля перечислены в SQL-запросе. Например, пусть определен SELECT-запрос следующего вида: