table_name附近的语法错误

时间:2014-05-18 18:26:39

标签: c# sql

所以我有这个代码将文本框中的值插入到我的数据库中,但每次执行我的代码并输入我的数据时,我都会收到此消息

  

“关键字用户附近的语法错误”

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

2 个答案:

答案 0 :(得分:2)

USER是T-SQL中的reserved keyword。您应该使用方括号(如[USER])。但是,最好的解决方案是将名称更改为非保留字。

但更重要的是,请使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

顺便说一句,我不明白为什么你使用ExecuteReader来执行INSERT命令。看起来您只需要使用ExecuteNonQuery

  

对于UPDATE,INSERT和DELETE语句,返回值为   受命令影响的行数。

还可以使用using statement处理您的SqlConnectionSqlCommand

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,但建议使用参数。