c#/oracle:打开/关闭连接

c#/oracle:打开/关闭连接,c#,winforms,oracle,C#,Winforms,Oracle,我需要有关数据库连接和winapp的帮助 我有一个windows应用程序(C#),在我登录后,它会在Oracle数据库中每隔5-10秒运行5到6次不同的查询。申请全天候增长 这样做的正确方法是什么? 我应该在登录时打开连接,并且在关闭应用程序之前从不关闭连接,还是应该在每次运行查询时打开并关闭连接? 例如: //first query conn.Open(); DataSet ds1 = new DataSet(); string sql = "SELECT * FROM table1";

我需要有关数据库连接和winapp的帮助

我有一个windows应用程序(C#),在我登录后,它会在Oracle数据库中每隔5-10秒运行5到6次不同的查询。申请全天候增长

这样做的正确方法是什么? 我应该在登录时打开连接,并且在关闭应用程序之前从不关闭连接,还是应该在每次运行查询时打开并关闭连接? 例如:

//first query
conn.Open();
DataSet ds1 = new DataSet();

string sql = "SELECT * FROM table1";

OracleCommand cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(ds1, "Result1");
conn.Dispose();

return ds1;


最好的方法是什么?

当然,另一个选择是为每个“批”查询建立一个连接

但是,如果您经常访问数据库,那么在应用程序运行期间似乎需要一个永久连接


当然,我认为您的示例只是一个示例,实际上您并没有使用原始SQL访问数据库。

另一个选择当然是为每个“批”查询建立一个连接

但是,如果您经常访问数据库,那么在应用程序运行期间似乎需要一个永久连接


当然,我认为您的示例只是一个示例,实际上您并没有使用原始SQL访问数据库。

您在应用程序中使用的Oracle OleDB提供程序实现池。因此,当您创建和关闭一个连接时,您只能从“真实连接”池中获取/释放一个连接


这使得创建和处理连接对象成为一项非常廉价的操作。如果我是你,我会打开一个连接,执行我的一批查询,并在我完成并进入睡眠状态时(甚至几秒钟)关闭并处理该连接。

应用程序中使用的Oracle OleDB提供程序实现池。因此,当您创建和关闭一个连接时,您只能从“真实连接”池中获取/释放一个连接


这使得创建和处理连接对象成为一项非常廉价的操作。如果我是你,我会打开一个连接,执行我的一批查询,并在我完成并进入睡眠状态后(甚至几秒钟)关闭并处理该连接。

我建议你使用
使用
块来
清理
你的
非托管对象

using(var connection = new OracleConnection("..."))
{
 .....

}
注:在处理结束时对对象使用execute dispose


链接:

我建议您使用
使用
块来
清理
您的
非托管对象

using(var connection = new OracleConnection("..."))
{
 .....

}
注:在处理结束时对对象使用execute dispose


链接:

但是,只有当您打开它时才可以。我不认为这是默认的,除非你有充分的理由不这样做。他没提那件事。这就是我要说的。我也使用block实现了,所以我不必担心conn.open/conn.dispose…不过,只有在您打开它的情况下。我不认为这是默认的,除非你有充分的理由不这样做。他没提那件事。这就是我要说的。我也使用block实现,所以我不必担心conn.open/conn.dispose…是的,我可以使用block实现,但是,如果我错了,请纠正我,这将每次打开和关闭连接。问题是,如果我每隔几秒钟做一次,这有多聪明?@Alex你创建连接对象,然后在查询结束时清理,为了优化你对连接池的管理是的,我可以使用block实现,但是,如果我错了,请纠正我,这将每次打开和关闭连接。问题是,如果我每隔几秒钟做一次,这有多聪明?@Alex你创建了连接对象,并在查询结束时进行了清理,为了优化你对连接池的管理,你能告诉我们连接池是否打开了吗。这将决定最终的解决方案。它是启用的-我相信是ODT中的默认设置。您能否告诉我们连接池是否已打开。这将决定最终的解决方案。我相信在ODT中它是启用的-默认设置。