第一:有没有更好的方法
sqlcommand object = new sqlcommand("insert into sometable values '" + textboxes.texts "'," + somelabelvalues.text + "')" , connectiondb); //true for update,delete and everything inwhich we want to feed input data into database.
这不安全。有没有更好的方法来做到这一点,因为这是在我们的C#类中教授的。
欢迎所有建议!
答案 0 :(得分:5)
使用SqlParameter
SqlCommand cmd = new SqlCommand("Select * from sometable where value = @value");
cmd.Parameters.AddWithValue("@value", "value");
答案 1 :(得分:2)
Cam Bruce是正确的,总是使用SqlParameter
。但是,我想稍微阐述一下。
首先,您询问是否有“更好的方法”,答案是肯定的 - 使用参数。然而,在原始评论中解决了另一个答案,使用实体框架有一种以不同的方式执行此操作。我会说在某些情况下它会更好。如果这是您在项目中唯一的SQL查询,那么请不要使用Entity Framework,因为开销是不必要的。
您还应该阅读SQL Injection Attacks
现在开始使用您的代码。如上所述,使用SqlParameter
。在准确处理你的命令和连接时,他确实遗漏了一些好的做法。
最好将SqlCommand
和SqlConnection
包装在using
语句中,这样当您完成对象后,它们就会被处理掉。
string mySqlCommandText = "INSERT INTO some_table VALUES (@Value1, @Value2, @Value3)";
//Wrap your connection/command in using blocks
using (var conn = new SqlConnection(mySqlConnectionString))
using (var cmd = new SqlCommand(mySqlCommandText, conn))
{
//Add your values to the parameters
//This is how you avoid the SQL Injection attack
cmd.Parameters.AddWithValue("@Value1", myValue1);
cmd.Parameters.AddWithValue("@Value2", myValue2);
cmd.Parameters.AddWithValue("@Value3", myValue3);
conn.Open();
cmd.ExecuteNonQuery();
} //The cmd and conn objects are disposed of here as they are now out of scope.
答案 2 :(得分:0)
是的,因为SQLInjection漏洞,这种方式不安全......
如Cam Bruce
所述,您可以使用命令参数使其安全可靠......
SqlCommand cmd = new SqlCommand("Select * from sometable where value = @value");
cmd.Parameters.AddWithValue("@Value", "value");
cmd.ExecuteNonQuery();
只是那个!