Помогите поставить новую пару логина и пароля в проекте C#
[Ссылки могут видеть только зарегистрированные пользователи. ]
Код:
Form3.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace hcube
{
public partial class Form3 : Form
{
public int User_id;
public Form3()
{
InitializeComponent();
textBox3.Visible = false; // поля для смены пароля невидимы
textBox4.Visible = false;
label3.Visible = false;
Size = new Size(267, 132); // уменьшаем размер формы
StartPosition = FormStartPosition.CenterScreen;
}
private void button2_Click(object sender, EventArgs e) // кнопка "Отмена"
{
Environment.Exit(0);
}
private void checkBox1_CheckedChanged(object sender, EventArgs e) // чекбокс смены пароля
{
textBox3.Visible = checkBox1.Checked; // переключаем видимость полей смены пароля
textBox4.Visible = checkBox1.Checked;
label3.Visible = checkBox1.Checked;
if(checkBox1.Checked) // устанавливаем соответствующий размер
Size = new Size(267, 187);
else
Size = new Size(267, 132);
}
private void button1_Click(object sender, EventArgs e) // кнопка входа
{
if (string.IsNullOrWhiteSpace(textBox1.Text)) // поле для ввода логина пусто
textBox1.BackColor = Color.Beige; // красим его
else
{
if (string.IsNullOrWhiteSpace(textBox2.Text)) // поле для ввода пароля пусто
textBox2.BackColor = Color.Beige; // красим его
else
{
if (string.IsNullOrWhiteSpace(textBox3.Text) && checkBox1.Checked) // поле нового пароля пусто и выбрана смена
textBox3.BackColor = Color.Beige; // красим его
else
{
if (checkBox1.Checked && (string.IsNullOrWhiteSpace(textBox4.Text) || // выбрана смена пароля
textBox3.Text != textBox4.Text)) // поле повторного ввода нового пароля пусто
textBox4.BackColor = Color.Beige; // или не равно первому полю ввода пароля
else
{
OleDbConnection objConnection; // объект соединения с БД
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
try
{
// запрашиваем идентификатор пользователя
objCommand.CommandText = "SELECT User_id FROM Users WHERE Login=? AND Password=?";
objCommand.Parameters.Add(new OleDbParameter("",textBox1.Text));
objCommand.Parameters.Add(new OleDbParameter("",textBox2.Text));
OleDbDataReader objDataReader; // читатель базы
objConnection.Open(); // открываем соединение с БД
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем запрос
if (objDataReader.Read())
{
User_id = (int)objDataReader["User_id"];
objDataReader.Close();
if (checkBox1.Checked == true)
{
objCommand.CommandText = "UPDATE Users SET [Password]=? WHERE User_id=?"; // изменяем пароль
objCommand.Parameters.Clear();
objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
objCommand.Parameters.Add(new OleDbParameter("", User_id.ToString()));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось поменять пароль на новый: " + ex.ToString());
Environment.Exit(1);
}
}
objConnection.Close(); // закрываем соединение с БД
Close();
}
else
{
MessageBox.Show("Ошибочная пара логин/пароль, введен логин [" + textBox1.Text + "]");
objConnection.Close(); // закрываем соединение с БД
}
}
catch (Exception ex)
{ // обработчик возможных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
}
}
}
private void textBox1_TextChanged(object sender, EventArgs e) // восстанавливаем цвет полей при смещении каретки
{
textBox1.BackColor = Color.White;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox1.BackColor = Color.White;
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
textBox3.BackColor = Color.White;
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
textBox4.BackColor = Color.White;
}
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace hcube
{
public partial class Form2 : Form
{
private OleDbConnection objConnection; // объект соединения с БД
private BindingList<User> users = new BindingList<User>(); // список пользователей
private BindingList<Group> groups = new BindingList<Group>(); // список групп полномочий
private List<int> perm_ids = new List<int>(); // список выбранных групп полномочий
private List<Street> streets = new List<Street>(); // список улиц
private List<Agent> agents = new List<Agent>(); // список платежных агентов
private List<Category> categories = new List<Category>(); // список видоа влатежей
private int sel_user; // индекс выбранного пользователя
private int sel_user_id; // идентификатор выбранного пользователя
private int sel_group; // индекс выбранной группы
private int sel_group_id; // идентификатор выбранной группы
public Form2()
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
users.RaiseListChangedEvents = true;
}
private void Form2_Load(object sender, EventArgs e)
{
objConnection = new OleDbConnection(Program.connectionString); // создаем объект OleDbConnection для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
try
{
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT User_id,Login,[Position],Name FROM Users"; // запрашиваем информацию о пользователях
objConnection.Open(); // открываем соединение с БД
OleDbDataReader objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
users.Add(new User((int)objDataReader["User_id"], (string)objDataReader["Login"],
(string)objDataReader["Position"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
objCommand.CommandText = "SELECT Group_id,Name FROM Groups";// запрашиваем группы доступа
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
groups.Add(new Group((int)objDataReader["Group_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
objCommand.CommandText = "SELECT Street_id,Name FROM Street ORDER BY Name"; // запрашиваем названия улиц
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
streets.Add(new Street((int)objDataReader["Street_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
objCommand.CommandText = "SELECT Payment_id,Name FROM Payment"; // запрашиваем платежных агентов
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
agents.Add(new Agent((int)objDataReader["Payment_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
objCommand.CommandText = "SELECT Category_id,Name FROM Category"; // запрашиваем виды платежей
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
categories.Add(new Category((int)objDataReader["Category_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
objConnection.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
checkedListBox1.DataSource = groups; // список возможных групп
checkedListBox1.DisplayMember = "name";
checkedListBox1.ValueMember = "id";
checkedListBox1.SelectedIndex = 0;
listBox1.DataSource = users; // список пользователей
listBox1.DisplayMember = "name";
listBox1.ValueMember = "id";
listBox1.SelectedIndex = 0;
checkedListBox2.DataSource = streets; // список возможных улиц
checkedListBox2.DisplayMember = "name";
checkedListBox2.ValueMember = "id";
checkedListBox2.SelectedIndex = 0;
checkedListBox3.DataSource = categories; // список возможных видов платежа
checkedListBox3.DisplayMember = "name";
checkedListBox3.ValueMember = "id";
checkedListBox3.SelectedIndex = 0;
checkedListBox4.DataSource = agents; // список возможных платежных агентов
checkedListBox4.DisplayMember = "name";
checkedListBox4.ValueMember = "id";
checkedListBox4.SelectedIndex = 0;
listBox2.DataSource = groups; // список групп
listBox2.DisplayMember = "name";
listBox2.ValueMember = "id";
listBox2.SelectedIndex = 0;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) // изменился выбранный индекс списка пользователей
{
if (listBox1.SelectedIndex != -1) // элемент выбран
{
sel_user = listBox1.SelectedIndex; // фиксируем индекс и идентификатор пользователя
sel_user_id = users[sel_user].id;
if (sel_user_id != 1) // для пользователей
{ // копируем данные в поля ввода
textBox1.Text = users[sel_user].position;
textBox2.Text = users[sel_user].name;
textBox3.Text = users[sel_user].login;
}
else
{
textBox1.Text = ""; // для администратора оставляем поля пустыми
textBox2.Text = "";
textBox3.Text = "";
}
textBox4.Text = ""; // поля смены пароля всегда пустые
textBox5.Text = "";
button1.Enabled = sel_user_id != 1; // администратора нельзя удалить или редактировать
button2.Enabled = sel_user_id != 1;
checkedListBox1.Enabled = sel_user_id != 1;
objConnection = new OleDbConnection(Program.connectionString); // создаем объект OleDbConnection для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
try
{
// запрашиваем разрешенные группы для пользователя
objCommand.CommandText = "SELECT Group_id FROM User_Groups WHERE User_id=?";
objConnection.Open(); // открываем соединение с БД
objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
OleDbDataReader objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
perm_ids.Clear();
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
perm_ids.Add((int)objDataReader["Group_id"]);
}
objDataReader.Close(); // закрываем читатель
objConnection.Close();
// проставляем отметки на группы, к которым принадлежит пользователь
for (int i = 0; i < checkedListBox1.Items.Count; i++)
checkedListBox1.SetItemChecked(i, perm_ids.Contains(((Group)checkedListBox1.Items[i]).id));
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке возможных групп
{
objConnection = new OleDbConnection(Program.connectionString); // создаем объект OleDbConnection для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
if (e.NewValue == CheckState.Checked) // если отметка проставлена,
{ // добавляем связку пользователь-группа в базу данных
try
{
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "SELECT Count(*) FROM User_Groups WHERE User_id=? AND Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", groups[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist == 0)
{ // команда вставки связки пользователь-группа
objCommand.CommandText = "INSERT INTO User_Groups (User_id,Group_id) VALUES(?,?)";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
else // если отметка снята,
{ // удаляем из базы связку пользователь-группа
try
{
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "SELECT Count(*) FROM User_Groups WHERE User_id=? AND Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", groups[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist != 0)
{ // команда удаления связки пользователь-группа
objCommand.CommandText = "DELETE FROM User_Groups WHERE User_id=? AND Group_id=?";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
objConnection.Close(); // закрываем соединение с БД
}
private void button2_Click(object sender, EventArgs e) // кнопка "Удалить"
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
try
{
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "DELETE FROM Users WHERE User_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
users.RemoveAt(sel_user);
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось удалить пользователя: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
private void button1_Click(object sender, EventArgs e) // кнопка "Сохранить"
{
if (string.IsNullOrWhiteSpace(textBox1.Text)) // должнось не заполнена
textBox1.BackColor = Color.Beige; // красим поле
else
{
if (string.IsNullOrWhiteSpace(textBox2.Text)) // Ф.И.О.не заполнено
textBox2.BackColor = Color.Beige; // красим поле
else
{
objConnection = new OleDbConnection(Program.connectionString); // создаем объект для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
int exist = 0;
try
{ // проверяем, нет ли другого пользователя с новым логином
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "SELECT Count(*) FROM Users WHERE User_id<>? AND Login=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
exist = (int)objCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // закрываем соединение с БД
if (exist != 0 || string.IsNullOrWhiteSpace(textBox3.Text)) // если другой пользователь с таким логином есть
textBox3.BackColor = Color.Beige; // или логин не введен
else // красим поле
{
if (string.IsNullOrWhiteSpace(textBox4.Text)) // если пароль не введен
textBox4.BackColor = Color.Beige; // красим поле
else
{
if (string.IsNullOrWhiteSpace(textBox5.Text) || // если пароь не введен повторно или
textBox4.Text != textBox5.Text) // не соврадает с первым вводом
textBox5.BackColor = Color.Beige; // красим поле
else
{ // сохраняем отредактированные данные
objConnection = new OleDbConnection(Program.connectionString);
objCommand = objConnection.CreateCommand(); // создаем объект команды
try
{
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "UPDATE Users SET Login=?,[Password]=?,[Position]=?,Name=? "+
"WHERE User_id=?";
objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
objCommand.Parameters.Add(new OleDbParameter("", textBox4.Text));
objCommand.Parameters.Add(new OleDbParameter("", textBox1.Text));
objCommand.Parameters.Add(new OleDbParameter("", textBox2.Text));
objCommand.Parameters.Add(new OleDbParameter("", sel_user_id.ToString()));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
users[sel_user].login = textBox3.Text;
users[sel_user].position = textBox1.Text;
users[sel_user].name = textBox2.Text;
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось изменить пользователя: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
}
}
}
}
private void button5_Click(object sender, EventArgs e) // кнопка "Добавить"
{
if (string.IsNullOrWhiteSpace(textBox1.Text)) // должнось не заполнена
textBox1.BackColor = Color.Beige; // красим поле
else
{
if (string.IsNullOrWhiteSpace(textBox2.Text)) // Ф.И.О.не заполнено
textBox2.BackColor = Color.Beige; // красим поле
else
{ // проверяем, нет ли пользователя с таким логином
objConnection = new OleDbConnection(Program.connectionString); // создаем объект для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
int exist = 0;
try
{
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "SELECT Count(*) FROM Users WHERE Login=?";
objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
exist = (int)objCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // закрываем соединение с БД
// пользователь с таким логином есть или логин не введен
if (exist != 0 || string.IsNullOrWhiteSpace(textBox3.Text))
textBox3.BackColor = Color.Beige; // красим поле
else
{
if (string.IsNullOrWhiteSpace(textBox4.Text)) // если пароль не введен
textBox4.BackColor = Color.Beige; // красим поле
else
{
if (string.IsNullOrWhiteSpace(textBox5.Text) || // если пароль не введен повторно или
textBox4.Text != textBox5.Text) // повторный ввод не совпадает с первым
textBox5.BackColor = Color.Beige; // красим поле
else
{ // добавляем нового пользователя
objConnection = new OleDbConnection(Program.connectionString);
objCommand = objConnection.CreateCommand(); // создаем объект команды
try
{
objConnection.Open(); // открываем соединение с БД
objCommand.CommandText = "INSERT INTO Users (Login,[Password],[Position],Name) VALUES(?,?,?,?)";
objCommand.Parameters.Add(new OleDbParameter("", textBox3.Text));
objCommand.Parameters.Add(new OleDbParameter("", textBox4.Text));
objCommand.Parameters.Add(new OleDbParameter("", textBox1.Text));
objCommand.Parameters.Add(new OleDbParameter("", textBox2.Text));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
objCommand.CommandText = "SELECT @@Identity"; // запрашиваем id добавленной записи
int id = (int)objCommand.ExecuteScalar();
// добавляем пользователя в список
users.Add(new User(id, textBox3.Text, textBox1.Text, textBox2.Text));
trans.Commit();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось добавить пользователя: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
}
}
}
}
// восстанавливаем цвет полей при начале ввода
private void textBox1_TextChanged(object sender, EventArgs e) // должнось
{
textBox1.BackColor = Color.White;
}
private void textBox2_TextChanged(object sender, EventArgs e) // Ф.И.О.
{
textBox2.BackColor = Color.White;
}
private void textBox3_TextChanged(object sender, EventArgs e) // логин
{
textBox3.BackColor = Color.White;
}
private void textBox4_TextChanged(object sender, EventArgs e) // пароль
{
textBox4.BackColor = Color.White;
}
private void textBox5_TextChanged(object sender, EventArgs e) // повторный ввод пароля
{
textBox5.BackColor = Color.White;
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e) // изменился выбранный индекс списка групп
{ // (аналогично измению выбранного индекса списка пользователей)
if (listBox2.SelectedIndex != -1)
{
sel_group = listBox2.SelectedIndex;
sel_group_id = groups[sel_group].id;
textBox6.Text = groups[sel_group].name;
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
try
{
objConnection.Open();
// запрашиваем разрешенные улицы
objCommand.CommandText = "SELECT Street_id FROM Permit_Street WHERE Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
OleDbDataReader objDataReader = objCommand.ExecuteReader();
perm_ids.Clear();
while (objDataReader.Read() == true)
{
perm_ids.Add((int)objDataReader["Street_id"]);
}
objDataReader.Close();
for (int i = 0; i < checkedListBox2.Items.Count; i++) // проставляем отметки в списке возможных улиц
checkedListBox2.SetItemChecked(i, perm_ids.Contains(((Street)checkedListBox2.Items[i]).id));
// запрашиваем разрешенные виды платежа
objCommand.CommandText = "SELECT Category_id FROM Permit_Category WHERE Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objDataReader = objCommand.ExecuteReader();
perm_ids.Clear();
while (objDataReader.Read() == true)
{
perm_ids.Add((int)objDataReader["Category_id"]);
}
objDataReader.Close();
for (int i = 0; i < checkedListBox3.Items.Count; i++) // проставляем отметки в списке возможных видов платежа
checkedListBox3.SetItemChecked(i, perm_ids.Contains(((Category)checkedListBox3.Items[i]).id));
// запрашиваем разрешенных платежных агентов
objCommand.CommandText = "SELECT Payment_id FROM Permit_Payment WHERE Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objDataReader = objCommand.ExecuteReader();
perm_ids.Clear();
while (objDataReader.Read() == true)
{
perm_ids.Add((int)objDataReader["Payment_id"]);
}
objDataReader.Close();
// проставляем отметки в списке возможных платежных агентов
for (int i = 0; i < checkedListBox4.Items.Count; i++)
checkedListBox4.SetItemChecked(i, perm_ids.Contains(((Agent)checkedListBox4.Items[i]).id));
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
private void button3_Click(object sender, EventArgs e) // Кнопка "Удалить" (группу)
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
try
{
objConnection.Open(); // команда удаления группы
objCommand.CommandText = "DELETE FROM Groups WHERE Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
groups.RemoveAt(sel_group);
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось удалить группу: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
private void button4_Click(object sender, EventArgs e) // Кнопка "Сохранить" (группу)
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
int exist = 0;
try
{
objConnection.Open(); // проверяем нет ли другой группы с таким именем
objCommand.CommandText = "SELECT Count(*) FROM Groups WHERE Group_id<>? AND Name=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
exist = (int)objCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // есть другая группа со введенным именем
if (exist != 0 || string.IsNullOrWhiteSpace(textBox6.Text)) // или имя не заполнено
textBox6.BackColor = Color.Beige; // красим поле
else
{ // сохраняем отредактированное название группы
objConnection = new OleDbConnection(Program.connectionString);
objCommand = objConnection.CreateCommand();
try
{
objConnection.Open();
objCommand.CommandText = "UPDATE Groups SET Name=? WHERE Group_id=?";
objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
groups[sel_group].name = textBox6.Text;
textBox6.Text = "";
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось изменить группу: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
private void button6_Click(object sender, EventArgs e) // Кнопка "Добавить" (группу)
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
int exist = 0;
try
{
objConnection.Open(); // проверяем нет ли группы с таким именем
objCommand.CommandText = "SELECT Count(*) FROM Groups WHERE Group_id<>? AND Name=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
exist = (int)objCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close(); // есть группа со введенным именем
if (exist != 0 || string.IsNullOrWhiteSpace(textBox6.Text)) // или имя не заполнено
textBox6.BackColor = Color.Beige; // красим поле
else
{
try
{
objCommand.CommandText = "INSERT INTO Groups (Name) VALUES(?)"; // команда добавления группы
objConnection.Open();
objCommand.Parameters.Add(new OleDbParameter("", textBox6.Text));
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
objCommand.CommandText = "SELECT @@Identity"; // запрашиваем id добавленной записи
int id = (int)objCommand.ExecuteScalar();
groups.Add(new Group(id, textBox6.Text)); // добавляем группу в список
trans.Commit();
textBox6.Text = "";
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось добавить новую группу: " + ex.ToString());
Environment.Exit(1);
}
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
}
private void textBox6_TextChanged(object sender, EventArgs e) // восстанавливаем цвет поля ввода
{
textBox6.BackColor = Color.White;
}
private void checkedListBox2_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке улиц
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
if (e.NewValue == CheckState.Checked) // отметка проставлена
{
try
{
objConnection.Open(); // проверяем, была ли такая связка
objCommand.CommandText = "SELECT Count(*) FROM Permit_Street WHERE Group_id=? AND Street_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", streets[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist == 0) // связки не было
{ // команда вставки связки группа-улица
objCommand.CommandText = "INSERT INTO Permit_Street (Group_id,Street_id) VALUES(?,?)";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
else // отметка снята
{
try
{
objConnection.Open(); // проверяем, была ли такая связка
objCommand.CommandText = "SELECT Count(*) FROM Permit_Street WHERE Group_id=? AND Street_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", streets[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist != 0) // связка была
{ // команда удаления связки группа-улица
objCommand.CommandText = "DELETE FROM Permit_Street WHERE Group_id=? AND Street_id=?";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
objConnection.Close();
}
private void checkedListBox3_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке видов платежей
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
if (e.NewValue == CheckState.Checked) // отметка проставлена
{
try
{
objConnection.Open(); // проверяем, была ли такая связка
objCommand.CommandText = "SELECT Count(*) FROM Permit_Category WHERE Group_id=? AND Category_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", categories[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist == 0) // связки не было
{ // команда вставки связки группа-вид платежа
objCommand.CommandText = "INSERT INTO Permit_Category (Group_id,Category_id) VALUES(?,?)";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
else // отметка снята
{
try
{
objConnection.Open(); // проверяем, была ли такая связка
objCommand.CommandText = "SELECT Count(*) FROM Permit_Category WHERE Group_id=? AND Category_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", categories[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist != 0) // связка была
{ // команда удаления связки группа-вид платежа
objCommand.CommandText = "DELETE FROM Permit_Category WHERE Group_id=? AND Category_id=?";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
objConnection.Close();
}
private void checkedListBox4_ItemCheck(object sender, ItemCheckEventArgs e) // изменена отметка в списке платежных агентов
{
objConnection = new OleDbConnection(Program.connectionString);
OleDbCommand objCommand = objConnection.CreateCommand();
if (e.NewValue == CheckState.Checked) // отметка проставлена
{
try
{
objConnection.Open(); // проверяем, была ли такая связка
objCommand.CommandText = "SELECT Count(*) FROM Permit_Payment WHERE Group_id=? AND Payment_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", agents[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist == 0) // связки не было
{ // команда вставки связки группа-платежный агент
objCommand.CommandText = "INSERT INTO Permit_Payment (Group_id,Payment_id) VALUES(?,?)";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось добавить новую связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
else // отметка снята
{
try
{
objConnection.Open(); // проверяем, была ли такая связка
objCommand.CommandText = "SELECT Count(*) FROM Permit_Payment WHERE Group_id=? AND Payment_id=?";
objCommand.Parameters.Add(new OleDbParameter("", sel_group_id.ToString()));
objCommand.Parameters.Add(new OleDbParameter("", agents[e.Index].id.ToString()));
int exist = (int)objCommand.ExecuteScalar();
if (exist != 0) // связка была
{ // команда удаления связки группа-платежный агент
objCommand.CommandText = "DELETE FROM Permit_Payment WHERE Group_id=? AND Payment_id=?";
OleDbTransaction trans = objConnection.BeginTransaction();
objCommand.Transaction = trans;
try
{
objCommand.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
MessageBox.Show("Не удалось удалить связку: " + ex.ToString());
Environment.Exit(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
}
objConnection.Close();
}
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace hcube
{
public partial class Form1 : Form
{
private int User_id;
private OleDbConnection objConnection; // объект соединения с БД
private List<Street> streets = new List<Street>(); // список улиц
private List<House> allhouses = new List<House>(); // список домов на всех улицах
private List<House> houses = new List<House>(); // список домов нв выбранной улице
private List<Appartment> allappartments = new List<Appartment>(); // список квартир всех домов на всех улицах
private List<Appartment> appartments = new List<Appartment>(); // список квартир выбранного дома
private List<Year> years = new List<Year>(); // список лет, за которые имеется отчетность
private List<Quorter> quorters = new List<Quorter>(); // список вкарталов
private List<Quorter> quorterEmp = new List<Quorter>(); // список кварталов, когда год не выбран
private List<Month> allmonths = new List<Month>(); // список всех месяцев
private List<Month> months = new List<Month>(); // список месяцев выбранного квартала
private List<Month> monthEmp = new List<Month>(); // список месяцев, когда квартал не выбран
private List<Agent> agents = new List<Agent>(); // список платежных агентов
private List<Category> categories = new List<Category>(); // список видоа влатежей
private List<int> axeX = new List<int>(); // список идентификаторов выбранных граф по горизонтали
private List<int> axeY = new List<int>(); // список идентификаторов выбранных граф по вертикали
private List<DtCell> dtCell = new List<DtCell>(); // список ячеек выбранной таблицы
private Object oldradio = null; // погасшая радиокнопка выбора измерений
private List<int> street_ids=new List<int>(); // список идентификаторов доступных улиц
private List<int> category_ids = new List<int>(); // список идентификаторов доступных видов платежа
private List<int> agent_ids = new List<int>(); // список идентификаторов доступных агентов
public Form1(int id)
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
User_id = id;
}
private void Form1_Load(object sender, EventArgs e)
{
objConnection = new OleDbConnection(Program.connectionString); // создаем объект OleDbConnection для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand(); // создаем объект команды
OleDbDataReader objDataReader; // читатель базы
try
{
objConnection.Open(); // открываем соединение с БД
// запрашиваем должность и Ф.И.О.пользователя
objCommand.CommandText = "SELECT [Position],Name FROM Users WHERE User_id=?";
objCommand.Parameters.Add(new OleDbParameter("", User_id.ToString()));
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
objDataReader.Read();
textBox2.Text=(string)objDataReader["Position"]+": "+(string)objDataReader["Name"];
objDataReader.Close();
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Street.Street_id,Street.Name FROM Street,Permit_Street,Users,User_Groups " +
"WHERE Users.User_id=? AND User_Groups.User_id=Users.User_id " +
"AND User_Groups.Group_id=Permit_Street.Group_id AND Street.Street_id=Permit_Street.Street_id " +
"ORDER BY Street.Name"; // запрашиваем названия разрешенных улиц
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
streets.Add(new Street(objDataReader.GetInt32(0), objDataReader.GetString(1)));
street_ids.Add(objDataReader.GetInt32(0));
}
objDataReader.Close();
if (street_ids.Count == 0)
{
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Street_id,Name FROM Street ORDER BY Street.Name"; // запрашиваем названия улиц
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
streets.Add(new Street(objDataReader.GetInt32(0), objDataReader.GetString(1)));
}
objDataReader.Close();
}
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT House_id,Street_id,Num FROM House ORDER BY Val(Num)"; // запрашиваем номера домов
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
allhouses.Add(new House((int)objDataReader["House_id"], (int)objDataReader["Street_id"],
(string)objDataReader["Num"]));
}
objDataReader.Close(); // закрываем читатель
// запрашиваем номера квартир
objCommand.CommandText = "SELECT Appartment_id,House_id,Num FROM Appartment ORDER BY Val(Num)";
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
allappartments.Add(new Appartment((int)objDataReader["Appartment_id"],
(int)objDataReader["House_id"], (string)objDataReader["Num"]));
}
objDataReader.Close(); // закрываем читатель
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Year_id,Name FROM tYear"; // запрашиваем имеющиеся отчетные годы
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
years.Add(new Year((int)objDataReader["Year_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Month_id,Name FROM tMonth"; // запрашиваем список месяцев
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
allmonths.Add(new Month((int)objDataReader["Month_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
objCommand.CommandText = "SELECT Quorter_id,Name FROM tQuorter"; // запрашиваем список кварталов
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
quorters.Add(new Quorter((int)objDataReader["Quorter_id"], (string)objDataReader["Name"]));
}
objDataReader.Close(); // закрываем читатель
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Payment.Payment_id,Payment.Name FROM Payment,Permit_Payment,Users,User_Groups "+
"WHERE Users.User_id=? AND User_Groups.User_id=Users.User_id " + // запрашиваем разрешенных платежных агентов
"AND User_Groups.Group_id=Permit_Payment.Group_id AND Payment.Payment_id=Permit_Payment.Payment_id";
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
agents.Add(new Agent(objDataReader.GetInt32(0), objDataReader.GetString(1)));
agent_ids.Add(objDataReader.GetInt32(0));
}
objDataReader.Close(); // закрываем читатель
if (agent_ids.Count == 0)
{
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Payment_id,Name FROM Payment";
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
agents.Add(new Agent(objDataReader.GetInt32(0), objDataReader.GetString(1)));
}
objDataReader.Close(); // закрываем читатель
}
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Category.Category_id,Category.Name FROM Category,Permit_Category,Users,User_Groups "+
"WHERE Users.User_id=? AND User_Groups.User_id=Users.User_id " + // запрашиваем разрешенные виды платежей
"AND User_Groups.Group_id=Permit_Category.Group_id AND Category.Category_id=Permit_Category.Category_id";
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
categories.Add(new Category(objDataReader.GetInt32(0), objDataReader.GetString(1)));
category_ids.Add(objDataReader.GetInt32(0));
}
objDataReader.Close(); // закрываем читатель
if (category_ids.Count == 0)
{
// задаем SQL-запрос к БД
objCommand.CommandText = "SELECT Category_id,Name FROM Category";
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
categories.Add(new Category(objDataReader.GetInt32(0), objDataReader.GetString(1)));
}
objDataReader.Close(); // закрываем читатель
}
objConnection.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возможных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;
years.Insert(0, new Year(0, "Не задан")); // инициализируем список отчетных лет
comboBox2.DataSource = years;
comboBox2.DisplayMember = "name";
comboBox2.ValueMember = "id";
comboBox2.SelectedIndex = 0;
comboBox3.DropDownStyle = ComboBoxStyle.DropDownList;
quorters.Insert(0, new Quorter(0, "Не задан")); // инициализируем список кварталов
quorterEmp.Add(new Quorter(0, "Не задан")); // и пустой список кварталов
comboBox3.DataSource = quorterEmp;
comboBox3.DisplayMember = "name";
comboBox3.ValueMember = "id";
comboBox3.SelectedIndex = 0;
comboBox4.DropDownStyle = ComboBoxStyle.DropDownList;
months.Add(new Month(0, "Не задан")); // инициализируем список месяцев
monthEmp.Add(new Month(0, "Не задан")); // и пустой список месяцев
comboBox4.DataSource = monthEmp;
comboBox4.DisplayMember = "name";
comboBox4.ValueMember = "id";
comboBox4.SelectedIndex = 0;
comboBox6.DropDownStyle = ComboBoxStyle.DropDownList;
streets.Insert(0, new Street(0, "Не задана")); // инициализируем список улиц
comboBox6.DataSource = streets;
comboBox6.DisplayMember = "name";
comboBox6.ValueMember = "id";
comboBox6.SelectedIndex = 0;
comboBox7.DropDownStyle = ComboBoxStyle.DropDownList;
houses.Add(new House(0, 0, "Не задан")); // инициализируем список домов
comboBox7.DataSource = houses;
comboBox7.DisplayMember = "num";
comboBox7.ValueMember = "id";
comboBox7.SelectedIndex = 0;
comboBox8.DropDownStyle = ComboBoxStyle.DropDownList;
appartments.Add(new Appartment(0, 0, "Не задан")); // инициализируем список квартир
comboBox8.DataSource = appartments;
comboBox8.DisplayMember = "num";
comboBox8.ValueMember = "id";
comboBox8.SelectedIndex = 0;
comboBox10.DropDownStyle = ComboBoxStyle.DropDownList;
agents.Insert(0, new Agent(0, "Не задан")); // инициализируем список платежных агентов
comboBox10.DataSource = agents;
comboBox10.DisplayMember = "name";
comboBox10.ValueMember = "id";
comboBox10.SelectedIndex = 0;
comboBox12.DropDownStyle = ComboBoxStyle.DropDownList;
categories.Insert(0, new Category(0, "Не задан")); // инициализируем список видов платежей
comboBox12.DataSource = categories;
comboBox12.DisplayMember = "name";
comboBox12.ValueMember = "id";
comboBox12.SelectedIndex = 0;
radioButton1.Checked = true; // первоначально выбраны по горизонтали период,
radioButton7.Checked = true; // а по вертикаль адрес
dataGridView1.AllowUserToAddRows = false; // задаем хпрактеристики таблицы для
dataGridView1.AllowUserToDeleteRows = false; // отображения результатов
dataGridView1.AllowUserToResizeRows = true;
dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
dataGridView1.ShowEditingIcon = false;
}
private void comboBox6_SelectedIndexChanged(object sender, EventArgs e)
{ // событие изменения выбора улицы
if (comboBox7.Items.Count != 0) // список домов уже инициализирован
{
comboBox7.DataSource = null; // отключаем список домов от источника данных
houses.Clear(); // очищаем список домов выбранной улицы
houses.Add(new House(0,0, "Не задан")); // заполняем список домами выбранной улицы
if (comboBox6.SelectedIndex != 0) // в том случае, если не выбрано "Не задан"
{
foreach (House hs in allhouses)
if (hs.street_id == (int)(comboBox6.SelectedValue))
houses.Add(hs);
}
comboBox7.DataSource = houses; // подключаем список к источнику данных
comboBox7.DisplayMember = "num";
comboBox7.ValueMember = "id";
comboBox7.SelectedIndex = 0;
}
}
private void comboBox7_SelectedIndexChanged(object sender, EventArgs e)
{ // событие изменения выбора дома
if (comboBox7.DataSource != null && comboBox8.Items.Count != 0)
{ // список инициализирован и событие не вызвано отключением от источника данных списка домов
comboBox8.DataSource = null; // отключаем список квартир от источника данных
appartments.Clear(); // очищаем список квартир выбранного дома
appartments.Add(new Appartment(0, 0, "Не задан")); // заполняем список квартирами выбранного дома
if (comboBox7.SelectedIndex != 0) // в том случае, если не выбрано "Не задан"
{
foreach (Appartment ap in allappartments)
if (ap.house_id == (int)(comboBox7.SelectedValue))
appartments.Add(ap);
}
comboBox8.DataSource = appartments; // подключаем список к источнику данных
comboBox8.DisplayMember = "num";
comboBox8.ValueMember = "id";
comboBox8.SelectedIndex = 0;
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{ // событие изменения выбора года
if (comboBox3.Items.Count != 0) // список кварталов уже инициализирован
{
comboBox3.DataSource = null; // отключаем список кварталов от источника данных
if (comboBox2.SelectedIndex != 0) // если год выбран
comboBox3.DataSource = quorters; // подключаем заполненный список
else
comboBox3.DataSource = quorterEmp; // если не выбран - пустой
comboBox3.DisplayMember = "name";
comboBox3.ValueMember = "id";
comboBox3.SelectedIndex = 0;
}
}
private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{ // событие изменения выбора квартала
if (comboBox3.DataSource != null && comboBox4.Items.Count != 0)
{ // список месяцев инициализирован и событие не вызвано отключением от источника данных списка кварталов
comboBox4.DataSource=null; // отключаем список месяцев от источника данных
months.Clear(); // очищаем список месяцев квартала
months.Add(new Month(0, "Не задан")); // формируем список месяцев квартала заново
if (comboBox3.SelectedIndex != 0) // если квартал выбран
{
for (int i = 0; i < 3; i++)
months.Add(allmonths[((int)comboBox3.SelectedValue-1)*3+i]);
}
comboBox4.DataSource = months; // подключаем список к источнику данных
comboBox4.DisplayMember = "name";
comboBox4.ValueMember = "id";
comboBox4.SelectedIndex = 0;
}
}
private void CheckedChanged(object sender, EventArgs e)
{ // обработчик событий от радиокнопок выбора координат по горизонтали и по вертикали
if (!((RadioButton)sender).Checked) // запоминаем кнопку,
oldradio = sender; // с которой была снята отметка
if (radioButton1.Checked && radioButton8.Checked || // запрещаем выбор одинаковых
radioButton2.Checked && radioButton7.Checked || // координат по горизонтали
radioButton3.Checked && radioButton6.Checked || // и по вертикали
radioButton4.Checked && radioButton5.Checked)
if(oldradio != null) // если есть запомненная кнопка,
((RadioButton)oldradio).Checked = true; // восстанавливаем предыдущий выбор
if (radioButton1.Checked || radioButton8.Checked) // выбран период
{
comboBox2.SelectedIndex = 0; // паркуем выбор периода
comboBox2.Enabled = false; // запрещаем списки выбора периода
comboBox3.Enabled = false;
comboBox4.Enabled = false;
radioButton9.Checked = true; // показываем радиокнопки выбора
radioButton9.Visible = true; // степени детализации по периоду
radioButton10.Visible = true;
radioButton11.Visible = true;
}
else
{ // иначе
comboBox2.Enabled = true; // разрешаем списки выбора периода
comboBox3.Enabled = true;
comboBox4.Enabled = true;
radioButton9.Visible = false; // скрываем выбор степени детализации
radioButton10.Visible = false;
radioButton11.Visible = false;
}
if (radioButton2.Checked || radioButton7.Checked) // выбран адрес
{
comboBox6.SelectedIndex = 0; // паркуем выбор адреса
comboBox6.Enabled = false; // запрещаем списки выбора адреса
comboBox7.Enabled = false;
comboBox8.Enabled = false;
radioButton12.Checked = true; // показываем радиокнопки выбора
radioButton12.Visible = true; // степни детализации по адресу
radioButton13.Visible = true;
radioButton14.Visible = radioButton7.Checked; // по горизонтали детализацию до квартиры
} // не производим
else
{
comboBox6.Enabled = true; // разщрешаем списки выбора адреса
comboBox7.Enabled = true;
comboBox8.Enabled = true;
radioButton12.Visible = false; // скрываем выбор степени детализации
radioButton13.Visible = false;
radioButton14.Visible = false;
}
if (radioButton3.Checked || radioButton6.Checked) // выбран платежный агент
{
comboBox10.SelectedIndex = 0; // паркуем выбор платежного агента
comboBox10.Enabled = false; // запрещаем список выбора иплатежного агента
}
else
comboBox10.Enabled = true; // разрешаем список выбора платежного агента
if (radioButton4.Checked || radioButton5.Checked) // выбран вид платежа
{
comboBox12.SelectedIndex = 0; // паркуем выбор вида платежа
comboBox12.Enabled = false; // запрещаем список выбора вида платежа
}
else
comboBox12.Enabled = true; // разрешгаем список выбора вида платежа
}
private void button1_Click(object sender, EventArgs e)
{ // обработка нажатия кнопки "Запрос"
objConnection = new OleDbConnection(Program.connectionString); // создаем объект OleDbConnection для соединения с БД
OleDbCommand objCommand = objConnection.CreateCommand();// создаем объект команды
try
{
// задаем SQL-запрос к БД
textBox1.Text=MakeRequest(); // формируем запрос данных
objCommand.CommandText = textBox1.Text; // выводим его в строку состояния
OleDbDataReader objDataReader; // читатель базы
objConnection.Open(); // открываем соединение с БД
objDataReader = objCommand.ExecuteReader(); // создаем читатель и выполняем SQL-запрос
axeX.Clear(); // очищаем список идентификаторов выбранных граф по горизонтали
axeY.Clear(); // очищаем список идентификаторов выбранных граф по вертикали
dtCell.Clear(); // очищаем список ячеек выбранной таблицы
while (objDataReader.Read() == true) // читаем все строки ответа БД
{
int parX = Convert.ToInt32(objDataReader[1]);
int parY = Convert.ToInt32(objDataReader[2]);
if (!axeX.Contains(parX)) // формируем список идентификаторов выбранных граф по горизонтали
axeX.Add(parX);
if (!axeY.Contains(parY)) // формируем список идентификаторов выбранных граф по вертикали
axeY.Add(parY);
dtCell.Add(new DtCell(parX,parY,(double)objDataReader[0])); // формируем список ячеек выбранной таблицы
}
objDataReader.Close();
objConnection.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
int cols = axeX.Count; // фиксируем количество строк и столбцов выборки
int rows = axeY.Count;
while (cols < dataGridView1.ColumnCount) // подгоняем количество ячеек таблицы под данные выборки
{ // ...убираем лишние столбцы
dataGridView1.Columns.RemoveAt(dataGridView1.ColumnCount - 1);
}
while (cols > dataGridView1.ColumnCount)
{ // ...добавляем недостающие столбцы
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.Width = 100;
column.SortMode = DataGridViewColumnSortMode.NotSortable;
DataGridViewCell cell = new DataGridViewTextBoxCell();
cell.Style.BackColor = Color.LightCyan;
cell.Style.SelectionBackColor = Color.Cyan;
cell.Style.SelectionForeColor = Color.Blue;
cell.Style.Format = "0.##";
column.CellTemplate = cell;
dataGridView1.Columns.Add(column);
}
while (rows < dataGridView1.RowCount)
{ // ...убираем лишние строки
dataGridView1.Rows.RemoveAt(dataGridView1.RowCount - 1);
}
while (rows > dataGridView1.RowCount)
{ // ...добавляем недостающие строки
DataGridViewRow row = new DataGridViewRow();
dataGridView1.Rows.Add(row);
}
for (int i = 0; i < cols; i++) // формируем заголовки столбцов
{
string header="";
if (radioButton1.Checked) // это период
{
int quorter, month, year; // делим идентификатор на месяц, год и квартал
month = axeX[i] % 100;
quorter = (axeX[i] / 100) % 100;
year = axeX[i] / 10000;
for (int j = 0; j < years.Count; j++) // ищем в списке год
{
if (year == years[j].id)
{
for(int k=1; k < quorters.Count; k++) // ищем в списке квартал
{
if (quorter == quorters[k].id)
{
for (int l = 0; l < allmonths.Count; l++) // ищем в списке месяц
{
if (month == allmonths[l].id)
{
header += allmonths[l].name +" ";
break;
}
}
if(month == 0) // квартал выводим, если не задан месяц
header += quorters[k].name+ " ";
break;
}
}
header += years[j].name;
break;
}
}
}
else if (radioButton2.Checked) // это адрес
{
if(radioButton12.Checked) // детализация до улицы
{
for (int j = 0; j < streets.Count; j++) // ищем улицу
{
if (axeX[i] == streets[j].id)
{
header = streets[j].name;
break;
}
}
}
else if (radioButton13.Checked) // детализация до дома
{
for (int j = 0; j < allhouses.Count; j++) // ищем дом
{
if (axeX[i] == allhouses[j].id)
{
for (int k = 0; k < streets.Count; k++) // ищем улицу
{
if (allhouses[j].street_id == streets[k].id)
{
header += streets[k].name;
break;
}
}
header += ", д."+allhouses[j].num;
break;
}
}
}
else
{ // детализация до квартиры
for (int l = 0; l < allappartments.Count; l++) // ищем квартиру
{
if (axeX[i] == allappartments[l].id)
{
for (int j = 0; j < allhouses.Count; j++) // ищем дом
{
if (allappartments[l].house_id == allhouses[j].id)
{
for (int k = 0; k < streets.Count; k++) // ищем улицу
{
if (allhouses[j].street_id == streets[k].id)
{
header += streets[k].name;
break;
}
}
header += ", д." + allhouses[j].num;
break;
}
}
header += ", кв." + allappartments[l].num;
}
}
}
}
else if (radioButton3.Checked) // это платежный агент
{
for (int j = 0; j < agents.Count; j++) // ищем платежного агента
if (axeX[i] == agents[j].id)
{
header = agents[j].name;
break;
}
}
else
{ // это вид платеджа
for (int j = 0; j < categories.Count; j++) // ищем вид платежа
if (axeX[i] == categories[j].id)
{
header = categories[j].name;
break;
}
}
dataGridView1.Columns[i].HeaderText = header; // вписываем сформированный заголовок
}
for (int i = 0; i < rows; i++) // формируем заголовки строк
{
string header = "";
if (radioButton8.Checked) // это период
{
int quorter, month, year;
month = axeY[i] % 100; // делим идентификатор на месяц, год и квартал
quorter = (axeY[i] / 100) % 100;
year = axeY[i] / 10000;
for (int j = 0; j < years.Count; j++) // ищем год
{
if (year == years[j].id)
{
for (int k = 1; k < quorters.Count; k++) // ищем квартал
{
if (quorter == quorters[k].id)
{
for (int l = 0; l < allmonths.Count; l++) // ищем месяц
{
if (month == allmonths[l].id)
{
header += allmonths[l].name + " ";
break;
}
}
if (month == 0) // квартал выводим, если не задан месяц
header += quorters[k].name + " ";
break;
}
}
header += years[j].name;
break;
}
}
}
else if (radioButton7.Checked) // это адрес
{
if (radioButton12.Checked) // детализация до улицы
{
for (int j = 0; j < streets.Count; j++) // ищем улицу
{
if (axeY[i] == streets[j].id)
{
header = streets[j].name;
break;
}
}
}
else if (radioButton13.Checked) // детализация до дома
{
for (int j = 0; j < allhouses.Count; j++) // ищем дом
{
if (axeY[i] == allhouses[j].id)
{
for (int k = 0; k < streets.Count; k++) // ищем улицу
{
if (allhouses[j].street_id == streets[k].id)
{
header += streets[k].name;
break;
}
}
header += ", д." + allhouses[j].num;
break;
}
}
}
else
{ // детализация до квартиры
for (int l = 0; l < allappartments.Count; l++) // ищем квартиру
{
if (axeY[i] == allappartments[l].id)
{
for (int j = 0; j < allhouses.Count; j++) // ищем дом
{
if (allappartments[l].house_id == allhouses[j].id)
{
for (int k = 0; k < streets.Count; k++) // ищем улицу
{
if (allhouses[j].street_id == streets[k].id)
{
header += streets[k].name;
break;
}
}
header += ", д." + allhouses[j].num;
break;
}
}
header += ", кв." + allappartments[l].num;
}
}
}
}
else if (radioButton6.Checked) // это платежный агент
{
for (int j = 0; j < agents.Count; j++) // ищем агента
if (axeY[i] == agents[j].id)
{
header = agents[j].name;
break;
}
}
else
{ // это вид платежа
for (int j = 0; j < categories.Count; j++) // ищем вид платежа
if (axeY[i] == categories[j].id)
{
header = categories[j].name;
break;
}
}
dataGridView1.Rows[i].HeaderCell.Value = header; // вписываем сформированный заголовок
}
for(int k = 0; k < dtCell.Count; k++) // заполныем тело таблицы
{
int i,j;
for(j=0; j < cols; j++) // по сформированным спискам идентификаторов
if(dtCell[k].x == axeX[j])
break;
for(i=0; i < rows; i++)
if(dtCell[k].y == axeY[i])
break;
dataGridView1.Rows[i].Cells[j].Value=dtCell[k].data;
}
}
string MakeRequest()
{ // функция формирует запрос по текущему состоянию интерфейса
string req = "SELECT sum(sum),"; // начало запроса
string reqx,reqy,grx,gry;
string wh="WHERE true ";
if (street_ids.Count != 0) // если есть ограничения по улицам
{
wh += "AND street_id IN ("; // добавляем список разрешенных улиц
for (int i = 0; i < street_ids.Count - 1; i++)
wh += street_ids[i].ToString() + ",";
wh += street_ids[street_ids.Count - 1].ToString() + ") ";
}
if (category_ids.Count != 0) // если есть огранничения по видам платежей
{
wh += "AND category_id IN ("; // добавляем список разрешенных видов платежей
for (int i = 0; i < category_ids.Count - 1; i++)
wh += category_ids[i].ToString() + ",";
wh += category_ids[category_ids.Count - 1].ToString() + ") ";
}
if (agent_ids.Count != 0) // если есть ограничения по платежнвм агентам
{
wh += "AND payment_id IN ("; // доббавляем список разрешенных платежных агентов
for (int i = 0; i < agent_ids.Count - 1; i++)
wh += agent_ids[i].ToString() + ",";
wh += agent_ids[agent_ids.Count - 1].ToString() + ") ";
}
if (radioButton1.Checked) // по горизонтали выбран период
{
if (radioButton9.Checked) // детализация до года
{
reqx = "avg(year_id*10000),";
grx = "year_id*10000,";
}
else if (radioButton10.Checked) // детализация до квартала
{
reqx = "avg(year_id*10000+quorter_id*100),";
grx = "year_id*10000+quorter_id*100,";
}
else
{ // детализация до месяца
reqx = "avg(year_id*10000+quorter_id*100+month_id),";
grx = "year_id*10000+quorter_id*100+month_id,";
}
}
else if (radioButton2.Checked) // по горизонтали выбран адрес
{
if (radioButton12.Checked) // детализация до улицы
{
reqx = "street_id,";
grx = reqx;
}
else if (radioButton13.Checked) // детализация до дома
{
reqx = "house_id,";
grx = reqx;
}
else
{ // детализация до квартиры
reqx = "appartment_id,";
grx = reqx;
}
}
else if (radioButton3.Checked) // по горизонтали выбран платежный агент
{
reqx = "payment_id,";
grx=reqx;
}
else
{ // по горизонтали выбран вид платежа
reqx="category_id,";
grx = reqx;
}
if (radioButton8.Checked) // по вертикали выбран период
{
if (radioButton9.Checked) // детализация до года
{
reqy = "avg(year_id*10000) ";
gry = "year_id*10000 ";
}
else if (radioButton10.Checked) // детализация до квартала
{
reqy = "avg(year_id*10000+quorter_id*100) ";
gry = "year_id*10000+quorter_id*100 ";
}
else
{ // детализация до месяца
reqy = "avg(year_id*10000+quorter_id*100+month_id) ";
gry = "year_id*10000+quorter_id*100+month_id ";
}
}
else if (radioButton7.Checked) // по вертикали выбран адрес
{
if (radioButton12.Checked) // детализация до улицы
{
reqy = "street_id ";
gry = reqy;
}
else if (radioButton13.Checked) // детализация до дома
{
reqy = "house_id ";
gry = reqy;
}
else
{ // детализация до квартиры
reqy = "appartment_id ";
gry = reqy;
}
}
else if (radioButton6.Checked) // по вертикали выбран платежный агент
{
reqy="payment_id ";
gry = reqy;
}
else
{ // по вертикали выбран вид платежа
reqy="category_id ";
gry = reqy;
}
// формирование условий
if (!radioButton1.Checked && !radioButton8.Checked) // по периоду
{
if (comboBox2.SelectedIndex != 0) // год
wh += string.Format("and year_id={0} ", comboBox2.SelectedValue);
if (comboBox3.SelectedIndex != 0) // квартал
wh += string.Format("and quorter_id={0} ", comboBox3.SelectedValue);
if (comboBox4.SelectedIndex != 0) // месяц
wh += string.Format("and month_id={0} ", comboBox4.SelectedValue);
}
if (!radioButton2.Checked && !radioButton7.Checked) // по адресу
{
if (comboBox8.SelectedIndex != 0) // улица
wh += string.Format("and appartment_id={0} ", comboBox8.SelectedValue);
else if (comboBox7.SelectedIndex != 0) // дом
wh += string.Format("and house_id={0} ", comboBox7.SelectedValue);
else if (comboBox6.SelectedIndex != 0) // квартира
wh += string.Format("and street_id={0} ", comboBox6.SelectedValue);
}
if (!radioButton3.Checked && !radioButton6.Checked) // по платежному агенту
{
if (comboBox10.SelectedIndex != 0) // агент
wh += string.Format("and payment_id={0} ", comboBox10.SelectedValue);
}
if (!radioButton4.Checked && !radioButton5.Checked) // по виду платежа
{
if (comboBox12.SelectedIndex != 0) // вид платежа
wh += string.Format("and category_id={0} ", comboBox12.SelectedValue);
}
// возвращаем сформированный запрос
return req+reqx+reqy+"FROM pay "+wh+"GROUP BY "+grx+gry;
}
}
}
Agent.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Agent
{ // запись платежного агента
private int _id; // код агента
private string _name; // название агента
public Agent(int id, String name)
{
_id = id;
_name = name;
}
public string name
{
get
{
return _name;
}
}
public int id
{
get
{
return _id;
}
}
}
}
Appartment.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Appartment
{ // запись квартиры
int _id; // код квартиры
int _house_id; // код дома
string _num; // номер квартиры
public Appartment(int id,int house_id,String num)
{
_id = id;
_house_id = house_id;
_num = num;
}
public string num
{
get
{
return _num;
}
}
public int id
{
get
{
return _id;
}
}
public int house_id
{
get
{
return _house_id;
}
}
}
}
Category.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Category
{ // запись вида платежа
private int _id; // код вида платежа
private string _name; // наименование вида платежа
public Category(int id, String name)
{
_id = id;
_name = name;
}
public string name
{
get
{
return _name;
}
}
public int id
{
get
{
return _id;
}
}
}
}
DtCell.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class DtCell
{ // запись ячейки выбранной таблицы
private int _x, _y; // идентификаторы координат
private double _data; // данные
public DtCell(int x, int y, double data)
{
_x = x;
_y = y;
_data = data;
}
public int x
{
get
{
return _x;
}
}
public int y
{
get
{
return _y;
}
}
public double data
{
get
{
return _data;
}
}
}
}
Group.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace hcube
{
class Group : INotifyPropertyChanged
{
private int _id; // код группы
private string _name; // название группы
public event PropertyChangedEventHandler PropertyChanged;
public Group(int id, string name)
{
_id = id;
_name = name;
}
public int id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("name");
}
}
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(info));
}
}
}
House.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class House
{ // запись дома
int _id; // код дома
int _street_id; // код улицы
string _num; // номер дома
public House(int id,int street_id,String num)
{
_id = id;
_street_id = street_id;
_num = num;
}
public string num
{
get
{
return _num;
}
}
public int id
{
get
{
return _id;
}
}
public int street_id
{
get
{
return _street_id;
}
}
}
}
Month.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Month
{ // запись месяца
private int _id; // код месяца
private string _name; // название месяца
public Month(int id, String name)
{
_id = id;
_name = name;
}
public string name
{
get
{
return _name;
}
}
public int id
{
get
{
return _id;
}
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Data.OleDb;
namespace hcube
{
static class Program
{
// строка подключения к базе данных (предполагается, что БД расположена в стартовой папке)
static public string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;" +
"data source=" + Application.StartupPath + "\\commun.mdb";
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
OleDbConnection conn;
conn = new OleDbConnection(connectionString); // создаем объект OleDbConnection для соединения с БД
try
{
conn.Open(); // открываем соединение с БД
conn.Close(); // закрываем соединение с БД
}
catch (Exception ex)
{ // обработчик возсожных ошибок при работе с БД
MessageBox.Show("Ошибка при работе с базой данных: " + ex.ToString());
Environment.Exit(1);
}
Form3 login=new Form3(); // запрашиваем аутентификацию
Application.Run(login);
if (login.User_id == 0) // аутентификация не пройдена
Environment.Exit(0);
else if(login.User_id == 1) // аутентификация пройдена и это администратор
Application.Run(new Form2()); // запускаем форму администрирования
else
Application.Run(new Form1(login.User_id)); // иначе запускаем рабочую форму
}
}
}
Quorter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Quorter
{ // запись квартала
private int _id; // код квартала
private string _name; // название квартала
public Quorter(int id, String name)
{
_id = id;
_name = name;
}
public string name
{
get
{
return _name;
}
}
public int id
{
get
{
return _id;
}
}
}
}
Street.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Street
{ // запись улицы
private int _id; // код улицы
private string _name; // название улицы
public Street(int id, String name)
{
_id = id;
_name = name;
}
public string name
{
get
{
return _name;
}
}
public int id
{
get
{
return _id;
}
}
}
}
User.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace hcube
{
class User : INotifyPropertyChanged // запись пользователя
{
private int _id; // код пользователя
private string _login; // логин
private string _position; // должность
private string _name; // Ф.И.О.
public event PropertyChangedEventHandler PropertyChanged;
public User(int id, string login, string position, string name)
{
_id = id;
_login = login;
_position = position;
_name = name;
}
public int id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string login
{
get
{
return _login;
}
set
{
_login = value;
}
}
public string position
{
get
{
return _position;
}
set
{
_position = value;
}
}
public string name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("name");
}
}
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(info));
}
}
}
Year.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace hcube
{
class Year
{ // запись года
private int _id; // код года
private string _name; // название года
public Year(int id, String name)
{
_id = id;
_name = name;
}
public string name
{
get
{
return _name;
}
}
public int id
{
get
{
return _id;
}
}
}
}