列“”不能为空,密码不能解密

时间:2018-10-12 12:01:12

标签: c# mysql datagridview

我是C#的初学者。我有2 DataBases。一个用于用户注册,另一个用于支持部分注册。

我正在尝试将usernamepasswordemail从一个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 :(得分:0)

Column 'address' cannot be null

这意味着您

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

为空

因此,根据要求,如果用户可以将null用作地址,则必须更改数据库架构

这里是How do I modify a MySQL column to allow NULL?

否则,您必须在代码中放入空检查。

答案 1 :(得分:0)

如果server.user_account中有一个address列:

在插入查询中,您必须提供一个地址:

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中的address列设置为接受空值。

如果server.user_account中没有地址列,则意味着您的address变量为NULL,并且需要在将其发送到字符串之前确保它不为null。

对于密码解密: 如果您使用md5或shaX之类的哈希方法对其进行加密,则无法对其进行解密。 这就是为什么它是如此安全的原因。要验证用户输入,您必须对其进行加密,并将其与存储在数据库中的加密值进行比较。 (很抱歉,我对加密和安全性了解不多。

希望它对您有帮助!