using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Text; using System.Windows.Forms; using ICSharpCode.Core; using ICSharpCode.Data.Core.Interfaces; using ICSharpCode.Data.Core.DatabaseObjects; using Mesnac.Basic; using Mesnac.Gui.Edit.Global; using Mesnac.Gui.Edit.Common; using Mesnac.Gui.Edit.ViewContent; using Mesnac.Gui.Edit.Pad; namespace Mesnac.Gui.Edit.Dialog { public partial class FrmNewDataSource : Form { private string _dataSourceName; private DataSourceItem _dataSourceItem = null; private string caption = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_Caption")); private string msg = String.Empty; public FrmNewDataSource() { InitializeComponent(); this.InitUIMethod(); this.InitMethod(); } public FrmNewDataSource(string dataSourceName) { this._dataSourceName = dataSourceName; InitializeComponent(); this.InitUIMethod(); this.InitMethod2(); } /// /// 初始化界面元素 /// public void InitUIMethod() { this.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Text")); //数据源向导 this.label1.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label1")); //数据源名称 this.label2.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label2")); //数据库驱动 this.label3.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label3")); //服务器 this.label4.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label4")); //用户名 this.label5.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label5")); //密码 this.label6.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label6")); //数据库 this.label7.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_label7")); //连接超时 this.btnTestConnect.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_btnTestConnect")); //测试连接 this.btnOk.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_btnOK")); this.btnCancel.Text = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_btnCancel")); } /// /// 新建时,初始化的方法 /// public void InitMethod() { //获取默认数据源名称 string dataSourceName = DataSourceFactory.Instance.GetNextDataSourceName(); this.txtDataSourceName.Text = dataSourceName; //加载数据驱动类型 this.cmbDataDrivers.DataSource = DatabaseDriver.DatabaseDrivers; } /// /// 修改时,初始化的方法 /// public void InitMethod2() { this._dataSourceItem = DataSourceFactory.Instance.DataSources[this._dataSourceName]; this.txtDataSourceName.Text = this._dataSourceName; this.txtDataSourceName.ReadOnly = true; //加载数据驱动类型 this.cmbDataDrivers.DataSource = DatabaseDriver.DatabaseDrivers; if (this._dataSourceItem != null) { foreach (IDatabaseDriver driver in this.cmbDataDrivers.Items) { if (driver.Name == this._dataSourceItem.Driver) { this.cmbDataDrivers.SelectedItem = driver; break; } } this.txtServer.Text = this._dataSourceItem.Server; this.txtUserName.Text = this._dataSourceItem.UserName; this.txtPassword.Text = this._dataSourceItem.Password; this.cmbDataBase.Text = this._dataSourceItem.Database; this.txtConnectionTimeout.Text = this._dataSourceItem.ConnectionTimeout.ToString(); } } /// /// 验证窗体条件 /// /// 验证成功返回true,否则返回false private bool ValidateForm() { if (String.IsNullOrEmpty(this.txtDataSourceName.Text)) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg1")); //请输入数据源名称! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.txtDataSourceName.Focus(); return false; } if (this.cmbDataDrivers.SelectedIndex == -1) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg2")); //请选择数据源类型! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.cmbDataDrivers.Focus(); return false; } if (String.IsNullOrEmpty(this.txtServer.Text)) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg3")); //请输入服务器! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.txtServer.Focus(); return false; } if (String.IsNullOrEmpty(this.txtUserName.Text)) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg4")); //请输入用户名! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.txtUserName.Focus(); return false; } //if (String.IsNullOrEmpty(this.txtPassword.Text)) //{ // this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg5")); //请输入密码! // MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); // this.txtPassword.Focus(); // return false; //} if (String.IsNullOrEmpty(this.txtConnectionTimeout.Text)) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg12")); //请输入连接超时时间,单位(秒)! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.txtConnectionTimeout.Focus(); return false; } ///判断连接超时是否为数字 bool flag = true; string strConnectionTimeOut = this.txtConnectionTimeout.Text.Trim(); foreach (char c in strConnectionTimeOut) { if (!Char.IsDigit(c)) { flag = false; break; } } if (flag == false) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg13")); //连接超时必须为整数,单位(秒)! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.txtConnectionTimeout.Focus(); return false; } if (String.IsNullOrEmpty(this._dataSourceName)) { if (DataSourceFactory.Instance.IsExists(this.txtDataSourceName.Text)) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg6")); //数据源已存在,请更改数据源名称! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.txtDataSourceName.Focus(); return false; } } return true; } /// /// 测试连接 /// /// /// private void btnTestConnect_Click(object sender, EventArgs e) { //验证 if (!this.ValidateForm()) { return; } try { IDatabaseDriver driver = this.cmbDataDrivers.SelectedItem as IDatabaseDriver; if (driver != null) { IDatasource datasource = driver.CreateNewIDatasource( this.txtServer.Text , this.txtUserName.Text , this.txtPassword.Text ); driver.PopulateDatabases(datasource); if (datasource.Databases != null) { this.cmbDataBase.DataSource = datasource.Databases; if (!String.IsNullOrEmpty(this._dataSourceName)) { foreach (IDatabase db in this.cmbDataBase.Items) { if (db.ToString() == this._dataSourceItem.Database) { this.cmbDataBase.SelectedItem = db; break; } } } this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg7")); //连接测试成功,请选择数据库创建数据源! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } else { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg8")); //连接测试失败,请检查网络连接状况! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg9")); //连接测试失败,原因:缺少数据驱动! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg10")); //连接测试失败,原因:{0}! this.msg = String.Format(this.msg, ex.Message); MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void btnOk_Click(object sender, EventArgs e) { //验证 if (!this.ValidateForm()) { return; } if (this.cmbDataBase.SelectedIndex == -1) { this.msg = StringParser.Parse(ResourceService.GetString("Mesnac_Dialog_FrmNewDataSource_Msg11")); //请选择数据库! MessageBox.Show(this.msg, this.caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this.cmbDataBase.Focus(); return; } DataSourceItem dataSourceItem = new DataSourceItem(); dataSourceItem.Name = this.txtDataSourceName.Text.Trim(); IDatabaseDriver driver = this.cmbDataDrivers.SelectedItem as IDatabaseDriver; dataSourceItem.Driver = driver.Name; dataSourceItem.DriverAssembly = driver.GetType().Assembly.FullName; dataSourceItem.DriverClass = driver.GetType().FullName; dataSourceItem.Server = this.txtServer.Text.Trim(); dataSourceItem.UserName = this.txtUserName.Text.Trim(); dataSourceItem.Password = this.txtPassword.Text.Trim(); IDatabase database = this.cmbDataBase.SelectedItem as IDatabase; dataSourceItem.Database = database.Name; int intConnectionTimeout = 5; int.TryParse(this.txtConnectionTimeout.Text, out intConnectionTimeout); dataSourceItem.ConnectionTimeout = intConnectionTimeout; dataSourceItem.DataSourceClass = database.GetType().FullName; if (!String.IsNullOrEmpty(this._dataSourceName)) { //修改 DataSourceFactory.Instance.Modify(dataSourceItem.Name, dataSourceItem); } else { //添加 DataSourceFactory.Instance.Add(dataSourceItem.Name, dataSourceItem); } DisplayUtil.SaveProjectDataSource(); //保存至文件 this.DialogResult = System.Windows.Forms.DialogResult.OK; } private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = System.Windows.Forms.DialogResult.Cancel; } } }