{
Try
{
using (SqlConnection conn = new SqlConnection(ConsStr))
{
conn.Open();
using (SqlCommand c = new SqlCommand(query))
{
c.Connection = conn;
c.ExecuteNonQuery();
}
}
return “Execution completed sucsessful”;
}
Catch (Exception exp)
{
return “Excecution error: ”+exp.Message;
}
}
Следовательно, для любого действия нам необходимо будет просто сформировать строку запроса и вызвать метод.
Создать таблицы в БД вы можете двумя способами. Первый способ – в редакторе Server Explorer. Открываем там свою БД и ищем папку Tables. Нажимаем правой кнопкой мыши и выбираем Add New Table. У вас откроется окно-редактор столбцов. ColumnName – имя столбца, DataType – тип данных столбца. Заполняем эти данные. У столбца id с типом int вам необходимо будет поставить автоинкремент. Для этого переходим к окну свойств столбца(в нижней части экрана) и ищем свойство Identity Specification. Ставим Is Identity – Yes. Остальные свойства в категории Identity по 1. Для сохранения таблицы нажмите или кнопку сохранить все или кнопку закрытия вкладки редактирования столбцов и в предложенном окне введите имя таблицы. После того, как вы сформировали все таблицы, вы можете перейти к работе с ними.
Второй вариант создания таблиц, а заодно и заполнение их тестовыми данными – использование SQL-запросов в программном коде. Размещаем на форме кнопку, в ней создаем объект нашего управляющего класса, в конструкторе передав ему имя файла, затем вызываем его метод ExecSQL с запросом на создание таблицы и заполнение ее тестовыми данными. Пример для справочника Sotrudniki:
UpravClass u=new UpravClass(@”D:\MyDB.mdf”);
string query = “CREATE TABLE Sotrudniki (id INT Identity PRIMARY KEY,fio varchar(50));";
u.ExecSQL(query);
for(int i=0;i<10;i++)
{
query ="Insert into sotrudniki(fio)values('Sotrudnik'”+i.toString()+”)";
u.ExecSQL(query);
}
Для очистки таблицы Sotrudniki напишите следующий код:
UpravClass u=new UpravClass(@”D:\MyDB.mdf”);
|
string query = “truncate TABLE Sotrudniki";
u.ExecSQL(query);
Для удаления таблицы Sotrudniki из БД напишите:
UpravClass u=new UpravClass(@”D:\MyDB.mdf”);
string query = “drop TABLE Sotrudniki";
u.ExecSQL(query);
Обратите внимание, то если вы удалите таблицу из БД, вам ее придется заново создавать, если захотите с ней еще поработать.
Для работы с данными таблиц (просмотр, вставка, удаление и редактирование) мы будем использовать визуальные компоненты работы с БД: DataGridView, DataSet,tableAdapter.
Внимание! Прежде чем переходить к проектированию визуальных компонент, убедитесь, что все таблицы БД у вас созданы! Когда будете помещать их на форму обязательно ставьте модификатор public.
Пусть в нашей БД уже созданы две таблицы Sotrudniki(сотрудники) и Kontr(контрагенты). Разместим на форме два компонента DatagridView и сделаем так, что в одной отобразятся данные первой таблицы, а во второй – другой. Переходим к первой DataGridView и нажимаем на треугольник в белом квадрате в правом верхнем углу компонента. Выбираем Choose Data Sourсe. Далее, если список доступных data source пуст(а для первой он должен быть пуст), выбираем Add Project Data Sourse -> DataBase->DataSourse. Если в списке подключений есть подключение к БД, то выбираем его, если нет, то выбираем New Connection и создаем подключение, как было описано ранее. Два раза выбираем Next, затем в списке доступных элементов подключения ставим галочку напротив Tables. Далее у DatagridView в choose Datasource выбираем Other data source -> project datasource и добираемся до первой таблички, во втором datagrid view добираемся тем же путем до второй. После этого у вас должны появиться пять значимых для нас компонента на форме: mydbdataset, kontrBindingSource, sotrudnikiBindingSource,kontrTableAdapter и sotrudnikiTableAdapter. У datagridview снимите галочки Enabled Additing, Deleting и Editing. Удаление, добавление и редактирование будем делать по-другому.
|
Сначала посмотрим удаление. Это самое простое. Пусть у нас будет кнопка, которая будет удалять текущий элемент из справочника Sotrudniki. В ней необходимо прописать следующий код:
sotrudnikiBindingSource.RemoveCurrent();
sotrudnikiBindingSource.EndEdit();
sotrudnikiTableAdapter.Update(this.myDBDataSet.Sotrudniki);
Теперь рассмотрим добавление и редактирование. Для начала подготовительный этап: добавим в проект новую форму и разместим на ней текстовое поле под fio нашего сотрудника и две кнопки. В форме настроим следующие свойства: FormBorderStyle – FixedDialog, ControlBox – false; AcceptButton – первая кнопка, CanselButton – вторая кнопка. У кнопок настроим следующее: у первой кнопки dialogResult – OK, у второй это же свойство в Cancel. У textbox свойство databindings-text ставим в значение поля нашей таблицы. У появившегося элемента sotrudnikiBindingSource ставим Modifier в значение public. Теперь переходим к событиям и в событии FormClosing прописываем следующий код:
if (DialogResult == System.Windows.Forms.DialogResult.OK)
sotrudnikiBindingSource.EndEdit();
Else
sotrudnikiBindingSource.CancelEdit();
Теперь в основной форме в кнопке «добавление нового» пишем код:
Form2 f = new Form2();
sotrudnikiBindingSource.AddNew();
f.sotrudnikiBindingSource.DataSource = sotrudnikiBindingSource;
f.sotrudnikiBindingSource.Position = sotrudnikiBindingSource.Position;
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
sotrudnikiTableAdapter.Update(this.myDBDataSet.Sotrudniki);
В кнопке «редактирование текущего» пишем код:
Form2 f = new Form2();
f.sotrudnikiBindingSource.DataSource = sotrudnikiBindingSource;
f.sotrudnikiBindingSource.Position = sotrudnikiBindingSource.Position;
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
sotrudnikiTableAdapter.Update(this.myDBDataSet.Sotrudniki);
Рассмотрим теперь редактирование связанных элементов. Создадим еще одну табличку БД – договоры(Dogovor). Допустим, что вам при создании нового элемента этого справочника нужно выбирать наименование контрагента и наименование сотрудника. Тоже самое при редактировании: эти поля должны выбираться, а не вводиться. Сразу стоит уточнить, что в итоге вам нужно хранить не ФИО и наименование, а идентификаторы этих записей, соответственно, выбираться должно ФИО, а в базу писаться id. Первое, что вам необходимо сделать – создать в dataset новое представление данных, в которое выгрузить идентификатор и наименование для каждого из связываемых справочников. Начнем с контрагентов. Переходим в окне SolutionExplorer к MyDBDataSet.xsd, правой кнопкой – View Designer. Копируем и вставляем табличку по контрагентам. Нажимаем правой кнопкой на Kontr1TableAdapter, теперь переходим в свойства и выставляем в none InsertCommand и uUpdateCommand. Свойство SelectCommand меняем следующим образом. Во-первых разворачиваем его и заходим в Command, в окне с SQL запросом пишем следующую команду:
|
SELECT id, CONVERT(varchar, id) + ' ' + Name AS NAME
FROM Kontr
Аналогичное делаем для сотрудников. Теперь на форме для создания или редактирования информации о договоре помещаем два combobox. Опишем на примере контрагентов, что делать дальше. Во-первых, в свойстве Datasource выбираем Kontr1bindingsource, в свойстве DisplaMember выбираем Name, а в свойстве ValueMember берем id. В событии combobox1_selectedIndexChanged пишем следующий код:
if (comboBox1.SelectedValue!= null)
{
MyDBDataSet.DogovorRow r = (MyDBDataSet.DogovorRow)((DataRowView)dogovorBindingSource.Current).Row;
r.idkontr = comboBox1.SelectedValue.ToString();
}
Чтоб изменение вступили в силу, как обычно сохраняем:
dogovorBindingSource.EndEdit();
dogovorTableAdapter.Update(myDBDataSet.Kontr);
Теперь рассмотрим решение следующей задачи: пусть при выборе определенного элемента справочника сотрудников нам показываются только те договора, которые он заключил. На форме должно быть размещено два datagridview – одно для сотрудников, другое для договоров. Для datagridview сотрудников(пусть оно будет datagridview1) пишем обработчик события CellClick: