是否可以在the中执行数据库列表刷新,方法与SSMS的右上下文菜单刷新选项相同?
我有一个包含197个数据库的2014 Express实例。在我的C#应用程序中,我有一个获取所有数据库名称的方法。有时,它只返回34个结果,在下一个调用中返回197。
我使用以下脚本获取数据库名称:
SELECT name, create_date
FROM sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb')
AND name NOT LIKE 'ReportServer$%'
AND HAS_DBACCESS(name) = 1
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db_name, @create_date
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(' USE [' + @db_name + '];
INSERT INTO #temp_App
SELECT ''' + @db_name + ''',
''' + @create_date + '''
FROM sys.extended_properties
WHERE name = ''Application''
AND value = ''app01''
')
FETCH NEXT FROM db_cursor INTO @db_name, @create_date
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT * FROM #temp_App
DROP TABLE #temp_App
和执行脚本的c#代码
List<DatabaseInfo> list = new List<DatabaseInfo>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = query;
using (SqlDataReader resultReader = command.ExecuteReader())
{
while (resultReader.Read())
{
string name = resultReader[0].ToString();
DateTime createDateTime = DateTime.Parse(resultReader[1].ToString());
list.Add(new DatabaseInfo(name, createDateTime));
}
}
}
connection.Close();
}
catch (Exception myException)
{
log.Error("Error occured " + myException.Message);
}
finally
{
connection.Close();
}
}
return list;
}
发布于 2021-05-21 17:29:42
正如其他人所提到的,对于SSMS中的对象资源管理器中的对象,刷新上下文菜单项只是为了更新SSMS的UI。
听起来你想要得到一个数据库名的常量列表。如果没有看到您的C#代码,我们就无法告诉您为什么要返回可变数量的名称。
您可以使用sys.databases
system视图获取数据库的最新列表(包括它们的名称)。这将永远包括所有数据库。
如果您只想要联机数据库(因此是可用的)数据库,那么如下所示的查询将为您提供该列表(不过,根据数据库离线的频率或状态的更改等,该列表可能会有更多的变量):
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'; -- can also use WHERE state = 0
发布于 2021-05-21 11:42:05
我知道您要求使用to,但如果您的目标是使用键盘刷新列表,您可以使用以下方法:
https://dba.stackexchange.com/questions/292024
复制