SQL连接到数据库重复

时间:2010-03-19 17:08:20

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

好吧现在我正在使用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();

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

  

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

任何建议???

感谢

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

只要您使用相同的数据库,就不必每次都打开和关闭连接。

需要改变的是什么

sqlCommand's queryString every time.

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

任何需要打开/关闭的东西都可以在使用时使用,比如文本编写器或其他对象。