Krebrose Ответов: 1

Почему он не соединяется с базой данных mysql


Я сделал базу данных 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 WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        private MySqlConnection connection;
        private string server;
        private string database;
        private string uid;
        private string password;

        public Form1()
        {
            InitializeComponent();

            server = "localhost";
            database = "ddata_db";
            uid = "robot";
            password = "qwerty";

            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

            connection = new MySqlConnection(connectionString);
        }

        private bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch (MySqlException ex)
            {
                switch (ex.Number)
                {
                    case 0:
                        MessageBox.Show("Connection to Server failed");
                        break;
                    case 1045:
                        MessageBox.Show("Server username or password incorrect");
                        break;
                }
                return false;
            }
        }

        private bool CloseConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        private void btnRegister_Click(object sender, EventArgs e)
        {
            string Fname = txtfullname.Text;
            string Uname = txtusername.Text;
            string Email = txtemail.Text;
            string Pass = txtpassword.Text;

            if (Register(Fname, Uname, Email, Pass))
            {
                MessageBox.Show("User has been Created");
            }
            else
            {
                MessageBox.Show("User has not been Created");
            }
        }

        public bool Register(String Fname, String Uname, String Email, String Pass)
        {
            string query = "INSERT INTO users (Uid,Fullname,Username,Email,Password) VALUES ('','Fname','Uname','Email','Pass');";

            try
            {
                if (OpenConnection())
                {
                    MySqlCommand cmd = new MySqlCommand(query, connection);
                    try
                    {
                        cmd.ExecuteNonQuery();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        return false;
                    }
                }
                else
                {
                    connection.Close();
                    return false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                connection.Close();
                return false;
            }
        }
    }
}

phil.o

Откуда нам знать?

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Итак, расскажите нам, какие ошибки вы получаете, что вы сделали, чтобы получить их, что вы сделали, чтобы выяснить, что их вызывает. Что же показывает этот отладчик?

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

Sheepings

Какова ваша структура таблиц в базе данных и в чем заключается ваша проблема, о которой вы сообщаете/устраняете неполадки? Получаете ли вы какие-либо ошибки, если да, то где? И что же это такое?

1 Ответов

Рейтинг:
0

Sheepings

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

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

Скриншот: https://prnt.sc/kv84hb[^]

using MySql.Data.MySqlClient; //Make sure this using directive is applied and reference your MySQL DLL to your project.
using System;
using System.Data;
using System.Windows.Forms;

namespace TestCSharpApp
{
    public partial class Form1 : System.Windows.Forms.Form
    {   //This is my connection string, and its working. I suggest you build yours the same way
        //Or consider using string builder to build your string
        private static string cString = "server=localhost;user id=root;password=root;persistsecurityinfo=True;database=visuals_db;port=3306";
        private static MySqlConnection Con = new MySqlConnection(cString);
        ////private static string server = "localhost";
        ////private static string database = "visuals_db";
        ////private static string uid = "root";
        ////private static string password = "root";

            //You don't need all these strings. Use the one string.

        public Form1()
        {
            InitializeComponent();//Do not use this method to store junk.
            //If you want to create new strings on load, use the form load event.
        }
        private void btnRegister_Click(object sender, EventArgs e)
        {
            string Fname = "John doe";
            string Uname = "JohnDoe1";
            string Email = "me@myemail.com";
            string Pass = "mypass123";

            if (Register(Fname, Uname, Email, Pass))
            {
                MessageBox.Show("User has been Created");
            }
            else
            {
                MessageBox.Show("User has not been Created");
            }
        }

        public bool Register(String Fname, String Uname, String Email, String Pass)
        {
            string execQuery = "INSERT INTO users (name,username,email,password) VALUES (@Fname,@Uname,@Email,@Pass)";
            //Remove your unnecessary ''''''' in values and don't encapsulate ; inside the querry.
            try //Do not nest try catch blocks, except, declare more than one catch exception
            {
                if (Con != null && Con.State == ConnectionState.Closed)
                    //Check connection is not null and open it if its closed.
                {
                    Con.Open();//Open con
                    using (MySqlCommand cmd = new MySqlCommand(execQuery, Con))
                    {//Use using blocks for disposable code
                        cmd.Parameters.AddWithValue("@Fname", Fname);
                        cmd.Parameters.AddWithValue("@Uname", Uname);
                        cmd.Parameters.AddWithValue("@Email", Email);
                        cmd.Parameters.AddWithValue("@Pass", Pass);
                        //Use parameterized command queries.
                        cmd.ExecuteNonQuery();
                        //Use add with value since add is depreciated
                    }
                    Con.Close();
                    //Remember to manually close the connection since we removed the unnecessary functions
                    return true;
                }
                return true;
            }
            catch (NullReferenceException nullRefEx)
            {
                MessageBox.Show(nullRefEx.Message);
                Con.Close(); //Check your connection state before attempting to open/close.
                return false;
            }
            catch (MySqlException sqlErr)
            { // handle your second error here
                return false;
            }
            catch (Exception ex)
            {//Then catch all errors you might miss?
                return false;
            }
            finally
            {//https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-finally
                //Finish your statements if any cleaning up needed etc...
            }
        }
    }
}