使用数据库C#进行查询的更好方法

时间:2014-01-15 20:51:09

标签: c# mysql .net

第一:有没有更好的方法

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#类中教授的。

欢迎所有建议!

3 个答案:

答案 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,因为开销是不必要的。

您可以阅读Entity Framework on MSDN

您还应该阅读SQL Injection Attacks

现在开始使用您的代码。如上所述,使用SqlParameter。在准确处理你的命令和连接时,他确实遗漏了一些好的做法。

最好将SqlCommandSqlConnection包装在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();
只是那个!