减少C#中的使用次数

时间:2014-05-02 12:50:36

标签: c# .net asp.net-mvc-4 using sqlclient

我的问题可能很愚蠢,或者根本不是一个问题,但在这里它会......

我在ASP.net MVC项目中执行了一些数据库操作,我每次创建两个对象,SqlConnectionSqlCommand

我在下面展示了一个例子

using (SqlConnection connection = new SqlConnection(connectionString))
{
  using (SqlCommand command = new SqlCommand("sRegisterUser", connection))
  {

我在一个类中使用不同的方法进行所有这些不同的操作。

我的问题是如何每次都减少这些对象的创建?我怎样才能全局创建

PS:sRegisterUser是一个存储过程,就像明智的其他方法使用不同的过程一样,它们将不同的值作为参数。

请帮帮我。

感谢您提前提供任何帮助。

3 个答案:

答案 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对象,打开连接,执行查询,关闭连接并处理任何需要处理的对象。

选择。