我在这里有一个非常简单的问题,但我找不到解决它的答案。
我有一个像这样的连接字符串:
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来做到这一点,但它太慢了,我认为不太推荐。
好吧,我只是想通过代码知道如何做到这一点。有一个简单的方法吗?它会完全解决问题吗? (我的意思是,它肯定能在其他版本中使用吗?)
提前致谢! (抱歉我的英文)
答案 0 :(得分:3)
连接字符串不应硬编码到您的软件中。
您应将其置于配置(web.config
或app.config
)中,原因与您发布此问题的确切原因有关。
您不能假设将在您的应用程序运行的计算机上安装任何版本的SQL - 用户可能希望使用集中式服务器。
答案 1 :(得分:1)
答案 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