在我的项目中,我使用的是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=*******";
}
}
我无法找到任何解决方案。如果你可以帮助一些工作代码,那将是很棒的。对不起,我没有示例代码。
谢谢。
答案 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表单,所以我不必重新启动应用程序。