【发布时间】:2018-10-24 11:16:41
【问题描述】:
是否可以通过将以下查询合并到单个 SQLCommand 中来优化它们?
SqlCommand cmd = new SqlCommand
{
CommandType = CommandType.Text,
CommandText = "DELETE FROM cbu_naslovi WHERE [ID]='" + CurrentID + "'",
Connection = con
};
SqlCommand cmd1 = new SqlCommand
{
CommandType = CommandType.Text,
CommandText = "DELETE FROM cbu_deli WHERE [IDX]='" + CurrentID + "'",
Connection = con
};
cmd.ExecuteNonQuery();
cmd1.ExecuteNonQuery();
编辑:工作解决方案,正如下面的社区回答所建议的那样
SqlCommand cmd = new SqlCommand
{
CommandType = CommandType.Text,
CommandText = "DELETE FROM cbu_naslovi WHERE [ID] = @CurrentID; DELETE FROM cbu_deli WHERE [IDX] = @CurrentID",
Connection = con
};
cmd.Parameters.AddWithValue("@CurrentID", CurrentID);
cmd.ExecuteNonQuery();
【问题讨论】:
-
您可以使用需要一次数据库调用的存储过程吗?
-
CurrentID = "'; 删除表 cbu_deli; --"
-
从两个不同的表中删除是两种不同的逻辑操作。您不能仅通过将命令填充在一起来优化它们,因为解析它们不是瓶颈。发出两个命令完全没问题。 (但是,正如已经提到的,使用参数来防止 SQL 注入。像 Dapper 这样的微型 ORM 使这变得如此简单,没有理由不这样做。)
-
@JeroenMostert,微软的
SqlParameter类也很容易使用;) -
@Adephx 在这种情况下注入是不可能的,但手动构建 sql 命令通常不是一个好习惯。您也没有说明 CurrentID 类型,但您将其值括在撇号中 - 这暗示了一些文本价值......如果我的评论难以理解,但您阅读并理解了 - 那么也许我的评论对您有一些价值毕竟:)