我试图使用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();
你知道如何解决它吗?
答案 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
感谢所有参与讨论的人!