C# + MySQL запросы на выборку
Будет немного больно длинно, так что безотлагательно приступим:
В какчестве примера возьмём мою говноподелку из разряда "tools_2", которые я набрасываю, чтобы было удобнее заполнять базу и на ней разберем выборку с несколькими значениями (ну, типа SELECT * FROM porn;) и с одним (ну, типа SELECT video FROM porn WHERE id=1; ).
На этот раз я не буду рассказывать как привычным движением чесать жопу создавать проект и добавлять формочки так что перейдём сразу к говнокоду. В Program.cs я объявляю несколько глобальных переменных, которые мне понадобятся:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace tools_2_addmain
{
internal static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form2());//с какой формы хочу, с такой и начинаю
}
static public string username;//эта мне нужна для авторизации
static public string password;//впрочем как и эта (надеюсь Ирина Анатольевна не увидит это, иначе она разочаруется, что я не делаю две больших разницы промеж аутентификацией и авторизацией)
static public string uid;//а эта мне понадобится для передачи значения из одного блока "private" в другой, да технически это можно сделать внутри той же формы, но сделал как сделал короче, отъебитесь
}
}
Не менее привычным движением забираю форму авторизации из другого проекта (да, я добавил кое-какие обработчики, но чтобы ишак из Роснано не растерялся, я всё подробно расписал):
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace tools_2_addmain
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)//нам нужна реакция только на Esc
{
Application.Exit();//закрываем программу
}
if (e.KeyCode == Keys.Enter)//нам нужна реакция только на Enter
{
try
{
Program.username = textBox1.Text;//забираем значение из первого текстбокса
Program.password = textBox2.Text;//и из второго
string connect = "Server=92.126.251.58;database=tankdb;port=3306;Uid=" + Program.username + ";pwd=" + Program.password;//параметры подключения
MySqlConnection pconn = new MySqlConnection(connect);//создаем подключение
MySqlCommand command = new MySqlCommand("", pconn);//не забываем про параметры
pconn.Open();//открываем соединение
pconn.Close();//не забываем закрыть соединение
Form1 form1 = new Form1();
form1.Show();//объявляем и переходим ко второй форме
this.Hide();//а эту с глаз долой прячем
}
catch
{
MessageBox.Show("not OK");//что-то пошло не так
}
}
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)//нам нужна реакция только на Esc
{
Application.Exit();//закрываем программу
}
if (e.KeyCode == Keys.Enter)//нам нужна реакция только на Enter
{
try
{
Program.username = textBox1.Text;//забираем значение из первого текстбокса
Program.password = textBox2.Text;//и из второго
string connect = "Server=92.126.251.58;database=tankdb;port=3306;Uid=" + Program.username + ";pwd=" + Program.password;//параметры подключения
MySqlConnection pconn = new MySqlConnection(connect);//создаем подключение
MySqlCommand command = new MySqlCommand("", pconn);//не забываем про параметры
pconn.Open();//открываем соединение
pconn.Close();//не забываем закрыть соединение
Form1 form1 = new Form1();
form1.Show();//объявляем и переходим ко второй форме
this.Hide();//а эту с глаз долой прячем
}
catch
{
MessageBox.Show("not OK");//что-то пошло не так
}
}
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();//закрываем программу
}
private void textBox1_Click(object sender, System.EventArgs e)
{
textBox1.SelectAll();//при клике выделяем всё содержимое текстбокса, я свои пальцы не на помойке нашел, чтобы каждый раз выделять вручную
}
private void textBox1_Enter(object sender, System.EventArgs e)
{
textBox1.SelectAll();//при входе выделяем всё содержимое текстбокса
}
private void textBox2_Enter(object sender, System.EventArgs e)
{
textBox2.SelectAll();//при входе выделяем всё содержимое текстбокса
}
private void textBox2_Click(object sender, System.EventArgs e)
{
textBox2.SelectAll();//при клике выделяем всё содержимое текстбокса
}
}
}
Ну и в качестве примера привожу то, как можно делать и выводить запросы на 1 и несколько значений (по одному полю, если полей несколько, вам, вероятно нужно выводить инфу в dataGridView, а про такое я уже писал):
using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace tools_2_addmain
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
static string connect = "Server=92.126.251.58;database=tankdb;port=3306;Uid=" + Program.username + ";pwd=" + Program.password;//параметры подключения
MySqlConnection pconn = new MySqlConnection(connect);//создаем подключение
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();//закрываем программу при закрытии формы
}
private void comboBox1_Click(object sender, EventArgs e)//при клике на comboBox
{
try
{
DataTable login = new DataTable();//нам понадобится табличка, создаем
string sqlsel = "SELECT login FROM logpasst;";//вот такой запрос номер 1
pconn.Open();//открываем подключение
MySqlCommand choose = new MySqlCommand(sqlsel, pconn);//создаем комманду
MySqlDataAdapter adapter = new MySqlDataAdapter(choose);//для нескольких значений нам понадобится адаптер
adapter.Fill(login);//через который мы наполняем табличку
comboBox1.DataSource = login;//указываем источник данных для нашего comboBox'а
comboBox1.DisplayMember = "login";//это нужно для отображения содержимого
pconn.Close();//не забываем закрыть соединение
}
catch
{
MessageBox.Show("Проверьте подключение");//если что-то пошло не так, пёстелеком, допустим, чудит
}
}
private void button1_Click(object sender, EventArgs e)//жамкаем по кнопке
{
string login = comboBox1.Text;//объявляем и читаем что мы там выбрали/ввели
string idsel = "SELECT idlogpasst FROM logpasst WHERE login=@login;";//это уже запрос на одно конкретное значение
pconn.Open();//открываем соединение
MySqlCommand chooseid = new MySqlCommand(idsel, pconn);//создаем команду
chooseid.Parameters.AddWithValue("@login", login);//передаем значение
MySqlDataReader uid = chooseid.ExecuteReader();//в этом случаем нам достаточно ридера, создаем
uid.Read();//читаем
Program.uid = uid.GetString(0);//и присваиваем значение переменной
pconn.Close();//закрываем соединение
MessageBox.Show(Program.uid);//смотрим что мы там забрали из базы
}
}
}
Да, технически id'шник, было бы можно передавать как int параметром GetValue, но я уже объявил переменную uid в Program.cs как string, так что пусть будет так.
Осталось только проверить результат:
Привычным движением запускаем лечение герпеса нашу залипуху:

Проверяем, загружаются ли данные в comboBox:

Выберем какую-нибудь запись и посмотрим какой у неё id, жамкнув по кнопке:

Вы, конечно же, спросите: "Александр, а почему для челочисленного значения (id) ты используешь string, а не int?
А я вам отвечу: "Эту срань я буду в дальнейшем использовать в sql-запросах, вот зачем мне она нужна в Program.cs и в качестве переменной string — чтобы не ебаться с преобразованием типа переменных".