在多个数据库中查询值

问题描述:

我正在使用此函数跨三个SQL实例(在同一台服务器上)从多个数据库返回一个值。我正在循环查看DataGridView,其中列出了三个SQL实例之一上的所有数据库。在多个数据库中查询值

有没有更快的方法来做到这一点?使用这种方法很慢。

Function DatabaseStatus(ByVal SQLServer As String, ByVal Database As String) 
    Dim myConn As New SqlConnection("Server=" & SQLServer & ";User Id=USER;Password=PASSWORD;Database=" & Database & ";") 
    Dim Status As String = "" 
    If myConn.State = ConnectionState.Closed Then 
     myConn.Open() 
    End If 
    Dim query As String = "SELECT STATEMENT;" 
    Dim myCommand As New SqlCommand(query, myConn) 
    Try 
     If myCommand.ExecuteScalar().ToString.ToUpper = "OK" Then 
      Status = "Ready" 
     End If 
    Catch ex As Exception 
     Status = "Unknown" 
    Finally 
     myConn.Dispose() 
    End Try 
    Return Status 
End Function 

编辑 - SELECT语句例如:

IF OBJECT_ID('TABLENAME') IS NOT NULL SELECT [Setting] FROM [TABLENAME] 
WHERE [Section] = 'platform' and [Setting] = 'server' ELSE SELECT 'UNKNOWN'; 
+0

旁注一个很好的工具。我建议从代码中取出“SELECT语句”,然后使用EF或LINQ。它将真正有助于可维护性。如果您的查询过于复杂,则可以使用存储过程。 – 2010-10-16 14:05:11

+0

感谢您的提示:) – madlan 2010-10-16 14:19:47

从已经完成的速度测试中,使用SQL Adapters(ADO.Net)是获取您的信息的最快方式。但是,考虑到你使用的是.Net,如果可能的话,我建议使用LINQ - 它要更加清洁和快速。这是一个stackoverflow question that might help you

这就是说,除非你的查询很大,你使用的应该是非常快的。您查询的数据库可能很慢(共享主机,网络延迟,执行次数,服务器上的硬件,and other issues)。

我建议为您试图访问的查询计时一个请求,以获取有关执行该查询所需的一般指标。它也可能是您的查询是非常复杂,有很多加入的,等

此外,AnjLab的SQLProfiler是处理MSSQL数据库的东西

+0

我已将select语句添加到问题中,它从表中选择单个数字(整数)值,问题是我有30多个数据库正在循环(填充DataGridView的详细信息) – madlan 2010-10-17 11:50:29

+0

然后问题可能只是结束这与你正在努力完成的事情有关。也许你可以使用Ajax调用来填充datagridview。也许你试图循环访问数据库,当它真的是“它会很好”,而不是一个需求。您是否尝试计时每次通话需要多长时间?有很多事情都是出现在上下文中的,但你的电话似乎很简单。 – MunkiPhD 2010-10-18 12:11:19

SQL Server Management Objects (SMO)看看。它可以帮助你做你需要的和更多的东西。希望有帮助,

+0

我刚刚离开SMO,我正在使用.net 4 - SMO有一些问题。另外,我正在使用SQL2000到SQL2008R2,因此不得不使用存储过程来完成基本任务,例如创建数据库用户。 – madlan 2010-10-17 11:39:34