如何动态更改ConnectionString类

时间:2017-02-14 16:48:44

标签: c# winforms

在我的项目中,我使用的是ConnectionString课程。我想在Winforms应用程序中动态更改ConnectionString类。

我想创建一个表单(frmServerCon),我可以在文本框中输入新值,例如数据源初始目录用户名密码。当我点击"保存"按钮,代码应该在ConnectionString类中保存这些新设置,并且在连接按钮上单击它应该在保存之前检查新连接值是否适用于SQL Server。

现在我的ConnectionString课程看起来像这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 7KProject
{
    class ConnectionString
    {
        public string DBConn = "Data Source=TCP/IP,PORT;Initial Catalog=DataBase;User ID=user;Password=*******";

    }
}

我无法找到任何解决方案。如果你可以帮助一些工作代码,那将是很棒的。对不起,我没有示例代码。

谢谢。

6 个答案:

答案 0 :(得分:0)

我不建议按照您的方式进行操作,但要构建代码,您应该使用属性而不是类中的字段。

所以这样更新你的课程:

public class ConnectionString
{
    public string DBConn { get; set; } = "your default string here";
}

然后在代码中的其他地方,你可以像这样获取或设置属性

var connectionString = new ConnectionString();
var dbConn = connectionString.DBConn; // get the value
connectionString.DBConn = "new string"; // set it with a new value

答案 1 :(得分:0)

如果要单独编辑值,请单独存储它们。像这样:

public class ConnectionString
{
    public string DataSource { get; set; }
    public string InitialCatalog { get; set; }
    public string UserID { get; set; }
    public string Password { get; set; }

    public ConnectionString(string dataSource, string initialCatalog, string userID, string password)
    {
        DataSource = dataSource;
        InitialCatalog = initialCatalog;
        // etc.
    }

    public override string ToString()
    {
        return string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", DataSource, InitialCatalog, UserID, Password);
    }
}

然后,您可以使用所需的值创建ConnectionString对象,根据需要修改这些值,并且只要您希望从该对象生成的连接字符串,只需在实例上调用.ToString()对象。

基本上,只要你有一个包含多个值的字符串,就可以抵制修改字符串来操纵这些值的诱惑。如果您有单独的值,那么您有单独的变量。将单独的东西分开。只在需要时构建生成的字符串。

答案 2 :(得分:0)

创建配置文件以存储数据库凭据。应用程序启动时读取凭据并构建连接字符串。存储它并用于创建dbContext。使用表单更改配置文件。

答案 3 :(得分:0)

您可以创建用户字符串设置:

属性>设定:

Name          Type    Scope  Value
MyConnection  string  User   Data Source=TCP/IP,PORT;Initial Catalog=DataBase;User ID=user;Password=*******"

阅读使用:

string MyConn = Properties.Settings.Default.MyConnection;

使用保存:

Properties.Settings.Default.MyConnection = "...";
Properties.Settings.Default.Save();

不幸的是,(ConnectionString)类型是Application-scope(只读),因此请使用User-scoped" string"代替。此外,如果您要存储密码,最好加密/解密该字符串。

答案 4 :(得分:0)

我建议使用NuGet包Microsoft Data Connection Dialog。它对我有用。

答案 5 :(得分:0)

我以其他方式解决了这个问题。我希望它可以帮助其他人寻找这个,我想要检查它是否有任何改善,请建议。

我正在调用app.config connectionString

<connectionStrings>
    <add name="DBConn" connectionString="Data Source=Servername;Network Library = DBMSSOCN;Initial Catalog=database;User ID=user;Password=password" providerName="System.Data.SqlClient"/>
  </connectionStrings>

进入我的ConnectionString类。

public class ConnectionString
    {
        public string DBConn = ConfigurationManager.ConnectionStrings["DBConn"].ToString();
    }

在后端我创建了一个表单来添加新的服务器连接信息,以便为app.config connectionString添加新值。 SvrConfig表格

using System;
using System.Windows.Forms;
using System.Configuration;
using System.Reflection;

namespace B4_HRM_System
{
    public partial class SvrConfig : Form
    {
        public SvrConfig()
        {
            InitializeComponent();
        }

        private void btnsave_Click(object sender, EventArgs e)
        {
            try

            {

                if (txtserver.Text == "")
                {
                    MessageBox.Show("Please enter Server Name.", "7KProject", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtserver.Focus();
                    return;
                }



                if (txtdb.Text == "")
                {
                    MessageBox.Show("Please enter Database.", "7KProject", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtdb.Focus();
                    return;
                }

                if (txtuser.Text == "")
                {
                    MessageBox.Show("Please enter Username.", "7KProject", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtuser.Focus();
                    return;
                }



                if (txtpass.Text == "")
                {
                    MessageBox.Show("Please enter Password.", "7KProject", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtpass.Focus();
                    return;
                }

                string DBConn = "Data Source={0};Initial Catalog={1};User ID={2};Password={3}";
                DBConn = string.Format(DBConn, txtserver.Text, txtdb.Text, txtuser.Text, txtpass.Text);
                Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                ConnectionStringsSection connSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
                connSection.ConnectionStrings["DBConn"].ConnectionString = DBConn;
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("AppSettings");
                MessageBox.Show("Successfully Completed", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message, ex.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        private void btnexit_Click(object sender, EventArgs e)
        {
            this.Hide();
            b4login frmb4login = new b4login();
            frmb4login.Show();
       }

        }
}

但每次保存connectionString时我都要重启应用程序。当我在显示登录表单之前关闭app.config文件中的更新/刷新connectionString时,是否有任何方式或改进SvrConfig表单,所以我不必重新启动应用程序。