【问题标题】:c# variable into sql commandc#变量转化为sql命令
【发布时间】:2011-10-28 04:16:52
【问题描述】:
string alpha="this is text";
string sql = "INSERT INTO dokimastikospinakas (pliroforia) VALUES ('alpha')";

将 c# 变量传递给 sql 命令的正确语法是什么?

【问题讨论】:

标签: c# sql


【解决方案1】:

这里只是一个非常简单的方法:

var yourTextValue = "this is text";
using (var db = new SqlConnection()) {
    db.Open();

    var command =
        new SqlCommand("INSERT INTO dokimastikospinakas (pliroforia) VALUES (@textValue);", db);
    command.Parameters.AddWithValue("@textValue", yourTextValue);

    command.ExecuteNonQuery();
}

编辑:当然,SqlConnection 构造函数实际上需要一些连接字符串。并根据大众需求修改变量名。

【讨论】:

  • 我觉得@id这个变量名有点弱,但答案是正确的。
  • 使用“id”作为字符串变量?
  • 我的意思是,因为我不知道 pliroforia 是什么,所以我无法推断上下文。我想我可以改为调用变量@phlargosmarfin
  • @Yuck:是的,你可以拥有..它会为笑声赢得更多选票。 ;) +1
【解决方案2】:

为了避免sql注入漏洞,我建议:

string alpha="this is text";
SqlCommand sqlComm = new SqlCommand();
sqlComm.CommandText = "INSERT INTO dokimastikospinakas (pliroforia) VALUES (@var)";
sqlComm.AddWithValue("@var", alpha);

..等等

【讨论】:

  • sqlComm.CommandText = "INSERT INTO dokimastikospinakas (pliroforia) VALUES ('@var')" 不起作用!您需要在该语句中从 @var 中取出那些单引号!
【解决方案3】:

研究使用参数化查询。

SqlCommand command = new SqlCommand();
command.Parameters.Add("@alpha").Value = alpha;
command.CommandText = sql;

您的查询将如下所示:

string sql = "INSERT INTO dokimastikospinakas (pliroforia) VALUES (@alpha)";

【讨论】:

    【解决方案4】:
    string insert = "INSERT INTO dokimastikospinakas (pliroforia) VALUES (@alpha)";
    
    using (SqlConnection connection = new SqlConnection(...))
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand(insert, connection))
        {
            command.Parameters.Add("@alpha", alpha);
            command.ExecuteNonQuery();
        }
    }
    

    【讨论】:

      【解决方案5】:

      您在使用 ADO.NET 吗?那么参数化查询就是你想要的:

      IDbCommand command = new IDbCommand();
      // Set up command connection
      command.Text = "INSERT INTO dokimastikospinakas (pliroforia) VALUES (@alpha)";
      command.Parameters.Add(new SqlParameter("@alpha", alpha));
      

      上面的代码sn -p 当然取决于你使用的数据库类型(尤其是你添加的SqlParameter类型。

      【讨论】:

        【解决方案6】:

        使用 OracleCommand 对象的示例: OraCon 是 OracleConnection。

        string sql = "INSERT INTO dokimastikospinakas (pliroforia) VALUES ( :Alpha )";
        OracleCommand cmd = new OracleCommand(sql, OraCon);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.Add(":Alpha", alpha);
        cmd.ExecuteNonQuery();
        

        【讨论】:

          【解决方案7】:
          string alpha;
          string sql = "INSERT INTO dokimastikospinakas (pliroforia) VALUES ('" + alpha + "')";
          

          这是最简单的方法,但它对 SQL 注入攻击并不安全。相反,您应该首先检查alpha 的值,以确保在查询中使用它是安全的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-26
            • 2020-02-03
            • 1970-01-01
            • 2013-02-07
            • 2016-03-11
            • 1970-01-01
            相关资源
            最近更新 更多