1

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

我有一个 Windows 应用程序 (C#),在我登录后,它开始在 Oracle 数据库中运行 5 或 6 个不同的查询,每 5-10 秒。应用程序是 24/7。

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

//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;

//second query    
conn.Open();
DataSet ds2 = new DataSet();

string sql = "SELECT * FROM table2";

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

return ds2;

最好的方法是什么?

4

3 回答 3

3

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

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

于 2012-09-27T12:42:38.280 回答
2

当然,另一种选择是为每个“批次”查询设置一个连接

但是,如果您经常访问数据库,那么听起来您需要在应用程序期间建立永久连接。

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

于 2012-09-27T12:41:44.957 回答
1

我建议您使用usingblock 来cleannon managed object

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

}

注意:在处理结束时对您的对象使用执行处置

链接: http: //msdn.microsoft.com/fr-fr/library/yh598w02 (v=vs.80).aspx

于 2012-09-27T12:45:55.397 回答