asp.net将数据插入数据库

asp.net将数据插入数据库,asp.net,Asp.net,嘿,伙计们,我在这个网站上工作了一段时间,但是我在把数据放入数据库时出错了 “')附近的语法不正确 对于其他的东西,我用同样的方式工作,但这不起作用。您应该真正使用参数化查询来避免SQL注入(并提高性能;避免类型转换等问题) 因此,我建议使用如下代码: con.Open(); cmd2 = new SqlCommand("insert into dailyWorkout('"+RadioButton1.Text+"', '"+RadioButton2.Text+"', '"+RadioButto

嘿,伙计们,我在这个网站上工作了一段时间,但是我在把数据放入数据库时出错了

“')附近的语法不正确


对于其他的东西,我用同样的方式工作,但这不起作用。

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

因此,我建议使用如下代码:

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

cmd2.ExecuteNonQuery();
要记住的要点:

  • 始终使用参数化查询-不要将SQL语句连接在一起
  • 使用(…){…}块将
    SqlConnection
    SqlCommand
    放入
    ,以确保正确处理
  • 始终明确定义要在
    SELECT
    INSERT
    语句中使用的列列表
  • 尽可能晚地打开连接,执行查询,立即再次关闭连接

这就可以了,但我强烈建议使用参数

// 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();
}     
与其使用上面的代码,不如使用

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

cmd2.ExecuteNonQuery();

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

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();
应该是什么时候

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')

请使用sql参数;此代码易受sql注入攻击。请-停止将sql语句连接在一起!这是(a)容易受到SQL注入攻击,(b)性能差,(c)导致此类问题。请改用参数化查询!AlwaysAlso您没有指定插入位置(列名)和'values'关键字。请检查一下谢谢你们的帮助!另外,我建议在
INSERT
语句中明确列出表中的列。当表格结构突然改变时,使事情变得更加健壮,避免了恼人的问题……@eniaBogdasic:请看我的回答!使用
INSERT-INTO dbo.YourTable(Col1,Col2,Col3,…,ColN)值(…)
而不是只指定表名,然后不指定其他内容。。。
        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();