我的问题可能很愚蠢,或者根本不是一个问题,但在这里它会......
我在ASP.net MVC项目中执行了一些数据库操作,我每次创建两个对象,SqlConnection
和SqlCommand
。
我在下面展示了一个例子
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand("sRegisterUser", connection))
{
我在一个类中使用不同的方法进行所有这些不同的操作。
我的问题是如何每次都减少这些对象的创建?我怎样才能全局创建
PS:sRegisterUser是一个存储过程,就像明智的其他方法使用不同的过程一样,它们将不同的值作为参数。
请帮帮我。
感谢您提前提供任何帮助。
答案 0 :(得分:11)
答案是,不要。不想要分享这些对象,您正在适当地使用它们。
答案 1 :(得分:3)
你不是。你要么让对象保持活力,那就太糟糕了。或者你按照你现在应该的方式处理它。
那么,为什么要使用using
?
由于在Windows中处理句柄需要using
。
你也可以写这个,类似于使用using
:
SqlConnection connection = new SqlConnection(connectionString);
connection.Close();
connection.Dispose();
当上面的代码抛出错误时, using
也会处理。使用using
实际上是编码此代码的最短方式。
因此,错误保存版本应为:
SqlConnection connection;
try
{
connection = new SqlConnection(connectionString);
...
connection.Close();
}
finally
{
connection.Dispose();
}
答案 2 :(得分:1)
正如其他人已经说过的那样, 错误地与你现在正在做的事情有关。 ADO.NET对象旨在被使用和处理。根据经验,您应该尽可能晚地创建并尽快处理它们。
说到这里,我理解你在这里尝试做什么,我确实有一些你可能感兴趣的想法,让你的生活更轻松,同时保持良好的编程习惯。
如果您想使代码更简洁,可以链接using
语句:
using (var cn = new SqlConnection(yourConnectionString))
using (var cmd = new SqlCommand(yourQuery, cn))
{
// do stuff
}
IDE不会尝试缩进第二个块,使您更容易阅读。
您还可以为您的程序创建abstraction layer:
public static class Procedures
{
public static void RegisterUser() // add whatever parameters you need
{
using (var cn = new SqlConnection(yourConnectionString))
using (var cmd = new SqlCommand(yourQuery, cn))
{
// do stuff
}
}
}
从那时起,您只需致电:
即可执行您的程序Procedures.RegisterUser();
另一种方法是引入factory pattern来获取对象。仅此一项不会减少它们的数量,但它可能有助于将它们全部设置好(即正确的连接字符串)。
你也可以创造性地结合这两种模式。实现IDisposable
的自定义类可以负责创建必要的ADO对象,打开连接,执行查询,关闭连接并处理任何需要处理的对象。
选择。