我正在使用此函数从三个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 :(得分:1)
通过已完成的速度测试,使用SQL Adapters(ADO.Net)是获取信息的最快方法。但是,考虑到你在.Net上,我建议如果可能的话使用LINQ - 它更干净,更快捷。这是一个stackoverflow question that might help you。
话虽如此,除非您的查询量很大,否则您所使用的内容应该非常快。您查询的数据库可能很慢(共享主机,网络延迟,执行次数,服务器上的硬件,and other issues)。
我建议为您尝试访问的查询计时一个请求,以获得执行它所需的一般指标。也可能是你的查询非常复杂,有很多连接等等。
另外,AnjLab的SQLProfiler是处理MSSql数据库内容的非常好的工具
答案 1 :(得分:0)
看看SQL Server Management Objects (SMO)。它可以帮助您做您需要的和更多。希望有所帮助,