如何以快速安全的方式从应用程序代码检查是否存在本地数据库实例?

时间:2012-06-27 19:22:13

标签: c# ado.net sqlconnection

找出是否有,

的方法是什么
  • 有一个本地运行的SQL Server实例
  • 如果是,数据库X是否存在?
  • 如果是,可以将数据库X连接到使用集成安全性吗?

我想以最干净的方式在应用程序启动时完成上述操作。特别是,当我点击下拉菜单浏览各种开发工具的连接向导中的数据库时,我很担心会引入我常见的延迟。

我可以假设实例名称为..\sqlexpress

最终用户大多运行Windows XP。

实际的上下文是我想让我的应用程序自动感知开发人员可以安装的本地数据库。

如果它就像在连接字符串中使用apprpriate值创建一个SqlConnection一样简单,那就是安全和推荐的方式,那么我很擅长。我问这个是因为我试图保证不会引入糟糕的最终用户体验。

3 个答案:

答案 0 :(得分:1)

如果您知道要查看..\sqlexpress,只需尝试连接try-catch并执行master.sysdatabases选择。

如果您不了解服务器,则可以使用SQL Server Management Object库列出可发现的所有实例/数据库。这个问题详述了:

How to list available instances of SQL Servers using SMO in C#?

然后,SMO Server类具有Databases属性以进行迭代。

答案 1 :(得分:1)

连接到(local)服务器。如果好,那么切换到master数据库。然后运行此SQL语句:

SELECT * FROM sysdatabases WHERE name = 'YOUR DB NAME HERE'

答案 2 :(得分:0)

使用属性SqlConnection.ConnectionString并设置Connection Timeout的值。默认值为15秒,这是一个很长的时间。因此,如果您按照Adam的想法枚举所有数据库服务器,并减少超时值,那么用户体验也许不会那么糟糕。

更多详情请见SqlConnection Class

我不想进行SQL查询,因为它可能需要很长时间才能失败。

@Aaron,让我们知道你的决定。