Столбец "" не может быть пустым и пароль расшифровывается - PullRequest
0 голосов
/ 12 октября 2018

Я C# новичок.У меня 2 DataBases.Один для регистрации пользователя, другой для регистрации раздела поддержки.

Я пытаюсь переместить username, password, email из одного DataGridView в другой;а затем INSERT это в базу данных.
Я также пытаюсь передать такое же расшифрование пароля в другую базу данных (таким образом, пользователю необходимо будет зарегистрироваться один раз и получить доступ к разделу поддержки с той же исходной зарегистрированной информацией).

Но я получаю сообщение об ошибке:

Адрес столбца не может быть пустым

, и я не могу придумать код для match the decryption для password столбца.

private void button3_Click(object sender, EventArgs e)
{
    for (int i = 0; i < dataGridView2.Rows.Count; i++)
    {
        try
        {
            string constring = "datasource=server.server.com;port=0000;username=root;password=root;SSL Mode=None";
            string query = "insert into server.user_account (username, passwd) values (@username,@passwd) ON DUPLICATE KEY UPDATE username = username,passwd=passwd;insert into server.user_email (address) values (@address) ON DUPLICATE KEY UPDATE address = address";
            MySqlConnection conDataBase = new MySqlConnection(constring);
            MySqlCommand cmdDataBase = new MySqlCommand(query, conDataBase);
            MySqlDataReader myReader;

            cmdDataBase.Parameters.AddWithValue("@username", dataGridView2.Rows[i].Cells[0].Value);
            cmdDataBase.Parameters.AddWithValue("@passwd", dataGridView2.Rows[i].Cells[1].Value);
            cmdDataBase.Parameters.AddWithValue("@address", dataGridView2.Rows[i].Cells[2].Value);

            //cmdDataBase.Parameters.Clear();

            conDataBase.Open();
            myReader = cmdDataBase.ExecuteReader();

            while (myReader.Read())
            {

            }
            conDataBase.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

Я пытался изменить @address на ?address ... но все равно получаю ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

ЕСЛИ у вас есть столбец address в server.user_account:

В запросе на вставку вы должны ввести адрес:

string query = "insert into server.user_account (username, passwd, address) values (@username,@passwd,@address) ON DUPLICATE KEY UPDATE username = username,passwd=passwd;insert into server.user_email (address) values (@address) ON DUPLICATE KEY UPDATE address = address";

Или в вашем инструменте управления БД установите адресстолбец в server.user_account для принятия нулевых значений.

Если у вас нет адресного столбца в server.user_account, то это означает, что ваша переменная address имеет значение NULL, и вам нужно убедиться, что этоне равен null перед отправкой в ​​строку.

Для расшифровки пароля: если вы зашифровали его с помощью методов хеширования, таких как md5 или shaX, вы не сможете расшифровать его.Вот почему это так безопасно.Чтобы проверить ввод пользователя, вы должны зашифровать его и сравнить с зашифрованным значением, хранящимся в вашей базе данных.(Извините, я не очень разбираюсь в шифровании и безопасности.

Надеюсь, это поможет вам!

0 голосов
/ 12 октября 2018
Column 'address' cannot be null

Это означает, что ваш

dataGridView2.Rows[i].Cells[2].Value

равен нулю

, поэтому по требованию, если пользователи могут указать в качестве адреса значение NULL, вы должны изменить схему базы данных

Вот Как мне изменить столбец MySQL, чтобы разрешить NULL?

В противном случае вы должны поставить нулевую проверку в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...