Public string ExecSQL(string query)




{

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:



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: