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

cmd2.ExecuteNonQuery();

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

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

对于其他东西,我以同样的方式工作,但事实并非如此。

4

3 回答 3

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(...) { ... }块中以确保正确处理
  • 始终明确定义要在 aSELECTINSERT语句中使用的列列表
  • 尽可能晚地打开连接,执行查询,立即再次关闭连接
于 2013-04-16T14:53:52.403 回答
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();
于 2013-04-16T14:55:25.430 回答
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();
于 2013-04-16T15:02:51.580 回答