【问题标题】:SQL connection to database repeating与数据库重复的 SQL 连接
【发布时间】:2010-03-19 17:08:19
【问题描述】:

好的,现在我正在使用 SQL 数据库从不同的表中获取值...所以我建立连接并获取如下值:

DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString;
connection.Open();
SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Machines", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

sqlCmd.Parameters.AddWithValue("@node", node);
sqlDa.Fill(dt);
connection.Close();

所以这是页面上的一个查询,我在页面上调用了许多其他查询。

所以我每次都需要打开和关闭连接吗????

如果不是,这部分也是通用的:

DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString;
connection.Open();

我可以把它放在一个函数中然后调用它吗.. 代码看起来更干净... 我试过这样做,但我收到如下错误:

当前上下文中不存在连接。

有什么建议吗???

谢谢

【问题讨论】:

    标签: c# asp.net sql-server ado.net connection


    【解决方案1】:
    1. 你绝对可以分享“开放连接”代码,没有理由复制它。
    2. 使用 ASP.NET 的 SQL Server 提供程序,每次“关闭”连接的开销非常小。它只是将连接返回到您的进程的连接池(请参阅here),因此打开下一个连接将使用很少的开销。我认为在每次操作后关闭连接是一种好习惯

    【讨论】:

      【解决方案2】:

      我使用“使用”。您可以在其中包含任意数量的查询。完成后,它将为您清理。

      using (SqlConnection cn = new SqlConnection(connectionString))
      {
          using (SqlCommand cm = new SqlCommand(commandString, cn))
          {
              cn.Open();
              cm.ExecuteNonQuery();
          }
      }
      

      【讨论】:

        【解决方案3】:

        通常是的,您为多个行集建立单独的连接。

        如果您可以使用连接来生成单个有意义的行集,那么这通常是在服务器端而不是客户端做的一件好事。

        您可能还想考虑建立多个连接并使用异步功能,以便同时而不是按顺序排列所有请求 - 请使用 look at this article

        【讨论】:

          【解决方案4】:

          不,只要您使用同一个数据库,您就不必每次都打开和关闭连接。你需要改变的是

          sqlCommand's queryString every time.

          就像@durilai 所说,[using] 很有用。 Using 实际上有比这更多的功能,但本质上它会在你的代码周围放置一个 try/catch 块,并在这种情况下调用 dispose 来关闭连接。

          任何需要打开/关闭的东西都可以与 using 一起使用,例如文本编写器或其他对象。

          【讨论】:

            猜你喜欢
            • 2016-01-23
            • 2017-11-08
            • 2020-01-21
            • 1970-01-01
            • 2019-02-11
            • 1970-01-01
            • 1970-01-01
            • 2020-10-20
            • 2018-02-22
            相关资源
            最近更新 更多