• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Вопросы по Listbox, Msql и конект

  • Автор темы Автор темы Niceday
  • Дата начала Дата начала
N

Niceday

собственно вот текст программы:

Код:
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;

class MainForm : Form
{
public MainForm()
{
Text = "Products";
list = new ListBox();
list.Location = new Point(15, 15);
list.Size = new Size(200, 200);
this.Controls.Add(list);
using (SqlConnection connection = new SqlConnection("server=сервер;Type System Version=SQL Server 2005;User ID=юзер;database=база"))
{
connection.Open();
if (String.Format("{0}", connection.State) == "Open")
{
MessageBox.Show(String.Format("Connection Status: {0} \nServer: {1} \nServer Version: {2} \nBase Name: {3}", connection.State, connection.DataSource, connection.ServerVersion, connection.Database));
SqlCommand command = new SqlCommand("SELECT [ProductName] FROM [Products]", connection);
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
list.Items.Add(String.Format("{0}", reader[0]));
}

}
}
}

public static void Main(string[] args)
{
Application.Run(new MainForm());
}

private ListBox list;
}

А теперь вопросы:
1) В случае с if (String.Format("{0}", connection.State) == "Open") все работает нормально, а вот если ввести плохое имя базы даже скомпилить нельзя до конца, как этого избежатьи заменить в случае с кривым адресом просто на месаг бокс типо "can't connect"

2) Как обрабатывать сообщения от лист бокса, понимаю что это что-то типо сообщения от кнопки в с++, но в мсдн ничего разумного найти не смог

3) Как обратиться к определенному элементу таблицы MSQL
while (reader.Read())
{
list.Items.Add(String.Format("{0}", reader[0]));
}
добавляет их все в листбокс, а вот по клику в лист боксе мне нужно будет вывести MessageBox'ом все остальные поля для данного элемента таблицы.

Если кто чем поможет, зарание спасибо
 
Хороший тон в программировании - ложить строку Connection в файл конфигураций
 
1a. Допечатка же срабатывает: connection.State == ConnectionState.Open.
1b. Имя базы действительна надо вынести в конфиг, почитайте в любой книге про использование System.Configuration.
1c. Почитайте в тож же книге про обработку исключений. Сразу станет понятно как показать MessageBox при ошибке соединения.

2. Поставить обработчик на событие ListBox.SelectedIndexChanged Event. Но лучше воспользуйтесь средствами студии.

3. Почитайте про работу с DataSet и Master/Details страницами.
 
В случае с if (String.Format("{0}", connection.State) == "Open") все работает нормально, а вот если ввести плохое имя базы даже скомпилить нельзя до конца, как этого избежатьи заменить в случае с кривым адресом просто на месаг бокс типо "can't connect"

Можно сделать, например, так

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;

namespace Niceday
{
public partial class Form1 : Form
{
private ListBox list;

public Form1()
{
InitializeComponent();

Text = "Products";
list = new ListBox();
list.Location = new Point(15, 15);
list.Size = new Size(200, 200);
this.Controls.Add(list);

SqlConnection connection = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=NorthWind;Type System Version=SQL Server 2005;");
try
{
connection.Open();

if (connection.State == ConnectionState.Open)
{
MessageBox.Show(String.Format("Connection Status: {0} \nServer: {1} \nServer Version: {2} \nBase Name: {3}", connection.State, connection.DataSource, connection.ServerVersion, connection.Database));
SqlCommand command = new SqlCommand("SELECT ProductName FROM Products", connection);
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
list.Items.Add(String.Format("{0}", reader["ProductName"]));
}
}
}
catch (SqlException)
{
if (connection.State != ConnectionState.Open)
{
MessageBox.Show("Failed to open a connection");
}
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
connection.Dispose();
}

}
}

}
 
Для: Niceday
Ты положил код выборки данных в конструктор формы( MainForm). Но конструктор формы предназначен для инициализации полей обьекта. Положи код выборки данных в метод
Код:
private void Form1_Load(object sender, EventArgs e)
{
...
}
 
Пришел я к одному выводу, книжка нужна, т.к. вопросы возникают и возникают, простые по шарпу не катят т.к. они тока про консольные приложения и формы рассказывают что и так понятно, а кто может подсказать где скачать хорошую кнужку по программированию на c# для msql где сама тема рассматривается от начала и до конца с примерами кода?
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab