0

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

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

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 来实现,但它太慢了,我认为它不是很推荐。

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

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

4

4 回答 4

3

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

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

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

于 2012-07-06T20:17:06.423 回答
1

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

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

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

您可以在此处的相关 MSDN 文档中阅读有关所有其他可用服务器属性的更多信息。

于 2012-07-06T20:29:30.140 回答
0

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

于 2012-07-06T20:23:16.293 回答
0

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

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

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

Server=SomeServer

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

Server=SomeServer\SomeInstance

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

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

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

应用程序配置:

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

在代码中使用:

ConfigurationManager.ConnectionStrings["YourConnectionStringName"]
于 2012-07-06T20:23:17.993 回答