在多个数据库中查询值
我正在使用此函数跨三个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';
从已经完成的速度测试中,使用SQL Adapters(ADO.Net)是获取您的信息的最快方式。但是,考虑到你使用的是.Net,如果可能的话,我建议使用LINQ - 它要更加清洁和快速。这是一个stackoverflow question that might help you。
这就是说,除非你的查询很大,你使用的应该是非常快的。您查询的数据库可能很慢(共享主机,网络延迟,执行次数,服务器上的硬件,and other issues)。
我建议为您试图访问的查询计时一个请求,以获取有关执行该查询所需的一般指标。它也可能是您的查询是非常复杂,有很多加入的,等
此外,AnjLab的SQLProfiler是处理MSSQL数据库的东西
在SQL Server Management Objects (SMO)看看。它可以帮助你做你需要的和更多的东西。希望有帮助,
我刚刚离开SMO,我正在使用.net 4 - SMO有一些问题。另外,我正在使用SQL2000到SQL2008R2,因此不得不使用存储过程来完成基本任务,例如创建数据库用户。 – madlan 2010-10-17 11:39:34
旁注一个很好的工具。我建议从代码中取出“SELECT语句”,然后使用EF或LINQ。它将真正有助于可维护性。如果您的查询过于复杂,则可以使用存储过程。 – 2010-10-16 14:05:11
感谢您的提示:) – madlan 2010-10-16 14:19:47