好吧现在我正在使用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();
我可以把它放在一个函数中并调用它代码..代码看起来更干净...... 我试过这样做,但我得到的错误如下:
当前上下文中不存在连接。
任何建议???
感谢
答案 0 :(得分:6)
答案 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来关闭连接。
任何需要打开/关闭的东西都可以在使用时使用,比如文本编写器或其他对象。