如何检测SQ​​L Server版本是否为Express?

时间:2012-07-06 20:11:25

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

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

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

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来做到这一点,但它太慢了,我认为不太推荐。

好吧,我只是想通过代码知道如何做到这一点。有一个简单的方法吗?它会完全解决问题吗? (我的意思是,它肯定能在其他版本中使用吗?)

提前致谢! (抱歉我的英文)

5 个答案:

答案 0 :(得分:3)

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

您应将其置于配置(web.configapp.config)中,原因与您发布此问题的确切原因有关。

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

答案 1 :(得分:1)

这里回答了类似的问题: Check if SQL server (any version) is installed?

希望这有帮助吗?

亲切的问候,韦恩

答案 2 :(得分:1)

只是为了澄清:SQL服务器可以安装为“默认”或“命名”实例。我认为默认情况下,将安装表示为命名实例

这允许单个服务器计算机运行多个SQL服务器

要连接到默认实例,请指定服务器名称或IP,并且全部

Server=SomeServer

要连接到命名实例,请指定由反斜杠分隔的server / ip +实例名称。

Server=SomeServer\SomeInstance

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

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

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

App.config中:

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

在代码中使用:

ConfigurationManager.ConnectionStrings["YourConnectionStringName"]

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

您应该写一些让用户选择服务器的东西。您可以使用注册表来检测本地运行的SQL Server实例,但如果要连接到网络实例,则无法运行。请参阅有关使用SMO(服务器管理对象)的答案。 Programmatically detect SQL Server Edition