@Chipu

C#, Ошибка System.NullReferenceException при работе с базой данных MySql. Как исправить?

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 MySql.Data.MySqlClient;


namespace bd_test_program
{


    public partial class Form3 : Form
    {
        public static string constr = "server =31.31.196.8; user id=tytid; password =tytpass; persistsecurityinfo = True; port =3306; database =u0558875_default; SslMode = none";
        public MySqlConnection conn = new MySqlConnection(constr);

        public Form3()
        {
            conn.Open();
            InitializeComponent();
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar!=' ')
                return;
            else
                e.Handled = true;
        }

        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != ' ')
                return;
            else
                e.Handled = true;
        }

        private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != ' ')
                return;
            else
                e.Handled = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Length<4 || textBox2.Text.Length<5 || textBox3.Text.Length < 2)
            {
                MessageBox.Show("Некорректные данные для регистрации.");
            }
            else
            {
                try
                {
                    string sql = "Select Login from Accounts WHERE Login = '" + textBox1.Text + "'";
                    MySqlCommand command = new MySqlCommand(sql, conn);
                    string name = command.ExecuteScalar().ToString();
                    MessageBox.Show("Аккаунт уже зарегистрирован");
                }
                catch (Exception Ex)
                {
                     string reg = "INSERT INTO Accounts (ID, Login, Password, Name, Post) VALUES(NULL, '" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + "Неопределен')";                 
                    MySqlCommand registration = new MySqlCommand(reg, conn);
                    registration.ExecuteNonQuery();

                }

            }

        }
    }
}

Ошибка возникает при обработке ошибки catch (Expection Ex)
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 2
mindtester
@mindtester Куратор тега C#
https://youtu.be/UtO6HIp1908?list=RDUtO6HIp1908
1 -
NullReferenceException
и так сообщает суть ошибки

2 - уберите вот все это
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar!=' ')
                return;
            else
                e.Handled = true;
        }

        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != ' ')
                return;
            else
                e.Handled = true;
        }

        private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != ' ')
                return;
            else
                e.Handled = true;
        }
кто вас надоумил вмешиваться в обработку этих событий? я не к тому что нельзя, просто надо хорошо понимать зачем? *

3 - try/catch у вас опять мешанина мыслей. именно catch должен обрабатывать ситуацию ошибок. но использовать try/catch для разделения логики - просто безумие.

попробуйте сначала сделать что то гораздо более простое, типа подключения с известным аккаунтом. далее усложняйте не спеша

upd * - если вы так пробелы фильтруете, гуглите валидацию, понадежнее будет
Ответ написан
@kttotto
все, что .NET
Одного слова NullReferenceException мало для предположений. Вам наверняка вместе с этим и стектрей дает и строку в которой ошибка и возможно даже при вызове какого метода на каком поле. Это сообщение говорит о том, что что-то не проинициализированно и Вы на нем хотите либо свойство прочитать, либо метод вызвать.

Судя по коду могу предположить, что Select Login from Accounts WHERE ... не может дать Вам скалярное значение. Нужно либо запрос другой писать, либо вызывать другой метод на command.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы