我需要有关数据库连接和winapp的帮助。
我有一个Windows应用程序(C#),在我登录后,每5-10秒开始在Oracle数据库中运行5或6个不同的查询。申请时间为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;
最好的方法是什么?
答案 0 :(得分:3)
您在应用程序中使用的Oracle OleDB提供程序实现了池化。因此,当您创建和克隆连接时,您只能从“真实连接”池中获取/释放连接。
这使得创建和处理Connection对象成为一种非常便宜的操作。如果我是你,我会打开一个连接,执行我的一批查询,并在我完成并进入睡眠状态时关闭+处理该连接(即使是几秒钟)。
答案 1 :(得分:2)
另一个选择当然是为每一批“查询”提供一个连接
但是,如果你经常访问数据库,那么听起来你需要在应用程序期间建立永久连接。
我当然假设您的示例仅仅是示例,并且您不会使用原始SQL实际访问数据库。
答案 2 :(得分:1)
我建议您使用using
阻止clean
non managed object
using(var connection = new OracleConnection("..."))
{
.....
}
Nota:在治疗结束时对您的对象使用execute dispose
链接:http://msdn.microsoft.com/fr-fr/library/yh598w02(v=vs.80).aspx