0

我正在尝试使用 WPF 和 C# 通过两个文本框将两个值插入 mysql 数据库。我成功连接到数据库,但是当我尝试插入数据时出现错误:列“user_name”不能为空。真正令人困惑的是我在第一个和第二个文本框中输入数据。似乎没有传递要插入文本框中的数据。我的问题是你知道问题出在哪里以及如何解决吗?

PS:我的数据库非常简单,包含 id 为 int16 自动递增,名称为 varchar100 和 user_password 为 varchar100

这是我的代码:

    private void button1_Click(object sender, EventArgs e)
    {
        MySqlConnection con = new MySqlConnection("host=tara.rdb.superhosting.bg;user=sozopouk;password=27051996;database=sozopouk_test2;");
        MySqlDataAdapter da = new MySqlDataAdapter();
        da.InsertCommand = new MySqlCommand("Insert into niki2 values (@id,@name, @user_password)", con);

        da.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar).Value = textBox1.Text;

        da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value=textBox2.Text;

        con.Open();
        da.InsertCommand.ExecuteNonQuery();
        con.Close();
    }

伙计们,在我做了一些更改后,我收到了以下错误消息:

“字段列表”中的未知列“名称”

这是编辑后的代码:

private void button1_Click(object sender, EventArgs e)
        {
            MySqlConnection con = new MySqlConnection("host=tara.rdb.superhosting.bg;user=sozopouk;password=27051996;database=sozopouk_test2;");
            MySqlDataAdapter da = new MySqlDataAdapter();
            da.InsertCommand = new MySqlCommand("INSERT INTO niki (name, user_password) VALUES (@name, @user_password)", con);

            da.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar).Value = textBox1.Text;

            da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value=textBox2.Text;

            con.Open();
            da.InsertCommand.ExecuteNonQuery();
            con.Close();
        }

当我用 user_name 替换 name 并尝试插入数据时出现错误**“user_name”列不能为空**

受影响的线路是:

da.InsertCommand.ExecuteNonQuery();

你知道如何解决它吗?

4

4 回答 4

3

看看你的代码:

da.InsertCommand.Parameters.Add("@user_id", MySqlDbType.Int16).Value = "";
da.InsertCommand.Parameters.Add("@user_name", MySqlDbType.VarChar).Value = "";
da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value = 
   textBox2.Text;

现在看看你说的:

似乎没有传递要插入文本框中的数据。

再看一下代码。查看用于user_name(实际上是user_id)的值。使用文本框值如何?textBox1当您的代码从未提及数据时,您如何期望数据来自数据库?

此外,正如 sblom 在评论中提到的那样,我鼓励您使用明确的列名 - 此时您不需要为 指定任何内容user_id,我认为无论如何它是一个自动生成的标识列。(因此,尝试在其中插入一个空值是没有意义的。)目前尚不清楚为什么您要尝试将空字符串用作Int16列的值,或者......

编辑:对于您编辑的代码:

da.InsertCommand = new MySqlCommand(
   "INSERT INTO niki (name, user_password) VALUES (@name, @user_password)", con);

鉴于您的第一个错误,该列是user_name,而不是name...

于 2012-05-18T05:55:01.433 回答
1

你能检查一下你想使用什么表吗?

在你的实际问题中

 da.InsertCommand = new MySqlCommand("Insert into **niki2** values (@id,@name, @user_password)", con);

在更新的问题中,表名更改为

da.InsertCommand = new MySqlCommand("INSERT INTO **niki** (name, user_password) VALUES (@name, @user_password)", con);

我觉得你有两张桌子正在玩并且很困惑

似乎 nameniki2并且 可能user_nameniki您的实际表中。

我敢肯定,没有人能回答这么模棱两可的问题

尝试

对于表尼基

        da.InsertCommand = new MySqlCommand("INSERT INTO niki (user_name, user_password) VALUES (@user_name, @user_password)", con);

对于表 niki2

        da.InsertCommand = new MySqlCommand("INSERT INTO niki2 (name, user_password) VALUES (@name, @user_password)", con);

或逆转

运气

于 2012-05-18T09:49:31.693 回答
0

您没有在insert语句中指定值应该存储在哪些字段中,因此这些值将按照您指定的顺序在前三个字段中结束,无论它们的名称如何。我猜用户名字段是第四个,所以它没有得到值,因此为空。

指定应使用哪些字段:

da.InsertCommand = new MySqlCommand("INSERT INTO niki (user_id, user_name, user_password) VALUES (@user_id,@user_name, @user_password)", con);
于 2012-05-18T06:26:42.117 回答
0

最后我找到了导致我这个异常的问题。如您所见,我的旧代码:

da.InsertCommand = new MySqlCommand("INSERT INTO niki (name, user_password) VALUES (@name, @user_password)", con);

da.InsertCommand.Parameters.Add("@name", MySqlDbType.VarChar).Value = textBox1.Text;

da.InsertCommand.Parameters.Add("@user_password", MySqlDbType.VarChar).Value=textBox2.Text;

在这里输入代码

我所做的是更换

@ 和 ?

基本上我的代码看起来像:

da.InsertCommand = new MySqlCommand("INSERT INTO niki (name, user_password) VALUES (?name, ?user_password)", con);

da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar).Value = textBox1.Text;

da.InsertCommand.Parameters.Add("?user_password", MySqlDbType.VarChar).Value=textBox2.Text;

enter code here

感谢所有参与讨论的人!

于 2012-05-20T06:41:18.303 回答