2012-05-18 36 views
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更换名称,并尝试将数据插入我得到一个错误**列“USER_NAME”不能为空**

受影响的线路是:

da.InsertCommand.ExecuteNonQuery(); 

你有什么想法如何解决它?

+0

我知道你并没有特别询问这个问题,但我建议养成在INSERT语句中总是包含显式列名的习惯。在我最早的一些数据库代码中,它总共是p.i.t.a.当数据库模式更改为添加列时,必须返回并修复它们。 – sblom

+0

是否检查@user_name是否作为数据库中的notnull字段提供? –

回答

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 

感谢所有参与讨论的人!

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; 

现在看看你所说的话:

It seems that the data to inserted in the textboxes is not passed.

看代码的一次。查看用于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 ...

+0

请检查我更新的问题。 –

+0

@RadostNikolay:那么这个专栏叫'user_name',而不是'name' ... –

+0

@John Skeet你是对的,但现在我得到了我编辑的文章中发布的另一个错误 –

0

您没有在insert声明中字段中的值规定应存放,所以价值观将在前​​三场结束按照您指定的顺序,不管名称如何。我猜用户名字段是第四个,所以它没有得到一个值,因此为空。

指定哪些字段应该使用:

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

请检查我更新的问题。 –

+0

@RadostNikolay:您必须使用表中字段的实际名称。显然'name'不是你想要使用的字段的正确名称。第一个错误消息告诉我们表中存在'user_name',这也许就是你想要使用的。 (虽然参数的名称不必与字段名称相对应,但使用'@ name'很好。) – Guffa

+0

@Gufa我认为问题在其他地方是因为我的表结构: #,列类型,\t整理属性,NULL,默认,备用 ** 1 ID INT(16)否\t无AUTO_INCREMENT 2名VARCHAR(255)utf8_general_ci否\t \t无\t \t 3 USER_PASSWORD \t VARCHAR(255)cp1251_general_ci \t是NULL ** –

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

我觉得你有你玩两个表,并感到困惑

好像是 nameniki2user_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); 

或转回

运气

+0

我刚试过。它再次让我发生同样的错误。 **列user_name不能为空!** 我在想的可能是 *** da.InsertCommand.Parameters.Add(“@ user_name”,MySqlDbType.VarChar).Value = textBox1.Text ; *** 你有什么其他方式,我怎么可以从文本框插入数据到MySQL –

相关问题