ConnectionString与SqlConnection的外部文件

问题描述:

VisualStudio 2017上的C#。Windows窗体应用程序。ConnectionString与SqlConnection的外部文件

大家好。我读过的网络上不可能使用.udl文件,其中写入ConnectionStringSqlConnection。今天真的吗?并且,如果是的话,还有一种替代方法可以使用外部文件来连接ConnectionStringSqlConnetion

我必须在5台计算机具有不同的连接字符串运行项目,例如:

PC1)数据源= PCNAME \ SQLEXPRESS;初始目录= DBNEW;用户ID = SA;密码= 123;

PC2)Data Source = SERVER \ SQLEXPRESS; Initial Catalog = DB; User ID = sa; Password = 999;

[...]

目前我使用一个字符串,该项目

string connSQL = "Data Source=.\\SQLEXPRESS;Initial Catalog=DBNEW;Persist Security Info=True;User ID=sa;Password=123;"; 

,我不得不改变5倍于五台PC的不同连接内。

我试着反正与包含此

[oledb] 
; Everything after this line is an OLE DB initstring 
Data Source=PCNAME\SQLEXPRESS;Initial Catalog=DBNEW;Persist Security Info=True;User ID=sa;Password=123; 

但当然不工作的.udl文件

string connSQL = "Data Source=.\\SQLEXPRESS;AttachDbFile=C:\\connstring.udl"; 

连接。

任何想法的替代解决方案?

+1

我将创建一个登录页面,并使用参数例如 ''然后当你读取配置文件时,你想添加2个额外的参数,当你读取.config文件.. – MethodMan

+1

@MethodMan是的,我认为这是最好的选择。并研究你的答案,我设法找到一个妥协!请看下面的答案。非常感谢你的提示。 ;) – Wiccio

+0

不是一个问题只是高兴地指出你在正确的方向,并很高兴你听取了建议 – MethodMan

最后我找到了解决方案。也感谢MethodMan的评论我后来意识到你可以用外部文件编译connectionString,那就是MyProjectName.exe.config,它保存在和exe软件相同的目录下,具有与App.config相同的功能和设置。

因此,我所做的就是创建一个新的FormConn来手动输入数据的的connectionString,在MyProjectName.exe.config覆盖它们并将该文件链接到Form1中的SQL数据库管理。在代码下面。

Form1.cs中

using System.Configuration; 

public Form1() 
{ 
    //Check if a connectionString already exists 
    //To the first slot there is a system configuration so 1 = no custom connectionString 
    if (ConfigurationManager.ConnectionStrings.Count == 1) 
     { 
      FormConn frmConn = new FormConn(); 
      frmConn.ShowDialog(); 
      try 
      { 
       //Restart Form1 in the case connectionString has changed 
       Application.Restart(); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
     //Associates the custom connectionString to the string I will use in the code for operations that are connected to the DB. 
     StringSQL = ConfigurationManager.ConnectionStrings[1].ConnectionString; 
} 

FormConn。CS

FormConn (Design)

using System.Configuration; 
using System.Reflections; 

string appPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
     string appName = Environment.GetCommandLineArgs()[0]; 
     string configFile = System.IO.Path.Combine(appPath, appName + ".config"); 
     ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); 
     configFileMap.ExeConfigFilename = configFile; 
     System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); 
     var sezione = (ConnectionStringsSection)config.GetSection("connectionStrings");<br>sezione.ConnectionStrings["MyProjectName.Properties.Settings.MyDataSetConnectionString"].ConnectionString = "Data Source=" + txtDataSource.Text + ";Initial Catalog=" + txtInitialCatalog.Text + ";Persist Security Info=True;User ID=" + txtUserID.Text + ";Password=" + txtPassword.Text + ";"; 
     config.Save(); 
     ConfigurationManager.RefreshSection("connectionStrings"); 
     this.Close(); 

而这正是我有我的MyProjectName.exe.config内:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    </configSections> 
<connectionStrings> 
    <add name="MyProjectName.Properties.Settings.MyDataSetConnectionString" 
     connectionString="Data Source=MyPcName\SQLEXPRESS;Initial Catalog=DB-1;Persist Security Info=True;User ID=sa;Password=123psw321" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
</startup> 
</configuration> 

这为我工作!

+0

很明显,你可以手动直接从* MyProjectName.exe.config文件改变* connectionString *而不需要使用* FormConn *。 – Wiccio