我像这样使用oledbconnection:
try
{
OleDbConnection Conn;
using (Conn = new OleDbConnection("Provider=MSDAORA.1;Data Source=DATABASE1:1521/orcl;Persist Security Info=True;Password=PASSWORD;User ID=USERNAME"))
{
Conn.Open();
v1 = 1;
Conn.Close();
}
}
catch (Exception)
{
v1 = 0;
}
在面板上使用v1,如下所示:
if (v1 == 1)
{
Panel1.BackColor = System.Drawing.Color.Yellow;
}
if (v1 == 0)
{
Panel1.BackColor = System.Drawing.Color.Red;
}
这很简单,对我有用。当我打开此页面时,连接打开和关闭,面板颜色为黄色或红色。
但我想查看超过20个这样的数据库。当我打开这个页面时,20个连接打开,页面等待这么多。当然每次数据库连接打开。我可以使用outputcache,但我需要每隔30秒检查一次(我在这个页面上使用html refresh)。
我怎么能用其他方式呢?我可以使用tnsping吗?如果是,我如何使用tnsping数据库。
(Ping不允许在这台服务器上,我不想检查服务器是否启用,我想检查数据库是否启用)
答案 0 :(得分:2)
您需要连接到数据库才能检查它是否已启动。 tnsping
仅检查套接字是否可用。无法保证您尝试连接的数据库已启用。
答案 1 :(得分:2)
我怎么能以其他方式做到这一点?
没有通用的方法来检查网络资源的可用性。可能有一些间接的方式(如ICMP,套接字可用性等),但它们什么都不保证。正确的方法是尝试连接资源(在您的情况下为数据库)。
但我想查看超过20个这样的数据库。当我打开这个 页面,20连接打开,页面等待太多了
看起来像是架构问题。
如果此页面类似于基础架构监控软件,我会编写一个常规(Windows)服务作为后端,它将定期并行提取数据库(使用async
/ await
是这是IMO的最佳选择。
然后,Web前端应该提取此服务以获得结果。由于结果可以存储在本地数据库或内存中,因此响应时间会相当快(这取决于服务和Web应用程序的通信方式)。
答案 2 :(得分:2)
检查它的简单方法是连接数据库。如果服务器没有启动,那么它最终会抛出SqlException
并且您可以检查异常对象的Error
属性,该属性是sqlError
对象的集合。