Файл: Факультет автоматики и вычислительной техники кафедра вычислительной техники.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 17

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ государственное БЮДЖЕТНОЕ

образовательное учреждение

высшего образования

«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

__________________________________________________________________

ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ



Лабораторная работа №1-2

по дисциплине «Информационные системы»

Факультет: АВТФ

Группа: АВТ-018

Выполнил: Мартай-оол А.А.

Преподаватель: Дубков И.С.

Цель работы

Создать проект, в котором будет использована библиотека Ngpsql. В проекте должны быть кнопки, текстовые поля и один label. С помощью библиотеки соединить между сервером pgAdmin и проектом. Вывести таблицу.

Ход работы



Рис. 1 – Form1.

Создали 4 кнопки, 5 текстовых полей и один label:

  • 1 кнопка для инициализации соединения;

  • 2 - 3 кнопка для открытия и закрытия соединения;

  • 4 кнопка для выполнения команды, выведение таблицы.

  • текстовые поля служат для введения названия сервера, порта, названия пользователя, пароль, название базы данных;

  • label – служит для показа состояния соединения.

Код подключения библиотеки

using Npgsql;

...

private string connstring = String.Format("Server={0};Port={1};" + "Username={2};Password={3};Database={4};",

"localhost", 5432, "postgres", "postgres", "Cars");

private NpgsqlConnection conn;

public Form1()

{

InitializeComponent();

}
private void Form1_Load(object sender, EventArgs e)

{

conn = new NpgsqlConnection(connstring);

}



Код создания Form1

private void button1_Click(object sender, EventArgs e)

{

if ((textBox1.Text == "localhost") && (textBox2.Text == "5432") && (textBox3.Text == "postgres") && (textBox4.Text == "postgres") && (textBox5.Text == "Cars"))

{

MessageBox.Show("Инициализация соединения прошла успешна");

button2.Enabled = true;

textBox1.Enabled = false;

textBox2.Enabled = false;

textBox3.Enabled = false;

textBox4.Enabled = false;

textBox5.Enabled = false;

}

else MessageBox.Show("Инициализация соединения не прошла");

}

private void button2_Click(object sender, EventArgs e)

{

conn.Open();

label5.Text = "Соединения открыто";

button3.Enabled = true;

button4.Enabled = true;

button2.Enabled = false;

}

private void button3_Click(object sender, EventArgs e)

{

conn.Close();

label5.Text = "Соединения закрыто";

button2.Enabled = true;

button4.Enabled = false;

button3.Enabled = false;

}
private void button4_Click(object sender, EventArgs e)

{

Form2 form = new Form2();

form.Show();

}


При нажатий кнопки «выполнить команду», открывается другая форма. При успешном соединений выведет таблица. Иначе выведет ошибку.

Код для выведения таблицы

private void Form2_Load(object sender, EventArgs e)

{

conn = new NpgsqlConnection(connstring);

Select();

}
private void Select()

{

try

{

if (conn.State != ConnectionState.Open) conn.Open();

sql = @"SELECT * FROM car_select();";

cmd = new NpgsqlCommand(sql, conn);

dt = new DataTable();

dt.Load(cmd.ExecuteReader());

conn.Close();

dataGridView1.DataSource = null;

dataGridView1.DataSource = dt;

}

catch (Exception ex)

{

conn.Close();

MessageBox.Show("Error: "+ex.Message);

}

}



Для выведения таблицы используется созданная ранее функция в pgAdmin “car_select”. Сама функция создана так:

Create or replace Function car_select() returns table (

s_id integer,

s_name character varying,

s_year integer,

s_price integer,

s_mileage integer

)

as $$

begin

return query

select id, name, year, price, mileage from car_info order by id;

end $$

language plpgsql;



Рис. 2 Form2.

Как видим, соединение прошла успешно. Таблица выведена на dataGridView.

Приложение

Form1

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using Npgsql;
namespace LR

{

public partial class Form1 : Form

{

private string connstring = String.Format(“Server={0};Port={1};” + “Username={2};Password={3};Database={4};”,

“localhost”, 5432, “postgres”, “postgres”, “Cars”);

private NpgsqlConnection conn;
public Form1()

{

InitializeComponent();

}
private void Form1_Load(object sender, EventArgs e)

{

conn = new NpgsqlConnection(connstring);

}
private void button1_Click(object sender, EventArgs e)

{

if ((textBox1.Text == “localhost”) && (textBox2.Text == “5432”) && (textBox3.Text == “postgres”) && (textBox4.Text == “postgres”) && (textBox5.Text == “Cars”))

{

MessageBox.Show(«Инициализация соединения прошла успешна»);

button2.Enabled = true;

textBox1.Enabled = false;

textBox2.Enabled = false;

textBox3.Enabled = false;

textBox4.Enabled = false;

textBox5.Enabled = false;

}

else MessageBox.Show(«Инициализация соединения не прошла»);

}

private void button2_Click(object sender, EventArgs e)

{

conn.Open();

label5.Text = «Соединения открыто»;

button3.Enabled = true;

button4.Enabled = true;

button2.Enabled = false;

}

private void button3_Click(object sender, EventArgs e)

{

conn.Close();

label5.Text = «Соединения закрыто»;

button2.Enabled = true;

button4.Enabled = false;

button3.Enabled = false;

}
private void button4_Click(object sender, EventArgs e)

{

Form2 form = new Form2();

form.Show();

}

}

}

Form2

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;



using System.Text;

using System.Windows.Forms;

using Npgsql;
namespace LR

{

public partial class Form2 : Form

{

private string connstring = String.Format("Server={0};Port={1};" + "Username={2};Password={3};Database={4};",

"localhost", 5432, "postgres", "postgres", "Cars");

private NpgsqlConnection conn;

private string sql;

private NpgsqlCommand cmd;

private DataTable dt;

private int rowIndex = -1;

public Form2()

{

InitializeComponent();

}
private void Form2_Load(object sender, EventArgs e)

{

conn = new NpgsqlConnection(connstring);

Select();

}
private void Select()

{

try

{

if (conn.State != ConnectionState.Open) conn.Open();

sql = @"SELECT * FROM car_select();";

cmd = new NpgsqlCommand(sql, conn);

dt = new DataTable();

dt.Load(cmd.ExecuteReader());

conn.Close();

dataGridView1.DataSource = null;

dataGridView1.DataSource = dt;

}

catch (Exception ex)

{

conn.Close();

MessageBox.Show("Error: "+ex.Message);

}

}


private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{

if (e.RowIndex >= 0)

{

rowIndex = e.RowIndex;

textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells["s_name"].Value.ToString();

textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells["s_year"].Value.ToString();

textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells["s_price"].Value.ToString();

textBox4.Text = dataGridView1.Rows[e.RowIndex].Cells["s_mileage"].Value.ToString();

}

}
private void button1_Click(object sender, EventArgs e)

{

rowIndex = -1;

textBox1.Enabled = textBox2.Enabled = textBox3.Enabled = textBox4.Enabled = true;

textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = null;

textBox1.Select();

}
private void button2_Click(object sender, EventArgs e)

{

if (rowIndex < 0)

{

MessageBox.Show("Please choose student to update");

return;

}

textBox1.Enabled = textBox2.Enabled = textBox3.Enabled = textBox4.Enabled = true;

}
private void button3_Click(object sender, EventArgs e)

{

if (rowIndex < 0)

{

MessageBox.Show("Please choose student to delete");

return;

}

try

{

if (conn.State != ConnectionState.Open) conn.Open();

sql = @"Select * from car_delete(:_id)";

cmd = new NpgsqlCommand(sql, conn);

cmd.Parameters.AddWithValue("_id", int.Parse(dataGridView1.Rows[rowIndex].Cells["s_id"].Value.ToString()));

if ((int)cmd.ExecuteScalar() == 1)

{

MessageBox.Show("Delete student succeccfully");

rowIndex = -1;

Select();

}

conn.Close();

}

catch (Exception ex)

{

conn.Close();

MessageBox.Show("Delete fail. Error: "+ex.Message);

}

}
private void button5_Click(object sender, EventArgs e)

{

int result = 0;

if (rowIndex < 0)

{

try

{

if (conn.State != ConnectionState.Open) conn.Open();

sql = @"Select * from car_insert(:_name, :_year, :_price, :_mileage)";

cmd = new NpgsqlCommand(sql, conn);

cmd.Parameters.AddWithValue("_name", textBox1.Text);

cmd.Parameters.AddWithValue("_year", int.Parse(textBox2.Text));

cmd.Parameters.AddWithValue("_price", int.Parse(textBox3.Text));

cmd.Parameters.AddWithValue("_mileage", int.Parse(textBox4.Text));

result = (int)cmd.ExecuteScalar();

conn.Close();

if (result == 1)

{

MessageBox.Show("Inserted successfully");

Select();

}

else

{

MessageBox.Show("Inserted fail");

}

}

catch (Exception ex)

{

conn.Close();

MessageBox.Show("Inserted fail. Error: " + ex.Message);

}

}

else

{

try

{

if (conn.State != ConnectionState.Open) conn.Open();

sql = @"Select * from car_update(:_id, :_name, :_year, :_price, :_mileage)";

cmd = new NpgsqlCommand(sql, conn);

cmd.Parameters.AddWithValue("_id", int.Parse(dataGridView1.Rows[rowIndex].Cells["s_id"].Value.ToString()));

cmd.Parameters.AddWithValue("_name", textBox1.Text);


cmd.Parameters.AddWithValue("_year", int.Parse(textBox2.Text));

cmd.Parameters.AddWithValue("_price", int.Parse(textBox3.Text));

cmd.Parameters.AddWithValue("_mileage", int.Parse(textBox4.Text));

result = (int)cmd.ExecuteScalar();

conn.Close();

if (result == 1)

{

MessageBox.Show("Updated successfully");

Select();

}

else

{

MessageBox.Show("Updated fail");

}

}

catch (Exception ex)

{

conn.Close();

MessageBox.Show("Updated fail. Error: " + ex.Message);

}

}

result = 0;

textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = null;

textBox1.Enabled = textBox2.Enabled = textBox3.Enabled = textBox4.Enabled = false;

}

}

}

Новосибирск

2022