我有以下一组代码:
using (OracleConnection conn = new OracleConnection(m_fceConn))
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(m_sql, conn))
{
using (OracleDataReader reader = cmd.ExecuteReader())
{
reader.Read();
}
}
conn.Close();
}
有没有更好的格式化方法?当然,稍后我可能会打破连接,运行查询,并在以后将连接关闭到单独的函数中,但是这种嵌套仍然会在“幕后”可以说。
我在另一个帖子上读到我可以格式化这样的事情:
using (OracleConnection conn = new OracleConnection(m_fceConn))
using (OracleCommand cmd = new OracleCommand(m_sql, conn))
但考虑到我在每个陈述之间都有代码,我不相信我可以省略这样的括号。我只是在寻找最好/最安全的做法,因为我仍然是C#的新手/菜鸟。感谢。
答案 0 :(得分:3)
我可能错了,但我认为在将连接传递给OracleCommand之前不需要打开连接。您只需在执行命令之前打开它。所以你可以把上面的内容写成:
using (OracleConnection conn = new OracleConnection(m_fceConn))
using (OracleCommand cmd = new OracleCommand(m_sql, conn))
{
conn.Open();
using (OracleDataReader reader = cmd.ExecuteReader())
{
reader.Read();
}
}
(你也不需要显式关闭,因为处理连接应该自动关闭它。)
上面的代码没什么特别的(除了它看起来不错),它只是使用普通的C#规则将单个命令应用于这些块。它与此相同:
if (...)
if (...)
dosomething(); // Look Ma, no curly braces
只是你正在“堆叠”多个单一陈述。
答案 1 :(得分:2)
您所拥有的内容格式正确,但没有必要调用conn.Close()
,因为连接将在声明它的using
块的末尾处理(并因此关闭)。
但是,您可以省略第二个语句的括号,因为该语句的整体只是另一个using
块。
答案 2 :(得分:2)
您的第一个使用声明需要括号,因为您在那里有conn.Open()
电话。第二个和第三个可以按照你的说法堆叠,这是非常惯用的C#(在我的例子中是首选)。
答案 3 :(得分:0)
using (OracleConnection conn = new OracleConnection(m_fceConn))
{
conn.Open();
using (OracleDataReader reader = new OracleCommand(m_sql, conn).ExecuteReader())
{
reader.Read();
}
conn.Close();
}
修改强> 再想一想,不要这样做。它不会丢弃命令对象。我将在这里留下答案,作为不做的事情的一个例子。