要实现的功能效果图如下:因为我们要测试数据是从输入框获得的,所以,我们的连接字符串不是写死在应用程序中的。下面我就详细介绍一下。
首先,我们要找到 项目下——》Properties->Setiings.setting
新建一个连接字符串名称,类型为 string,重点重点 范围一定要设置为 用户,这样的话我们才可以重写base.在继承的基础上覆盖上次的连接字符串。 如果我们不设置为用户而设置为应用程序获的话,将会不可改变连接字符串。
在EF框架中,我们每new一个 DataContext便会有一个数据库表的映射。它的逻辑是,我们new的时候(此例子 datacontext是 StockManageDataContext)会执行
public StockManageDataContext() : base(global::DataModal.Properties.Settings.Default.StockManageSystemConnectionString, mappingSource) { Console.WriteLine(global::DataModal.Properties.Settings.Default.StockManageSystemConnectionString); OnCreated(); } public StockManageDataContext(string connection) : base(connection, mappingSource) { OnCreated(); } public StockManageDataContext(System.Data.IDbConnection connection) : base(connection, mappingSource) { OnCreated(); } public StockManageDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public StockManageDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); }
global::DataModal.Properties.Settings.Default.StockManageSystemConnectionString, mappingSource)这个代码中就是可以覆盖的连接字符串,我们只需要更改他就行。
连接测试代码来了来了
public bool ConnectionTest() { //获得连接字符串 string ConnectionString = "Data Source=" + Server.Text + ";Initial Catalog=" + Sqlname.Text + ";Persist Security Info=True;User ID=" + Account.Text + ";Password=" + Pass.Text; SqlConnection _SqlConnection = new SqlConnection(ConnectionString); try { _SqlConnection.Open(); SqlCommand sqlcmd = _SqlConnection.CreateCommand(); sqlcmd.CommandText = "select top 10 * from ProductInfo;"; //如果可以连接成功则 保存数据库连接字符串 DataModal.Properties.Settings.Default.StockManageSystemConnectionString = ConnectionString; DataModal.Properties.Settings.Default.Save();//使用Save方法保存更改 n MessageBox.Show("测试连接正常", "恭喜"); return true; } catch (Exception ex) { MessageBox.Show("不能连接数据库,请重新设置", "警告"); return false; } finally { _SqlConnection.Close(); } }
这样就可以进行测试了,在每次登陆之前都要验证一遍。
还有一个比较人性化的问题,就是用户希望在每次登陆之前都有几个数据库连接默认的值,毕竟大家不愿意去动手输入那么多数据,但是又不可以直接写死在输入框(这样太low),所以,既然之前我们可以给连接字符串赋值,我们也可以获取上次的连接字符串,拆分,然后在窗体初始化时默认加载到窗体输入框嘛。
代码:(根据键值对获得,)
public void Innital() { string connect = DataModal.Properties.Settings.Default.StockManageSystemConnectionString; Dictionary<string, string> dictionary = connect.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToDictionary(x => x.Split('=')[0], x => x.Split('=')[1]); List<string> test = new List<string>(dictionary.Values); for (int i = 0; i < test.Count; i++) { Server.Text = test[0]; Sqlname.Text = test[1]; Pass.Text = test[4]; Account.Text = test[3]; } }