asp.net将数据插入DB

时间:2013-04-16 14:44:18

标签: asp.net

con.Open();
cmd2 = new SqlCommand("insert into dailyWorkout('"+RadioButton1.Text+"', '"+RadioButton2.Text+"', '"+RadioButton3.Text+"', '"+RadioButton4.Text+"', '"+RadioButton5.Text+"', '"+Label1.Text+"')", con);

cmd2.ExecuteNonQuery();

嘿伙计们,已经在这个网站上工作了一段时间,但是在将数据放入数据库时​​出现错误

  

')'附近的语法不正确。

对于其他我正在采用相同方式工作的东西,但事实并非如此。

3 个答案:

答案 0 :(得分:3)

你真的应该真正使用参数化查询来避免SQL注入(并提高性能;避免类型转换等问题。)

所以我建议使用这样的代码:

// define your *parametrized* SQL statement
string insertStmt = "INSERT INTO dbo.YourTable(Col1, Col2, Col3) VALUES(@Val1, @Val2, @Val3);";

// put SqlConnection and SqlCommand into "using" blocks to ensure proper disposal
using(SqlConnection conn = new SqlConnection("-your-connection-string-here-"))
using(SqlCommand cmd = new SqlCommand(insertStmt, conn))
{
     // set the parameters to the values you need 
     cmd.Parameters.AddWithValue("@Val1", "Some String here");
     cmd.Parameters.AddWithValue("@Val2", 42);
     cmd.Parameters.AddWithValue("@Val3", DateTime.Today.AddDays(-7));

     // open connection, execute query, close connection right away
     conn.Open();
     int rowsAffected = cmd.ExecuteNonQuery();
     conn.Close();
}     

要记住的要点:

  • 始终 使用参数化查询 - 不要将SQL语句连接在一起!
  • SqlConnectionSqlCommand放入using(...) { ... }块以确保妥善处置
  • 始终明确定义要在SELECTINSERT声明中使用的列的列表
  • 尽可能晚地打开连接,执行查询,马上再次关闭连接

答案 1 :(得分:0)

那将完成这项工作,但我强烈建议使用参数。

con.Open();
cmd2 = new SqlCommand("insert into dailyWorkout values ('"+RadioButton1.Text+"', '"+RadioButton2.Text+"', '"+RadioButton3.Text+"', '"+RadioButton4.Text+"', '"+RadioButton5.Text+"', '"+Label1.Text+"')", con);

cmd2.ExecuteNonQuery();

而不是上面的代码,你最好使用

cmd2 = new SqlCommand("insert into dailyWorkout values (@val1, @val2, @val3,@val4,@val5,@val6)", con);
cmd2.Parameters.AddWithValue("@val1",RadioButton1.Text);
cmd2.Parameters.AddWithValue("@val2",RadioButton2.Text);
cmd2.Parameters.AddWithValue("@val3",RadioButton3.Text);
cmd2.Parameters.AddWithValue("@val4",RadioButton4.Text);
cmd2.Parameters.AddWithValue("@val5",RadioButton5.Text);
cmd2.Parameters.AddWithValue("@val6",Label1.Text)
  cmd2.ExecuteNonQuery();

答案 2 :(得分:0)

好的已经提到了,不要注入这样的参数。 但如果必须,问题是你的最终sql字符串如下:

insert into dailyWorkout('string1', 'string2', 'string3', 'string4', 'string5', 'string6')

什么时候应该

insert into dailyWorkout(columnName1,columnName2,columnName3,columnName4,columnName5,columnName6)
values('string1', 'string2', 'string3', 'string4', 'string5', 'string6')

但你应该考虑:

        var sqlCmd = new SqlCommand("insert into dailyWorkout(columnName1,columnName2,columnName3,columnName4,columnName5,columnName6) values(@v1, @v2, @v3, @v4, @v5, @v6)", default(SqlConnection));
        sqlCmd.Parameters.Add("@v1", SqlDbType.NVarChar).Value = RadioButton1.Text;
        sqlCmd.Parameters.Add("@v2", SqlDbType.NVarChar).Value = RadioButton2.Text;
        sqlCmd.Parameters.Add("@v3", SqlDbType.NVarChar).Value = RadioButton3.Text;
        sqlCmd.Parameters.Add("@v4", SqlDbType.NVarChar).Value = RadioButton4.Text;
        sqlCmd.Parameters.Add("@v5", SqlDbType.NVarChar).Value = RadioButton5.Text;
        sqlCmd.Parameters.Add("@v6", SqlDbType.NVarChar).Value = Label1.Text;
        sqlCmd.ExecuteNonQuery();