所以我有这个代码将文本框中的值插入到我的数据库中,但每次执行我的代码并输入我的数据时,我都会收到此消息
“关键字用户附近的语法错误”
string Connectionstring = @"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Bank_System.mdf;Integrated Security=True; User Instance=True";
SqlConnection cnn = new SqlConnection(Connectionstring);
cnn.Open();
SqlCommand cmd1 = new SqlCommand("insert into user values('" + int.Parse(textBox1.Text) + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + int.Parse(textBox6.Text) + "')", cnn);
SqlDataReader dr1 = cmd1.ExecuteReader();
dr1.Close();
MessageBox.Show(" Record inserted ", " information inserted");
cnn.Close();
答案 0 :(得分:2)
USER
是T-SQL中的reserved keyword。您应该使用方括号(如[USER]
)。但是,最好的解决方案是将名称更改为非保留字。
但更重要的是,请使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
顺便说一句,我不明白为什么你使用ExecuteReader
来执行INSERT
命令。看起来您只需要使用ExecuteNonQuery
。
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。
还可以使用using
statement处理您的SqlConnection
,SqlCommand
。
using(SqlConnection cnn = new SqlConnection(Connectionstring))
using(SqlCommand cmd1 = cnn.CreateCommand())
{
cmd1.CommandText = "INSERT INTO [USER] VALUE(@p1, @p2, @p3, @p4, @p5, @p6)";
cmd1.Parameters.AddWithValue("@p1", int.Parse(textBox1.Text));
cmd1.Parameters.AddWithValue("@p2", textBox2.Text);
cmd1.Parameters.AddWithValue("@p3", textBox3.Text);
cmd1.Parameters.AddWithValue("@p4", textBox4.Text);
cmd1.Parameters.AddWithValue("@p5", textBox5.Text);
cmd1.Parameters.AddWithValue("@p6", int.Parse(textBox6.Text));
cnn.Open();
int count = cmd1.ExecuteNonQuery();
if(count > 0)
MessageBox.Show("Record inserted");
}
答案 1 :(得分:0)
您尝试将int连接到字符串。错误在这里:int.Parse(textBox1.Text) - >你需要在测试后转换为字符串if是否为整数。 试试这个测试:int.Parse(textBox1.Text).ToString()看看这是不是你的问题。 您尝试使用以下方法将字符串收集到整数:
"insert into user values('" + int.Parse(textBox1.Text)
....
=> string + int
正确的是:
SqlCommand cmd1 = new SqlCommand("insert into user values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "')", cnn);
尝试在连接之前验证textBox1.Text和textBox6.Text,但建议使用参数。