用户名不能包含空值

时间:2012-05-18 05:51:01

标签: c# mysql

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

PS:我的数据库非常简单,包含id为int16 auto increment,名称为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”不能为null **

受影响的行是:

da.InsertCommand.ExecuteNonQuery();

你知道如何解决它吗?

4 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分: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);

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

好像是 name位于niki2 user_name niki可能是您实际的表格。

我相信没有人能够回答这种含糊不清的问题

尝试

对于表niki

        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);

OR Reversal

答案 2 :(得分:0)

您尚未在insert语句中指定值应存储在哪些字段中,因此值将以您指定的顺序排在前三个字段中,而不管其名称如何。我猜用户名字段是第四个,因此它没有得到值,因此为空。

指定应使用哪些字段:

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

答案 3 :(得分: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;

在这里输入代码

我所做的是替换

  

@ with?

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

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

感谢所有参与讨论的人!