//[ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml, XmlSerializeString = true)] public Apq.STReturn Dinner_Restaurant_List() { Apq.STReturn stReturn = new Apq.STReturn(); DinnerSession ApqSession = new DinnerSession(Session); if (!CheckLoginPage.CheckAdmin(ref stReturn, ApqSession)) { return stReturn; } DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Restaurant_List"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); stReturn.FNReturn = ds.Tables[0]; sda.Dispose(); SqlConn.Close(); } return stReturn; }
//[ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml, XmlSerializeString = true)] public Apq.STReturn Dinner_Admin_EmDinner_ListPager(int start, int limit, DateTime BTime, DateTime ETime, long RestID, bool IsDoDinner) { int Pager_Page = start / limit; int Pager_PageSize = limit; Apq.STReturn stReturn = new Apq.STReturn(); DinnerSession ApqSession = new DinnerSession(Session); if (!CheckLoginPage.CheckAdmin(ref stReturn, ApqSession)) { return(stReturn); } DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Admin_EmDinner_ListPager"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); //dch.AddParameter("ExMsg", stReturn.ExMsg, DbType.String, -1); dch.AddParameter("Pager_Page", Pager_Page, DbType.Int32); dch.AddParameter("Pager_PageSize", Pager_PageSize); dch.AddParameter("Pager_RowCount", 0, DbType.Int32); dch.AddParameter("BTime", BTime); dch.AddParameter("ETime", ETime); dch.AddParameter("RestID", RestID); dch.AddParameter("State", IsDoDinner); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; //sda.SelectCommand.Parameters["ExMsg"].Direction = ParameterDirection.InputOutput; sda.SelectCommand.Parameters["Pager_RowCount"].Direction = ParameterDirection.InputOutput; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); //stReturn.ExMsg = sda.SelectCommand.Parameters["ExMsg"].Value.ToString(); stReturn.FNReturn = ds.Tables[0]; stReturn.POuts.Add(sda.SelectCommand.Parameters["Pager_Page"].Value); stReturn.POuts.Add(sda.SelectCommand.Parameters["Pager_RowCount"].Value); sda.Dispose(); SqlConn.Close(); } return(stReturn); }
/// <summary> /// 下载文件 /// </summary> public void FileDow(string DBFullName, string FullName) { string FileName = System.IO.Path.GetFileName(FullName); string CFolder = System.IO.Path.GetDirectoryName(FullName); string DBFolder = System.IO.Path.GetDirectoryName(DBFullName); // 准备本地目录 if (!System.IO.Directory.Exists(CFolder)) { System.IO.Directory.CreateDirectory(CFolder); } // 1.写入数据库 Apq.Data.Common.DbConnectionHelper.Open(Connection); System.Data.Common.DbCommand sqlCmd = Connection.CreateCommand(); sqlCmd.CommandText = "Apq_FileTrans_Insert_ADO"; sqlCmd.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper cmdHelper = new Apq.Data.Common.DbCommandHelper(sqlCmd); cmdHelper.AddParameter("@FullName", DBFullName); cmdHelper.AddParameter("@CFolder", CFolder); cmdHelper.AddParameter("@ID", 0); sqlCmd.Parameters["@ID"].Direction = ParameterDirection.InputOutput; sqlCmd.ExecuteNonQuery(); int ID = Apq.Convert.ChangeType <int>(sqlCmd.Parameters["@ID"].Value); // 2.读取到本地 DataSet ds = new DataSet(); Apq.Data.Common.DbConnectionHelper connHelper = new Apq.Data.Common.DbConnectionHelper(Connection); DbDataAdapter da = connHelper.CreateAdapter(); da.SelectCommand.CommandText = "Apq_FileTrans_List"; da.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper daHelper = new Apq.Data.Common.DbCommandHelper(da.SelectCommand); daHelper.AddParameter("@ID", ID); da.Fill(ds); // 3.保存文件 if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { byte[] bFile = Apq.Convert.ChangeType <byte[]>(ds.Tables[0].Rows[0]["FileStream"]); System.IO.FileStream fs = new System.IO.FileStream(FullName, System.IO.FileMode.Create); fs.Write(bFile, 0, bFile.Length); fs.Flush(); fs.Close(); } // 4.删除数据库行 da.SelectCommand.CommandText = "Apq_FileTrans_Delete"; da.SelectCommand.ExecuteNonQuery(); }
/// <summary> /// 执行登录存储过程 /// </summary> /// <param name="LoginName">用户名</param> /// <param name="binLoginPwd">密码</param> /// <returns></returns> private Apq.STReturn DBLogin(string LoginName, byte[] binLoginPwd) { Apq.STReturn stReturn = new Apq.STReturn(); DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Login"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); dch.AddParameter("ExMsg", stReturn.ExMsg, DbType.String, -1); dch.AddParameter("LoginName", LoginName); dch.AddParameter("LoginPwd", binLoginPwd); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; sda.SelectCommand.Parameters["ExMsg"].Direction = ParameterDirection.InputOutput; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); stReturn.ExMsg = sda.SelectCommand.Parameters["ExMsg"].Value.ToString(); if (ds.Tables.Count > 0) { stReturn.FNReturn = ds.Tables[0]; } sda.Dispose(); SqlConn.Close(); } // 返回调用者 string SqlLoginPwd = Apq.Data.SqlClient.Common.ConvertToSqlON(binLoginPwd); if (stReturn.NReturn > 0 && ds.Tables[0].Rows.Count > 0) { stReturn.NReturn = 1; stReturn.FNReturn = ds.Tables[0]; stReturn.POuts.Add(SqlLoginPwd); } return(stReturn); }
//[ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml, XmlSerializeString = true)] public Apq.STReturn Dinner_Stat_EmDinner_Food(DateTime BTime, DateTime ETime, bool State) { Apq.STReturn stReturn = new Apq.STReturn(); DinnerSession ApqSession = new DinnerSession(Session); if (!CheckLoginPage.CheckAdmin(ref stReturn, ApqSession)) { return(stReturn); } DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Stat_EmDinner_Food"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); //dch.AddParameter("ExMsg", stReturn.ExMsg, DbType.String, -1); dch.AddParameter("BTime", BTime); dch.AddParameter("ETime", ETime); dch.AddParameter("State", State); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; //sda.SelectCommand.Parameters["ExMsg"].Direction = ParameterDirection.InputOutput; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); //stReturn.ExMsg = sda.SelectCommand.Parameters["ExMsg"].Value.ToString(); stReturn.FNReturn = ds.Tables[0]; sda.Dispose(); SqlConn.Close(); } return(stReturn); }
//[ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml, XmlSerializeString = true)] public Apq.STReturn Dinner_Restaurant_List() { Apq.STReturn stReturn = new Apq.STReturn(); DinnerSession ApqSession = new DinnerSession(Session); if (!CheckLoginPage.CheckLogin(ref stReturn, ApqSession)) { return(stReturn); } DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Restaurant_List"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); stReturn.FNReturn = ds.Tables[0]; sda.Dispose(); SqlConn.Close(); } return(stReturn); }
/// <summary> /// 下载文件 /// </summary> public void FileDow(string DBFullName, string FullName) { string FileName = System.IO.Path.GetFileName(FullName); string CFolder = System.IO.Path.GetDirectoryName(FullName); string DBFolder = System.IO.Path.GetDirectoryName(DBFullName); // 准备本地目录 if (!System.IO.Directory.Exists(CFolder)) { System.IO.Directory.CreateDirectory(CFolder); } // 1.写入数据库 Apq.Data.Common.DbConnectionHelper.Open(Connection); System.Data.Common.DbCommand sqlCmd = Connection.CreateCommand(); sqlCmd.CommandText = "Apq_FileTrans_Insert_ADO"; sqlCmd.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper cmdHelper = new Apq.Data.Common.DbCommandHelper(sqlCmd); cmdHelper.AddParameter("@FullName", DBFullName); cmdHelper.AddParameter("@CFolder", CFolder); cmdHelper.AddParameter("@ID", 0); sqlCmd.Parameters["@ID"].Direction = ParameterDirection.InputOutput; sqlCmd.ExecuteNonQuery(); int ID = Apq.Convert.ChangeType<int>(sqlCmd.Parameters["@ID"].Value); // 2.读取到本地 DataSet ds = new DataSet(); Apq.Data.Common.DbConnectionHelper connHelper = new Apq.Data.Common.DbConnectionHelper(Connection); DbDataAdapter da = connHelper.CreateAdapter(); da.SelectCommand.CommandText = "Apq_FileTrans_List"; da.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper daHelper = new Apq.Data.Common.DbCommandHelper(da.SelectCommand); daHelper.AddParameter("@ID", ID); da.Fill(ds); // 3.保存文件 if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { byte[] bFile = Apq.Convert.ChangeType<byte[]>(ds.Tables[0].Rows[0]["FileStream"]); System.IO.FileStream fs = new System.IO.FileStream(FullName, System.IO.FileMode.Create); fs.Write(bFile, 0, bFile.Length); fs.Flush(); fs.Close(); } // 4.删除数据库行 da.SelectCommand.CommandText = "Apq_FileTrans_Delete"; da.SelectCommand.ExecuteNonQuery(); }
/// <summary> /// 到一个服务器执行并显示结果[多线程入口] /// </summary> /// <param name="ServerID"></param> private void Worker_Start(object DBIID) { object rtLock0 = GetLock("0"); object rtLock = GetLock(DBIID.ToString()); DataView dvDBI = new DataView(_dsDBC.DBI); dvDBI.RowFilter = "DBIID = " + DBIID; DataRowView drv = dvDBI[0]; DataSet dsTabPage = new DataSet(drv["DBIName"].ToString()); dsTabPage.ExtendedProperties.Add("DBIID", DBIID); // 0.结果DataSet准备 int nbliResult_ItemIndex = Apq.Convert.ChangeType <int>(Apq.Windows.Controls.ControlExtension.GetControlValues(this, "bliResult.ItemIndex")); if (nbliResult_ItemIndex == 0) //分列 { lock (rtLock0) { Apq.Windows.Delegates.Action_UI <ToolStripLabel>(this, tslDBName, delegate(ToolStripLabel ctrl) { lstds.Add(dsTabPage); }); } } else //合并 { dsTabPage = lstds[0]; } DbConnection sc = null; try { sc = Apq.DBC.Common.CreateDBIConnection(drv["DBIName"].ToString(), ref sc); Apq.Data.Common.DbConnectionHelper dch = new Apq.Data.Common.DbConnectionHelper(sc); DbDataAdapter sda = dch.CreateAdapter(); sda.SelectCommand.CommandTimeout = 86400; //3600*24 // 1.设置数据库 Apq.Data.Common.DbConnectionHelper.Open(sc); string DBName = Apq.Convert.ChangeType <string>(Apq.Windows.Controls.ControlExtension.GetControlValues(this, "tscbDBName.Text")); sc.ChangeDatabase(DBName); //更改数据库后再启用消息事件可防止执行到其它数据库 //sc.StatisticsEnabled = true;// 启用统计 //sc.FireInfoMessageEventOnUserErrors = true;// 启用消息事件 //sc.InfoMessage += new SqlInfoMessageEventHandler(rt.sc_InfoMessage); // 2.准备语句 string[] arySql = Apq.Windows.Controls.ControlExtension.GetControlValues(this, "arySql") as string[]; // 3.执行语句 if (arySql != null) { int TableCount = 0; for (int i = 0; i < arySql.Length; i++) { DataSet ds1 = new DataSet(); sda.SelectCommand.CommandText = arySql[i]; sda.Fill(ds1); // 连接对象启用消息事件后一般不会引发异常 foreach (DataTable ds1Table in ds1.Tables) { ds1Table.TableName = "Apq_Table" + TableCount++; dsTabPage.Tables.Add(ds1Table.Copy()); } } } } catch (ThreadAbortException) { } //catch (DbException ex) //{ //} catch (Exception ex) { // 标记本服执行出错 lock (rtLock) { Apq.Windows.Delegates.Action_UI <ToolStripLabel>(this, tslDBName, delegate(ToolStripLabel ctrl) { ErrList_XSD.ErrListRow drErrList = _dsErr.ErrList.NewErrListRow(); drErrList.DBIID = (int)DBIID; drErrList["__DBIName"] = drv["DBIName"]; drErrList.s = ex.Message; _dsErr.ErrList.Rows.Add(drErrList); drv["Err"] = true; }); } Apq.GlobalObject.ApqLog.Warn(drv["DBIName"], ex); } finally { Apq.Data.Common.DbConnectionHelper.Close(sc); lock (rtLock0) { Apq.Windows.Delegates.Action_UI <ToolStripLabel>(this, tslDBName, delegate(ToolStripLabel ctrl) { if (SqlEdit.tspb.Value < SqlEdit.tspb.Maximum) { SqlEdit.tspb.Value++; if (SqlEdit.tspb.Value == SqlEdit.tspb.Maximum) { _dsDBC.DBI.AcceptChanges(); _dsErr.ErrList.AcceptChanges(); SqlEdit.tsslStatus.Text = "已全部完成"; tsbCancel.Enabled = false; tsbExec.Enabled = true; DataView dvErr = new DataView(_dsDBC.DBI); dvErr.RowFilter = "Err = 1"; // 标记本服执行出错 if (dvErr.Count > 0) { SqlEdit.tsslStatus.Text += ",但有错误发生,请查看"; } } } }); } } }
//[ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml, XmlSerializeString = true)] public Apq.STReturn Dinner_EmDinner_ListPager(int start, int limit) { int Pager_Page = start / limit; int Pager_PageSize = limit; Apq.STReturn stReturn = new Apq.STReturn(); DinnerSession ApqSession = new DinnerSession(Session); if (!CheckLoginPage.CheckLogin(ref stReturn, ApqSession)) { return stReturn; } DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_EmDinner_ListPager"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); //dch.AddParameter("ExMsg", stReturn.ExMsg, DbType.String, -1); dch.AddParameter("Pager_Page", Pager_Page, DbType.Int32); dch.AddParameter("Pager_PageSize", Pager_PageSize); dch.AddParameter("Pager_RowCount", 0, DbType.Int32); dch.AddParameter("EmID", ApqSession.Employee.EmID); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; //sda.SelectCommand.Parameters["ExMsg"].Direction = ParameterDirection.InputOutput; sda.SelectCommand.Parameters["Pager_RowCount"].Direction = ParameterDirection.InputOutput; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); //stReturn.ExMsg = sda.SelectCommand.Parameters["ExMsg"].Value.ToString(); stReturn.FNReturn = ds.Tables[0]; stReturn.POuts.Add(sda.SelectCommand.Parameters["Pager_Page"].Value); stReturn.POuts.Add(sda.SelectCommand.Parameters["Pager_RowCount"].Value); sda.Dispose(); SqlConn.Close(); } return stReturn; }
/// <summary> /// 执行登录存储过程 /// </summary> /// <param name="LoginName">用户名</param> /// <param name="binLoginPwd">密码</param> /// <returns></returns> private Apq.STReturn DBLogin(string LoginName, byte[] binLoginPwd) { Apq.STReturn stReturn = new Apq.STReturn(); DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Login"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); dch.AddParameter("ExMsg", stReturn.ExMsg, DbType.String, -1); dch.AddParameter("LoginName", LoginName); dch.AddParameter("LoginPwd", binLoginPwd); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; sda.SelectCommand.Parameters["ExMsg"].Direction = ParameterDirection.InputOutput; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); stReturn.ExMsg = sda.SelectCommand.Parameters["ExMsg"].Value.ToString(); if (ds.Tables.Count > 0) { stReturn.FNReturn = ds.Tables[0]; } sda.Dispose(); SqlConn.Close(); } // 返回调用者 string SqlLoginPwd = Apq.Data.SqlClient.Common.ConvertToSqlON(binLoginPwd); if (stReturn.NReturn > 0 && ds.Tables[0].Rows.Count > 0) { stReturn.NReturn = 1; stReturn.FNReturn = ds.Tables[0]; stReturn.POuts.Add(SqlLoginPwd); } return stReturn; }
//[ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml, XmlSerializeString = true)] public Apq.STReturn Dinner_Stat_EmDinner_Food(DateTime BTime, DateTime ETime, bool State) { Apq.STReturn stReturn = new Apq.STReturn(); DinnerSession ApqSession = new DinnerSession(Session); if (!CheckLoginPage.CheckAdmin(ref stReturn, ApqSession)) { return stReturn; } DataSet ds = new DataSet(); DbConnection SqlConn = null; using (SqlConn = Apq.DBC.Common.CreateDBConnection("Dinner", ref SqlConn)) { Apq.Data.Common.DbConnectionHelper dbch = new Apq.Data.Common.DbConnectionHelper(SqlConn); DbDataAdapter sda = dbch.CreateAdapter(); sda.SelectCommand.CommandText = "dbo.Dinner_Stat_EmDinner_Food"; sda.SelectCommand.CommandType = CommandType.StoredProcedure; Apq.Data.Common.DbCommandHelper dch = new Apq.Data.Common.DbCommandHelper(sda.SelectCommand); dch.AddParameter("rtn", 0, DbType.Int32); //dch.AddParameter("ExMsg", stReturn.ExMsg, DbType.String, -1); dch.AddParameter("BTime", BTime); dch.AddParameter("ETime", ETime); dch.AddParameter("State", State); sda.SelectCommand.Parameters["rtn"].Direction = ParameterDirection.ReturnValue; //sda.SelectCommand.Parameters["ExMsg"].Direction = ParameterDirection.InputOutput; SqlConn.Open(); sda.Fill(ds); stReturn.NReturn = System.Convert.ToInt32(sda.SelectCommand.Parameters["rtn"].Value); //stReturn.ExMsg = sda.SelectCommand.Parameters["ExMsg"].Value.ToString(); stReturn.FNReturn = ds.Tables[0]; sda.Dispose(); SqlConn.Close(); } return stReturn; }
// 生成初始数据语句并保存到文件 private void tsmiData_Click(object sender, EventArgs e) { try { _DBConnection.Open(); } catch { MessageBox.Show(this, Apq.GlobalObject.UILang["数据库未连接或已断开"]); return; } finally { Apq.Data.Common.DbConnectionHelper.Close(_DBConnection); } Apq.Data.Common.DbConnectionHelper dch = new Apq.Data.Common.DbConnectionHelper(_DBConnection); StringBuilder sb = new StringBuilder(); sfdMeta.InitialDirectory = GlobalObject.XmlConfigChain[this.GetType(), "sfdMeta_InitialDirectory"]; if (sfdMeta.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { GlobalObject.XmlConfigChain[this.GetType(), "sfdMeta_InitialDirectory"] = Path.GetDirectoryName(sfdMeta.FileName); if (tscbSqlProduct.SelectedIndex == 0) { #region MySql #region 初始数据文件头 // 为列表中已选中的表生成初始化语句,语句功能:完成将数据库中的数据插入到对应的表中,按主键添加 sb.Append(string.Format(@" USE `{0}`; -- 为INSERT准备临时表 DROP TABLE IF EXISTS `_Apq_Ins`; CREATE TEMPORARY TABLE `_Apq_Ins` ( `_ID` INT(11) DEFAULT NULL ) ENGINE = HEAP; INSERT INTO `_Apq_Ins`(`_ID`) VALUES (1); -- 初始数据", _DBConnection.Database) ); #endregion foreach (SqlGen_XSD.MetaRow dr in _xsd.Meta.Rows) { if (dr._CheckState == 0 || dr.ObjectType != 1) { continue; } SqlGen_XSD.dbv_tableRow drT = _xsd.dbv_table.FindByTableName(dr.SchemaName, dr.ObjectName); SqlGen_XSD.dbv_columnRow[] drCs = drT.GetChildRows("FK_dbv_table_dbv_column") as SqlGen_XSD.dbv_columnRow[]; #region 数据Key /* 1.dbv_table_key已有指定数据Key时,使用此值 2.否则查找其它表中的存在同名主键列(2列以上),看作关联型数据 3.否则将主键作为对象型数据Key,加入到WHERE条件中 4.否则将自增列作为对象型数据Key,加入到WHERE条件中 */ List<SqlGen_XSD.dbv_columnRow> colKeys = new List<SqlGen_XSD.dbv_columnRow>(); if (colKeys.Count == 0) { SqlGen_XSD.dbv_table_keyRow drTK = _xsd.dbv_table_key.FindBySchemaNameTableName(dr.SchemaName, dr.ObjectName); if (drTK != null) { string[] aryDataKeys = drTK.PrimaryKeys.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < aryDataKeys.Length; i++) { aryDataKeys[i] = Apq.Data.MySqlClient.Common.ConvertToSqlON(aryDataKeys[i]); } SqlGen_XSD.dbv_columnRow[] drDataKeys = _xsd.dbv_column.Select(string.Format("SchemaName = {0} AND TableName = {1} AND ColName IN ({2})", Apq.Data.MySqlClient.Common.ConvertToSqlON(dr.SchemaName), Apq.Data.MySqlClient.Common.ConvertToSqlON(dr.ObjectName), string.Join(",", aryDataKeys))) as SqlGen_XSD.dbv_columnRow[]; colKeys.AddRange(drDataKeys); } } if (colKeys.Count == 0) { foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { DataRow[] aryTemp = _xsd.dbv_column.Select(string.Format("TableName <> {0} AND ColName = {1} AND COLUMN_KEY = 'PRI'", Apq.Data.MySqlClient.Common.ConvertToSqlON(drC.TableName), Apq.Data.MySqlClient.Common.ConvertToSqlON(drC.ColName))); if (aryTemp != null && aryTemp.Length > 0) { colKeys.Add(drC); } } if (colKeys.Count < 2) { colKeys.Clear(); } } if (colKeys.Count == 0) { foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { if ("PRI".Equals(drC.COLUMN_KEY, StringComparison.OrdinalIgnoreCase)) { colKeys.Add(drC); } } } if (colKeys.Count == 0) { foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { if (drC.is_auto_increment) { colKeys.Add(drC); } } } #endregion #region 输出列 string strCols = string.Empty; List<SqlGen_XSD.dbv_columnRow> colInserts = new List<SqlGen_XSD.dbv_columnRow>(); foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { if (drC.is_auto_increment && !colKeys.Contains(drC)) { // 跳过无意义的自增列 continue; } colInserts.Add(drC); strCols += ",`" + drC.ColName + "`"; } #endregion #region WHERE语句(替换模式) string strWhereTmp = string.Empty;// WHERE 条件 if (colKeys.Count > 0) { for (int i = 0; i < colKeys.Count; i++) { strWhereTmp += string.Format(" AND `{0}`", colKeys[i].ColName) + " = {" + i + "}"; } if (strWhereTmp.Length > 1) { strWhereTmp = " WHERE" + strWhereTmp.Substring(4); } } else { string strExMsg = string.Format("无法生成条件的表:{0},请检查其数据Key设置、关联列名、主键、自增列。", drT.TableName); ErrList.AddRow(DateTime.Now, 4, 16, Apq.GlobalObject.UILang["生成表失败"], strExMsg); continue; } #endregion if (strCols.Length > 1) { #region 表说明 strCols = strCols.Substring(1); sb.Append(string.Format(@" -- 表:`{0}`", drT.TableName)); #endregion #region 分页查询并输出一个表 long CRow = 0, PageSize = 1000; while (true) { #region 从数据库读取一页 DataSet ds = new DataSet(); DbDataAdapter dda = dch.CreateAdapter(string.Format(@"SELECT * FROM {0} LIMIT {1},{2};", drT.TableName, CRow, PageSize)); int RowCount = dda.Fill(ds); #endregion if (RowCount > 0) { foreach (DataRow drData in ds.Tables[0].Rows) { #region 输出一行 List<object> objWhere = new List<object>(); for (int i = 0; i < colKeys.Count; i++) { objWhere.Add(Apq.Data.MySqlClient.Common.ConvertToSqlON(drData[colKeys[i].ColName])); } List<string> aryValues = new List<string>(); for (int i = 0; i < colInserts.Count; i++) { aryValues.Add(Apq.Data.MySqlClient.Common.ConvertToSqlON(drData[colInserts[i].ColName])); } string strValues = string.Join(",", aryValues); string strWhere = string.Format(strWhereTmp, objWhere.ToArray()); sb.Append(string.Format(@" INSERT INTO `{0}`({1}) SELECT {2} FROM `_Apq_Ins` WHERE NOT EXISTS(SELECT 1 FROM `{0}`{3});", drT.TableName, strCols, strValues, strWhere)); #endregion } } if (RowCount < PageSize) { break; } CRow += RowCount; } #endregion } } #region 文件尾 sb.Append(@" -- 删除临时表 DROP TABLE IF EXISTS `_Apq_Ins`; COMMIT; "); #endregion #endregion } if (tscbSqlProduct.SelectedIndex == 1) { #region MsSql // 为列表中已选中的表生成初始化语句,语句功能:完成将数据库中的数据插入到对应的表中,按主键添加 sb.Append(string.Format(@" USE [{0}]; -- 初始数据", _DBConnection.Database) ); foreach (SqlGen_XSD.MetaRow dr in _xsd.Meta.Rows) { if (dr._CheckState == 0 || dr.ObjectType != 1) { continue; } SqlGen_XSD.dbv_tableRow drT = _xsd.dbv_table.FindByTableName(dr.SchemaName, dr.ObjectName); SqlGen_XSD.dbv_columnRow[] drCs = drT.GetChildRows("FK_dbv_table_dbv_column") as SqlGen_XSD.dbv_columnRow[]; #region 计算WHERE语句(替换模式) /* 1.dbv_table_key已有指定数据Key时,使用此值 2.否则查找其它表中的存在同名主键列(2列以上),看作关联型数据 3.否则将主键作为对象型数据Key,加入到WHERE条件中 4.否则将自增列作为对象型数据Key,加入到WHERE条件中 */ List<SqlGen_XSD.dbv_columnRow> colKeys = new List<SqlGen_XSD.dbv_columnRow>(); if (colKeys.Count == 0) { SqlGen_XSD.dbv_table_keyRow drTK = _xsd.dbv_table_key.FindBySchemaNameTableName(dr.SchemaName, dr.ObjectName); if (drTK != null) { string[] aryDataKeys = drTK.PrimaryKeys.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < aryDataKeys.Length; i++) { aryDataKeys[i] = Apq.Data.SqlClient.Common.ConvertToSqlON(aryDataKeys[i]); } SqlGen_XSD.dbv_columnRow[] drDataKeys = _xsd.dbv_column.Select(string.Format("SchemaName = {0} AND TableName = {1} AND ColName IN ({2})", Apq.Data.SqlClient.Common.ConvertToSqlON(dr.SchemaName), Apq.Data.SqlClient.Common.ConvertToSqlON(dr.ObjectName), string.Join(",", aryDataKeys))) as SqlGen_XSD.dbv_columnRow[]; colKeys.AddRange(drDataKeys); } } if (colKeys.Count == 0) { foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { DataRow[] aryTemp = _xsd.dbv_column.Select(string.Format("TableName <> {0} AND ColName = {1} AND COLUMN_KEY = 'PRI'", Apq.Data.SqlClient.Common.ConvertToSqlON(drC.TableName), Apq.Data.SqlClient.Common.ConvertToSqlON(drC.ColName))); if (aryTemp != null && aryTemp.Length > 0) { colKeys.Add(drC); } } if (colKeys.Count < 2) { colKeys.Clear(); } } if (colKeys.Count == 0) { foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { if ("PRI".Equals(drC.COLUMN_KEY, StringComparison.OrdinalIgnoreCase)) { colKeys.Add(drC); } } } if (colKeys.Count == 0) { foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { if (drC.is_auto_increment) { colKeys.Add(drC); } } } string strWhereTmp = string.Empty;// WHERE 条件 if (colKeys.Count > 0) { for (int i = 0; i < colKeys.Count; i++) { strWhereTmp += string.Format(" AND [{0}]", colKeys[i].ColName) + " = {" + i + "}"; } if (strWhereTmp.Length > 1) { strWhereTmp = " WHERE" + strWhereTmp.Substring(4); } } else { string strExMsg = string.Format("无法生成条件的表:{0},请检查其数据Key设置、关联列名、主键、自增列。", drT.TableName); ErrList.AddRow(DateTime.Now, 4, 16, Apq.GlobalObject.UILang["生成表失败"], strExMsg); continue; } #endregion //将表读到内存,并为每一行生成脚本 DataSet ds = new DataSet(); DbDataAdapter dda = dch.CreateAdapter(string.Format(@"SELECT * FROM {0}", drT.TableName)); dda.Fill(ds); if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { string strCols = string.Empty; List<SqlGen_XSD.dbv_columnRow> colInserts = new List<SqlGen_XSD.dbv_columnRow>(); foreach (SqlGen_XSD.dbv_columnRow drC in drCs) { if (drC.is_auto_increment && !colKeys.Contains(drC)) { // 跳过无意义的自增列 continue; } colInserts.Add(drC); strCols += ",[" + drC.ColName + "]"; } if (strCols.Length > 1) { strCols = strCols.Substring(1); sb.Append(string.Format(@" -- 表:[{0}]", drT.TableName)); } foreach (DataRow drData in ds.Tables[0].Rows) { List<object> objWhere = new List<object>(); for (int i = 0; i < colKeys.Count; i++) { objWhere.Add(Apq.Data.SqlClient.Common.ConvertToSqlON(drData[colKeys[i].ColName])); } List<string> aryValues = new List<string>(); for (int i = 0; i < colInserts.Count; i++) { aryValues.Add(Apq.Data.SqlClient.Common.ConvertToSqlON(drData[colInserts[i].ColName])); } string strValues = string.Join(",", aryValues); string strWhere = string.Format(strWhereTmp, objWhere.ToArray()); sb.Append(string.Format(@" IF(NOT EXISTS(SELECT TOP(1) 1 FROM [dbo].[{0}]{3})) INSERT INTO [dbo].[{0}]({1}) VALUES({2})", drT.TableName, strCols, strValues, strWhere)); } } } sb.Append(@" "); #endregion } File.WriteAllText(sfdMeta.FileName, sb.ToString()); MessageBox.Show(this, Apq.GlobalObject.UILang["保存成功!"]); if (ErrList.ErrXSD.ErrList.Rows.Count > 0) { ErrList.Show(SqlGenPanel.DockDoc); } } }
// 刷新 private void tsbRefresh_Click(object sender, EventArgs e) { try { _DBConnection.Open(); } catch { MessageBox.Show(this, Apq.GlobalObject.UILang["数据库未连接或已断开"]); return; } finally { Apq.Data.Common.DbConnectionHelper.Close(_DBConnection); } ErrList.ErrXSD.ErrList.Clear(); _xsd.Meta.Rows.Clear(); _xsd.dbv_trigger.Rows.Clear(); _xsd.dbv_proc.Rows.Clear(); _xsd.dbv_column.Rows.Clear(); _xsd.dbv_table.Rows.Clear(); try { Apq.Data.Common.DbConnectionHelper dch = new Apq.Data.Common.DbConnectionHelper(_DBConnection); DbDataAdapter dda = dch.CreateAdapter(); if (_DBConnectionType == Apq.Data.Common.DBProduct.MySql) { // 表 dda.SelectCommand.CommandText = @" SELECT `TABLE_SCHEMA` as SchemaName,`Table_Name` as TableName,`ENGINE`,`CREATE_OPTIONS`,`TABLE_COMMENT`,'' as PrimaryKeys FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = DATABASE() AND `Table_Name` NOT IN ('dbv_BuildLog','dbv_table','dbv_column','dbv_trigger','dbv_view','dbv_proc'); "; dda.Fill(_xsd.dbv_table); // 列 dda.SelectCommand.CommandText = @" SELECT `COLUMN_NAME` as ColName, CONVERT(`COLUMN_DEFAULT` USING utf8) AS DefaultValue, CASE `IS_NULLABLE` WHEN 'NO' THEN 0 ELSE 1 END as NullAble, `DATA_TYPE`,`CHARACTER_MAXIMUM_LENGTH`,`CHARACTER_OCTET_LENGTH`,`NUMERIC_PRECISION`,`NUMERIC_SCALE`,`CHARACTER_SET_NAME`,`COLLATION_NAME`, CONVERT(`COLUMN_TYPE` USING utf8) AS COLUMN_TYPE, `COLUMN_KEY`, CASE WHEN INSTR(`EXTRA`,'auto_increment') > 0 THEN 1 ELSE 0 END as is_auto_increment, `COLUMN_COMMENT`,c.`TABLE_SCHEMA` as SchemaName,c.`TABLE_NAME` as TableName FROM `information_schema`.`COLUMNS` c INNER JOIN `information_schema`.`TABLES` t ON c.`TABLE_SCHEMA` = t.`TABLE_SCHEMA` AND c.`TABLE_NAME` = t.`TABLE_NAME` -- INNER JOIN `dbv_table` dt ON t.`TABLE_SCHEMA` = dt.`SchemaName` AND t.`TABLE_NAME` = dt.`TableName` WHERE c.`TABLE_SCHEMA` = DATABASE() AND t.`Table_Name` NOT IN ('dbv_BuildLog','dbv_table','dbv_column','dbv_trigger','dbv_view','dbv_proc'); "; dda.Fill(_xsd.dbv_column); // 视图 dda.SelectCommand.CommandText = @" SELECT `TABLE_SCHEMA` as SchemaName,`Table_Name` as TableName,`VIEW_DEFINITION` FROM `information_schema`.`VIEWS` WHERE `TABLE_SCHEMA` = DATABASE(); "; dda.Fill(_xsd.dbv_view); // 存储过程,函数 dda.SelectCommand.CommandText = @" SELECT `db` AS SchemaName,`name` AS ProcName, CASE `type` WHEN 'FUNCTION' THEN 4 ELSE 2 END AS type, CONVERT(`param_list` USING utf8) AS param_list, CONVERT(`returns` USING utf8) AS RETURNS, CONVERT(`body` USING utf8) AS body, `comment` FROM `mysql`.`proc` WHERE `db` = DATABASE() AND `name` NOT IN ('Apq_CreateNewTable'); "; dda.Fill(_xsd.dbv_proc); // 触发器 dda.SelectCommand.CommandText = @" SELECT `TRIGGER_SCHEMA` as SchemaName,`TRIGGER_NAME` as TriName,`EVENT_MANIPULATION`,`EVENT_OBJECT_TABLE` as TableName,`ACTION_ORDER`,`ACTION_CONDITION`,`ACTION_STATEMENT`,`ACTION_ORIENTATION`,`ACTION_TIMING` FROM `information_schema`.`TRIGGERS` t WHERE t.`TRIGGER_SCHEMA` = DATABASE(); "; dda.Fill(_xsd.dbv_trigger); // 为列设置TID foreach (SqlGen_XSD.dbv_columnRow dr in _xsd.dbv_column.Rows) { SqlGen_XSD.dbv_tableRow drT = _xsd.dbv_table.FindByTableName(dr.SchemaName, dr.TableName); dr.TID = drT.TID; } // 为表查找主键列 foreach (SqlGen_XSD.dbv_tableRow dr in _xsd.dbv_table.Rows) { SqlGen_XSD.dbv_columnRow[] drCs = dr.GetChildRows("FK_dbv_table_dbv_column") as SqlGen_XSD.dbv_columnRow[]; string strCols = string.Empty; foreach (SqlGen_XSD.dbv_columnRow drc in drCs) { if ("PRI".Equals(drc.COLUMN_KEY, StringComparison.OrdinalIgnoreCase)) { strCols += ",`" + drc.ColName + "`"; } } if (strCols.Length > 0) { dr.PrimaryKeys = strCols.Substring(1); } } // 将名称加到元数据表,用于界面显示 int nCheckState = Apq.Convert.ChangeType<int>(tsmiSelectTable.CheckState); foreach (SqlGen_XSD.dbv_tableRow drT in _xsd.dbv_table.Rows) { SqlGen_XSD.MetaRow drMeta = _xsd.Meta.NewMetaRow(); drMeta.ObjectType = 1; drMeta._CheckState = nCheckState; drMeta.SchemaName = drT.SchemaName; drMeta.ObjectName = drT.TableName; _xsd.Meta.Rows.Add(drMeta); } foreach (SqlGen_XSD.dbv_viewRow drV in _xsd.dbv_view.Rows) { SqlGen_XSD.MetaRow drMeta = _xsd.Meta.NewMetaRow(); drMeta.ObjectType = 6; drMeta._CheckState = nCheckState; drMeta.SchemaName = drV.SchemaName; drMeta.ObjectName = drV.TableName; _xsd.Meta.Rows.Add(drMeta); } nCheckState = Apq.Convert.ChangeType<int>(tsmiSelectProc.CheckState); foreach (SqlGen_XSD.dbv_procRow drP in _xsd.dbv_proc.Rows) { SqlGen_XSD.MetaRow drMeta = _xsd.Meta.NewMetaRow(); drMeta.ObjectType = drP.type; drMeta._CheckState = nCheckState; drMeta.SchemaName = drP.SchemaName; drMeta.ObjectName = drP.ProcName; _xsd.Meta.Rows.Add(drMeta); } nCheckState = Apq.Convert.ChangeType<int>(tsmiSelectTrigger.CheckState); foreach (SqlGen_XSD.dbv_triggerRow drTri in _xsd.dbv_trigger.Rows) { SqlGen_XSD.MetaRow drMeta = _xsd.Meta.NewMetaRow(); drMeta.ObjectType = 3; drMeta._CheckState = nCheckState; drMeta.SchemaName = drTri.SchemaName; drMeta.ObjectName = drTri.TriName; _xsd.Meta.Rows.Add(drMeta); } } } catch (Exception ex) { MessageBox.Show(this, ex.Message); } finally { if (ErrList.ErrXSD.ErrList.Rows.Count > 0) { ErrList.Show(SqlGenPanel.DockDoc); } } }
/// <summary> /// 到一个服务器执行并显示结果[多线程入口] /// </summary> /// <param name="ServerID"></param> private void Worker_Start(object DBIID) { object rtLock0 = GetLock("0"); object rtLock = GetLock(DBIID.ToString()); DataView dvDBI = new DataView(_dsDBC.DBI); dvDBI.RowFilter = "DBIID = " + DBIID; DataRowView drv = dvDBI[0]; DataSet dsTabPage = new DataSet(drv["DBIName"].ToString()); dsTabPage.ExtendedProperties.Add("DBIID", DBIID); // 0.结果DataSet准备 int nbliResult_ItemIndex = Apq.Convert.ChangeType<int>(Apq.Windows.Controls.ControlExtension.GetControlValues(this, "bliResult.ItemIndex")); if (nbliResult_ItemIndex == 0)//分列 { lock (rtLock0) { Apq.Windows.Delegates.Action_UI<ToolStripLabel>(this, tslDBName, delegate(ToolStripLabel ctrl) { lstds.Add(dsTabPage); }); } } else//合并 { dsTabPage = lstds[0]; } DbConnection sc = null; try { sc = Apq.DBC.Common.CreateDBIConnection(drv["DBIName"].ToString(), ref sc); Apq.Data.Common.DbConnectionHelper dch = new Apq.Data.Common.DbConnectionHelper(sc); DbDataAdapter sda = dch.CreateAdapter(); sda.SelectCommand.CommandTimeout = 86400;//3600*24 // 1.设置数据库 Apq.Data.Common.DbConnectionHelper.Open(sc); string DBName = Apq.Convert.ChangeType<string>(Apq.Windows.Controls.ControlExtension.GetControlValues(this, "tscbDBName.Text")); sc.ChangeDatabase(DBName);//更改数据库后再启用消息事件可防止执行到其它数据库 //sc.StatisticsEnabled = true;// 启用统计 //sc.FireInfoMessageEventOnUserErrors = true;// 启用消息事件 //sc.InfoMessage += new SqlInfoMessageEventHandler(rt.sc_InfoMessage); // 2.准备语句 string[] arySql = Apq.Windows.Controls.ControlExtension.GetControlValues(this, "arySql") as string[]; // 3.执行语句 if (arySql != null) { int TableCount = 0; for (int i = 0; i < arySql.Length; i++) { DataSet ds1 = new DataSet(); sda.SelectCommand.CommandText = arySql[i]; sda.Fill(ds1); // 连接对象启用消息事件后一般不会引发异常 foreach (DataTable ds1Table in ds1.Tables) { ds1Table.TableName = "Apq_Table" + TableCount++; dsTabPage.Tables.Add(ds1Table.Copy()); } } } } catch (ThreadAbortException) { } //catch (DbException ex) //{ //} catch (Exception ex) { // 标记本服执行出错 lock (rtLock) { Apq.Windows.Delegates.Action_UI<ToolStripLabel>(this, tslDBName, delegate(ToolStripLabel ctrl) { ErrList_XSD.ErrListRow drErrList = _dsErr.ErrList.NewErrListRow(); drErrList.DBIID = (int)DBIID; drErrList["__DBIName"] = drv["DBIName"]; drErrList.s = ex.Message; _dsErr.ErrList.Rows.Add(drErrList); drv["Err"] = true; }); } Apq.GlobalObject.ApqLog.Warn(drv["DBIName"], ex); } finally { Apq.Data.Common.DbConnectionHelper.Close(sc); lock (rtLock0) { Apq.Windows.Delegates.Action_UI<ToolStripLabel>(this, tslDBName, delegate(ToolStripLabel ctrl) { if (SqlEdit.tspb.Value < SqlEdit.tspb.Maximum) { SqlEdit.tspb.Value++; if (SqlEdit.tspb.Value == SqlEdit.tspb.Maximum) { _dsDBC.DBI.AcceptChanges(); _dsErr.ErrList.AcceptChanges(); SqlEdit.tsslStatus.Text = "已全部完成"; tsbCancel.Enabled = false; tsbExec.Enabled = true; DataView dvErr = new DataView(_dsDBC.DBI); dvErr.RowFilter = "Err = 1"; // 标记本服执行出错 if (dvErr.Count > 0) { SqlEdit.tsslStatus.Text += ",但有错误发生,请查看"; } } } }); } } }