【发布时间】:2012-12-11 15:32:48
【问题描述】:
我正在查询数据,如果数据不存在,我插入它。如果是这样,我会做其他事情:
SqlCommand checkHead = new SqlCommand("SELECT * FROM TABLE WHERE ORDER_NO = '" + orderNo + "';", connection);
SqlDataReader checkHeadReader = checkHead.ExecuteReader(CommandBehavior.SingleRow);
if (!checkHeadReader.HasRows)
{
checkHeadReader.Close();
addHead.ExecuteNonQuery();
}
但我想知道是否有更短的编码方式?下面的代码会起作用吗?
SqlCommand checkHead = new SqlCommand("SELECT * FROM TABLE WHERE ORDER_NO = ' + orderNo + "';", connection);
if(checkHead.ExecuteReader(CommandBehavior.SingleRow).HasRows)
addHead.ExecuteNonQuery();
else //this order already exists
Server.Transfer(@"~/Views/Error.aspx");
【问题讨论】:
-
你尝试的时候发生了什么?
-
您需要关闭阅读器。
-
关闭阅读器,检查sql注入,不要使用select *而是选择count(*)或者exists。
-
如果第一个示例中没有行,您似乎正在执行
addHead命令,并且仅当第二个示例中有行时才执行它。除此之外,它们看起来或多或少是等效的。假设您有一个编译器和一台计算机可以使用,那么确定它是否有效的最好方法就是自己尝试一下。 -
@SLaks 超出范围时阅读器不会自动关闭吗?如果很重要,您可以链接到解释吗?
标签: c# asp.net sqlcommand