【问题标题】:How to detect whether the SQL Server edition is Express?如何检测 SQL Server 版本是否为 Express?
【发布时间】:2012-07-07 04:29:30
【问题描述】:

我在这里有一个非常简单的问题,但我找不到解决它的答案。

我有一个这样的连接字符串:

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB\DB.mdf;Initial Catalog=DB;Integrated Security=True");

它可以工作,但是当我尝试在没有安装 SQL Server Express 的 PC 上使用它时,它就是无法连接。我知道,如果我删除那个“\SQLEXPRESS”部分,它显然会起作用,但我不想在我安装软件的每台 PC 上手动执行它。我试过用try-catch来做,但是太慢了,我觉得不太推荐。

好吧,我只想知道如何通过代码来实现。有没有一种简单的方法可以做到这一点?会彻底解决问题吗? (我的意思是,它肯定会在其他版本中工作吗?)

提前致谢! (对不起我的英语)

【问题讨论】:

  • "如果我删除那个 "\SQLEXPRESS" 部分,它显然会起作用"。不,如果机器上没有 no SQL Server,则不会。
  • 这与安装 sql server express 无关。碰巧默认实例名称是 sqlexpress 的 sqlexpress。我可以安装一个名为 TonyHasSweatyCheeks 的实例,它将是 sqlserver express。您需要从其他地方获取实例名称和服务器名称。
  • Oded,对不起,这就是我的意思(只要安装了 SQL Server,它就可以在没有“\SQLEXPRESS”的情况下工作)。 @TonyHopkinson,谢谢,我真的不知道。

标签: c# connection-string sql-server-express


【解决方案1】:

不应将连接字符串硬编码到您的软件中。

出于发布此问题的确切原因,您应该将它们放入配置中(web.configapp.config)。

您不能假设在您的应用程序将运行的机器上安装了任何版本的 SQL - 用户可能希望使用集中式服务器。

【讨论】:

  • 还有 .在您的连接字符串中表示“本地机器”。它相当于“localhost”,因此您的连接字符串正在您安装它的机器上寻找一个名为 SQLEXPRESS 的 SQL 实例
  • @Charleh - 您的意思是对这个问题发表评论吗?
  • 不,只是添加到您的答案中:P
  • 亲爱的。当你下次在伦敦时,我会给你买一品脱 - 也许你可以编辑我的帖子;)
  • 我的父母住在伦敦,所以下次我沮丧时,我会带你去!
【解决方案2】:

在 T-SQL 本身中,您可以检查 edition 服务器属性:

SELECT  
   SERVERPROPERTY('edition') as 'Product Edition'

如果您检查的版本确实是 Express 版本,这将返回类似 Express Edition (64-bit) 的内容。

您可以在relevant MSDN documentation here 中阅读有关所有其他可用服务器属性的更多信息。

【讨论】:

  • 好吧,我已经读过一篇关于这个的文章,但是我仍然需要手动进行....当我尝试通过代码进行时,我仍然需要正确设置连接字符串.另外,根据别人的说法,我想这不是问题,但还是谢谢!
【解决方案3】:

澄清一下:SQL 服务器可以安装为“默认”或“命名”实例。我认为默认情况下,快速安装为命名实例

这允许一台服务器机器运行多个 SQL 服务器

要连接到默认实例,您需要指定服务器名称或 IP,仅此而已

Server=SomeServer

要连接到命名实例,请指定服务器/IP + 实例名称,以反斜杠分隔。

Server=SomeServer\SomeInstance

在您的情况下,您希望连接到本地计算机上名为“SQLEXPRESS”的 SQL 实例。 (点 . 表示本地机器)

理想情况下,您希望在服务器计算机上安装 SQL 并使用应用程序配置文件 (App.config) 来指定连接字符串。

App.config 支持一个名为 ConnectionStrings 的部分,您可以将连接字符串添加到该部分。然后,如果您在项目中添加对 System.Configuration 的引用,您可以使用配置管理器类获取连接字符串:

App.config:

<connectionStrings>
    <add name="YourConnectionString"
        connectionString="Server=someSqlServer\SomeInstance;Initial Catalog=SomeDB;Integrated Security=True" 
providerName="System.Data.SqlClient" />
</connectionStrings>

在代码中使用:

ConfigurationManager.ConnectionStrings["YourConnectionStringName"]

【讨论】:

  • 谢谢,解释的很好!但是我有两个问题:1:只是为了好奇,使用这种方法有什么好处,而不是我发布的那个? 2:我可以做些什么来获取服务器/实例名称?正如我所说,我尝试了 Wayne Phipps 发布的内容,但没有返回任何值。 3:我应该如何/在哪里使用 ConfigurationManager.ConnectionStrings["name"],究竟是什么?对不起,如果我是个白痴……
  • 优点是如果服务器位置改变或者认证方式改变,你不需要重新构建应用程序。您不需要获取您应该已经知道它们的服务器名称,并且当您需要连接字符串时应该使用配置管理器,它返回一个字符串,您可以在创建 sql 连接时使用它
  • 啊,现在我明白了。非常感谢!
【解决方案4】:

您可能应该编写一些内容让您的用户选择服务器。您可以使用注册表来检测本地运行的 SQL Server 实例,但如果您连接到网络实例,这将不起作用。请参阅有关使用 SMO(服务器管理对象)的答案。 Programmatically detect SQL Server Edition

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2010-09-07
    相关资源
    最近更新 更多