private void ItemTypeInit() { string[] TmpItemType = { "BOOL", "BYTE", "WORD", "DWORD", "INT", "DINT", "REAL", "CHAR", "STRING" }; ItemTypeCboBox.Items.Clear(); for (int k = 0; k < TmpItemType.Length; k++) { ItemTypeCboBox.Items.Add(TmpItemType[k]); } //************************************添加自定义类型********************************** string strSql = "Select * From sysobjects Where Type='U' and Name='" + "CustomItemTbl" + "'"; if (TSqlDbClass.IsTblExist(ParCfg_DgViewPtr.sSqlConn, strSql) == true) { DataTable CustomItemTbl = TSqlDbClass.RetnTblBySqlCmd(ParCfg_DgViewPtr.sSqlConn, "Select * From CustomItemTbl"); for (int k = 0; k < CustomItemTbl.Rows.Count; k++) { ItemTypeCboBox.Items.Add(CustomItemTbl.Rows[k]["CustomItemName"].ToString()); } } //************************************************************************************ ItemTypeCboBox.SelectedIndex = 4; }
/// <summary> /// 创建OPC组对象 /// </summary> /// <param name="sGroupName"></param> public bool CreateOpcGroup(string sGroupName, bool Active) { bool bRet = false; DataTable OpcGroupTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From OpcGroupTbl where OpcGroupName = '" + sGroupName + "'"); DataRow dr = OpcGroupTbl.Rows[0]; if (dr != null) { string sGroupMode = dr["OpcGroupMode"].ToString(); int dwReqUpdateRate = Convert.ToInt32(dr["ReqUpdateRate"].ToString()); //根据组名获取相应组标签表 "OpcItemTbl_" + sOpcGroupName string OpcItemTblName = "OpcItemTbl_" + sGroupName; DataTable TmpItemTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From " + OpcItemTblName); if (TmpItemTbl != null) { GetGroupItemInfo(TmpItemTbl); //根据组标签表获取标签信息 bRet = pOpcSrv.CreateOpcGroup(sGroupName, Active, sGroupMode, dwReqUpdateRate, ItemNameList, PlcConnList, dBlockList, ItemTypeList, ItemAddrList, InitValList, CommentList); } //else //{ // bRet = false; // MessageBox.Show(sGroupName + "组对应的标签表没有记录,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //} } //else //{ // bRet = false; // MessageBox.Show(sGroupName + "组名不存在,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //} return(bRet); }
//************************************************************************************************ #region 标签同步 /// <summary> /// 整个组标签同步读 /// </summary> /// <param name="sGroupName"></param> /// <param name="itemsV"></param> public object[] SyncReadItemsGroup(string sGroupName, OPCDATASOURCE OpcDataSrc) //缓存,设备 { object[] TmpItemsVal = null; if (pOpcSrv.CheckOpcGroupExist(sGroupName) == true) { //根据组名获取相应组标签表 string OpcItemTblName = "OpcItemTbl_" + sGroupName; DataTable dt = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From " + OpcItemTblName); if (dt != null) { int[] ItemsIndex = new int[dt.Rows.Count]; for (int k = 0; k < dt.Rows.Count; k++) { ItemsIndex[k] = k; } // OPCDATASOURCE.OPC_DS_CACHE, OPCDATASOURCE.OPC_DS_DEVICE TmpItemsVal = pOpcSrv.SyncReadItems(sGroupName, ItemsIndex, OpcDataSrc); } } else { MessageBox.Show(sGroupName + "组没有创建!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); TmpItemsVal = null; } return(TmpItemsVal); }
private void TableStructParInit() { string[] sFieldName = { "ButtItemName", "BitInfo_0", "BitInfo_1", "BitInfo_2", "BitInfo_3", "BitInfo_4", "BitInfo_5", "BitInfo_6", "BitInfo_7" }; string[] sDataType = { "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar" }; int[] iMaxLen = { 32, 16, 16, 16, 24, 16, 16, 16, 16 }; string[] sAllowNull = { "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null" }; ParCfg_DgViewPtr.TableParProc(sFieldName, sDataType, iMaxLen, sAllowNull); //表结构参数初始化 //************************************************************************************************************************************************** Control[] cItemCon = { ItemCon_0, ItemCon_1, ItemCon_2, ItemCon_3, ItemCon_4, ItemCon_5, ItemCon_6, ItemCon_7, ItemCon_8 }; string[] sConType = { "ComboBox", "TextBox", "TextBox", "TextBox", "TextBox", "TextBox", "TextBox", "TextBox", "TextBox" }; ParCfg_DgViewPtr.DgViewParProc(ParCfg_DgView, sFieldCap, cItemCon, sConType, btnRecAdd, btnRecModi, btnRecUp, btnRecDel, btnRecDn); //************************************************************************************************************************************************** Label[] ItemLblPtr = { ItemLbl_0, ItemLbl_1, ItemLbl_2, ItemLbl_3, ItemLbl_4, ItemLbl_5, ItemLbl_6, ItemLbl_7, ItemLbl_8 }; for (int k = 0; k < sFieldCap.Length; k++) { ItemLblPtr[k].Text = sFieldCap[k]; } //********************************************************************************************************************************** DataTable ButtDebugTbl = TSqlDbClass.RetnTblBySqlCmd(ParCfg_DgViewPtr.sSqlConn, "Select * From OpcItemTbl_" + "DebugButtPar"); if (ButtDebugTbl != null && ButtDebugTbl.Rows.Count > 0) { for (int k = 0; k < ButtDebugTbl.Rows.Count; k++) { ItemCon_0.Items.Add(ButtDebugTbl.Rows[k]["ItemName"].ToString()); } ItemCon_0.SelectedIndex = 0; } }
private void SqlQueryProc(string StartDt, string EndDt) { if (Convert.ToDateTime(StartDt) <= Convert.ToDateTime(EndDt)) { string SqlCmd = string.Format("Select * From AlarmRecTbl Where Convert(varchar(24),信息时间) Between '{0}' And '{1}' Order By Convert(varchar(24),信息时间) Desc", StartDt, EndDt); DataTable TmpTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, SqlCmd); AlarmRec_DgView.DataSource = TmpTbl; } else { MessageBox.Show("起始时间不允许大于终止时间,请调整!"); } }
private void SqlQueryProc(DateTime StartDt, DateTime EndDt) { if (StartDt <= EndDt) { string SqlCmd = string.Format("Select * From AlarmRecTbl Where Convert(DateTime,信息时间) Between '{0}' And '{1}' Order By Convert(DateTime,信息时间) Desc", Convert.ToDateTime(StartDt.ToShortDateString() + " 00:00:00"), Convert.ToDateTime(EndDt.ToShortDateString() + " 23:59:59")); DataTable TmpTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, SqlCmd); AlarmRec_DgView.DataSource = TmpTbl; } else { MessageBox.Show("起始时间不允许大于终止时间,请调整!"); } }
//************************************************************************************************************ //*********************************************获取OPC组的标签名********************************************** //************************************************************************************************************ public List <string> GetOpcGroupItemName(string GroupName) { List <string> lstItemName = null; DataTable dt = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From " + "OpcItemTbl_" + GroupName); if (dt != null && dt.Rows.Count >= 1) { lstItemName = new List <string>(); for (int k = 0; k < dt.Rows.Count; k++) { lstItemName.Add(dt.Rows[k]["ItemName"].ToString()); } } return(lstItemName); }
private void frmReadItems_Load(object sender, EventArgs e) { cmbOpcGroupName.Items.Clear(); System.Data.DataTable OpcGroupTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From OpcGroupTbl"); if (OpcGroupTbl != null && OpcGroupTbl.Rows.Count >= 1) { for (int k = 0; k < OpcGroupTbl.Rows.Count; k++) { string OpcGroupName = OpcGroupTbl.Rows[k]["OpcGroupName"].ToString(); //产品名 cmbOpcGroupName.Items.Add(OpcGroupName); } } else { MessageBox.Show("提示:Opc组参数未配置。。。"); } }
/// <summary> /// 同步写组标签初始值 /// </summary> /// <param name="sGroupName"></param> /// <param name="itemsIdx"></param> /// <param name="itemsVal"></param> public bool SyncWrtInitVal(string sGroupName) { bool bRet = false; if (pOpcSrv.CheckOpcGroupExist(sGroupName) == true) { int[] itemsIdx = null; object[] itemsVal = null; //先读取标签组 string OpcItemTblName = "OpcItemTbl_" + sGroupName; DataTable GroupItemsTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From " + OpcItemTblName); if (GroupItemsTbl != null) { if (GroupItemsTbl.Rows.Count >= 1) { itemsIdx = new int[GroupItemsTbl.Rows.Count]; itemsVal = new object[GroupItemsTbl.Rows.Count]; for (int k = 0; k < GroupItemsTbl.Rows.Count; k++) { DataRow dr = GroupItemsTbl.Rows[k]; itemsIdx[k] = k; itemsVal[k] = Convert.ToDecimal(dr["InitVal"]); } bRet = pOpcSrv.SyncWriteItems(sGroupName, itemsIdx, itemsVal); } else { MessageBox.Show(sGroupName + "组记录为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } else { MessageBox.Show(sGroupName + "组未创建!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } return(bRet); }
private void OnForm_Load(object sender, EventArgs e) { //********************************************************************************* ParCfg_DgViewPtr = new DgVBindClass(TGlobalVar.sDataBase, TGlobalVar.sSqlConn, TGlobalVar.sMasterSqlConn, this); ParCfg_TblStructInit(); //******************************************Opc组名********************************* OpcGroupNameCboBox.SelectedIndex = -1; DataTable OpcGroupNameTbl = TSqlDbClass.RetnTblBySqlCmd(ParCfg_DgViewPtr.sSqlConn, "Select * From OpcGroupTbl"); if (OpcGroupNameTbl.Rows.Count >= 1) { for (int k = 0; k < OpcGroupNameTbl.Rows.Count; k++) { OpcGroupNameCboBox.Items.Add(OpcGroupNameTbl.Rows[k]["OpcGroupName"].ToString()); } OpcGroupNameCboBox.SelectedIndex = 0; //触发 } //********************************************************************************* }
private void TableStructParInit() { string[] sFieldName = { "AlarmItem", "AlarmType", "AlarmInfo" }; string[] sDataType = { "Varchar", "Varchar", "Varchar" }; int[] iMaxLen = { 16, 8, 64 }; string[] sAllowNull = { "Not Null", "Not Null", "Not Null" }; ParCfg_DgViewPtr.TableParProc(sFieldName, sDataType, iMaxLen, sAllowNull); //表结构参数初始化 //************************************************************************************************************************************************** Control[] cItemCon = { ItemCon_0, ItemCon_1, ItemCon_2 }; string[] sConType = { "ComboBox", "ComboBox", "TextBox" }; ParCfg_DgViewPtr.DgViewParProc(ParCfg_DgView, sFieldCap, cItemCon, sConType, btnRecAdd, btnRecModi, btnRecUp, btnRecDel, btnRecDn); //************************************************************************************************************************************************** Label[] ItemLblPtr = { ItemLbl_0, ItemLbl_1, ItemLbl_2 }; for (int k = 0; k < sFieldCap.Length; k++) { ItemLblPtr[k].Text = sFieldCap[k]; } CommentCboBox.Items.Clear(); DataTable AlarmItemTbl = TSqlDbClass.RetnTblBySqlCmd(ParCfg_DgViewPtr.sSqlConn, "Select * From OpcItemTbl_" + "AlarmMsgPar"); if (AlarmItemTbl != null && AlarmItemTbl.Rows.Count > 0) { for (int k = 0; k < AlarmItemTbl.Rows.Count; k++) { ItemCon_0.Items.Add(AlarmItemTbl.Rows[k]["ItemName"].ToString()); CommentCboBox.Items.Add(AlarmItemTbl.Rows[k]["Comment"].ToString()); } ItemCon_0.SelectedIndex = 0; } ItemCon_1.SelectedIndex = 0; }
private void QueryBtn_Click(object sender, EventArgs e) { string StartDt = StartDtPicker.Value.ToShortDateString() + " 00:00:00";; string EndDt = EndDtPicker.Value.ToShortDateString() + " 23:59:59";; if (Convert.ToDateTime(StartDt) <= Convert.ToDateTime(EndDt)) { string SqlCmd = null; SqlCmd = string.Format("Select * From TestRecTbl Where Convert(DateTime,测量时间) Between '{0}' And '{1}' Order By Convert(DateTime,测量时间) Desc", Convert.ToDateTime(StartDt), Convert.ToDateTime(EndDt)); if (ProdNameChk.Checked == true && ProdNameCmoBox.Text != "") { SqlCmd = string.Format("Select * From TestRecTbl Where 产品型号 = '{0}', Convert(DateTime,测量时间) Between '{1}' And '{2}' Order By Convert(DateTime,测量时间) Desc", ProdNameCmoBox.Text, Convert.ToDateTime(StartDt), Convert.ToDateTime(EndDt)); } DataTable TmpTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, SqlCmd); TestRecDgView.DataSource = TmpTbl; } else { MessageBox.Show("起始时间不允许大于终止时间, 请调整!"); } }
private void frmTestRecView_Load(object sender, EventArgs e) { DelOutDateRec(); DgViewInit(TestRecDgView); ProdNameCmoBox.Enabled = false; DataTable ProdNameTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From ProdNameTbl"); if (ProdNameTbl != null && ProdNameTbl.Rows.Count >= 1) //产品表存在 { for (int k = 0; k < ProdNameTbl.Rows.Count; k++) { string prodName = ProdNameTbl.Rows[k]["ProdName"].ToString(); ProdNameCmoBox.Items.Add(prodName); } if (ProdNameCmoBox.Items.Count >= 1) { ProdNameCmoBox.Enabled = true; ProdNameCmoBox.SelectedIndex = 0; } } }
private void OnForm_Load(object sender, EventArgs e) { pPlcSrv = TPlcSrv.GetInstance(); //pPlcSrv.CreateOpcGroup(ButtDebugGroupName, false ); //************************************************************************ DataTable ButtDebugGroupTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From OpcItemTbl_" + ButtDebugGroupName); if (ButtDebugGroupTbl == null || ButtDebugGroupTbl.Rows.Count <= 0) { MessageBox.Show("调试按钮标签未配置,请退出检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } ButtDebugInfoTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From ButtDebugInfoTbl"); if (ButtDebugInfoTbl == null || ButtDebugGroupTbl.Rows.Count <= 0) { MessageBox.Show("调试按钮信息未配置,请退出检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //************************************************************************ CtrlButtList = new List <List <Button> >(RowsNumPerPage); for (int k = 0; k < RowsNumPerPage; k++) { CtrlButtList.Add(null); CtrlButtList[k] = new List <Button>(); } for (int k = 0; k < RowsNumPerPage; k++) //每页的按钮行数 { for (int i = 0; i < 8; i++) //每行的按钮数 { Button tmpButt = (Button)findButtCon(this, "Butt" + k.ToString() + "_Bit" + i.ToString()); CtrlButtList[k].Add(tmpButt); CtrlButtList[k][i].BackColor = Color.WhiteSmoke; CtrlButtList[k][i].TabIndex = k * 8 + i; } } PanelList = new Panel[] { ButtPanel_0, ButtPanel_1, ButtPanel_2, ButtPanel_3 }; InfoButtList = new Button[] { InfoButt_0, InfoButt_1, InfoButt_2, InfoButt_3 }; //中间的提示按钮 //模拟鼠标动作的8个按钮 MouseCtrlList = new Button[] { Butt0_Bit6, Butt0_Bit7, Butt1_Bit6, Butt1_Bit7, Butt2_Bit6, Butt2_Bit7, Butt3_Bit6, Butt3_Bit7 }; for (int k = 0; k < MouseCtrlList.Length; k++) { MouseCtrlList[k].MouseUp += new MouseEventHandler(this.DebugButt_MouseUp); MouseCtrlList[k].MouseDown += new MouseEventHandler(this.DebugButt_MouseDown); } //读取位配置组行数数,排出在标签配置行记录中的序数 DebugButtItemID = new List <int>(); DebugButtItemID.Clear(); //相应Debug按钮组在OPC组中的序号 for (int k = 0; k < ButtDebugInfoTbl.Rows.Count; k++) { string strItemName = ButtDebugInfoTbl.Rows[k]["ButtItemName"].ToString(); int ItemID = retnItemNameID(ButtDebugGroupTbl, strItemName); DebugButtItemID.Add(ItemID); } //当前页码 PageIdx = 0; RefeshButtInfo(PageIdx, ButtDebugInfoTbl.Rows.Count); ButtStatusTimer.Enabled = true; }
private DataTable RetnExtItemsTbl(DataTable dt) { try { int n = -1; int offset = 0; //偏移量。 int ItemNum; string InitItemAddr, ItemAddr; DataTable tmpdt = new DataTable(); //需要先定义表结构 DataRow tmpdr = null; string[] ColName = { "ItemName", "PlcConn", "dBlock", "ItemType", "ItemAddr", "InitVal", "Comment" }; for (int k = 0; k < ColName.Length; k++) { tmpdt.Columns.Add(new DataColumn(ColName[k], typeof(System.String))); } for (int i = 0; i < dt.Rows.Count; i++) //OPC标签组记录行数 { ItemNum = Convert.ToInt32(dt.Rows[i]["ItemNum"]); //当前类型标签数量 InitItemAddr = dt.Rows[i]["ItemAddr"].ToString(); //初始标签地址 if (CustomItemTypeChk(dt.Rows[i]["ItemType"].ToString()) == true) //定制类型判别 { string CustItemTypeTblName = "CustomItemTbl_" + dt.Rows[i]["ItemType"].ToString(); DataTable Customdt = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From " + CustItemTypeTblName); //自定义标签类型表 if (Customdt != null && Customdt.Rows.Count > 0) { offset = RetnCustomOffset(Customdt); //定制标签偏置值 for (int j = 0; j < ItemNum; j++) //当前类型标签数量 { for (int k = 0; k < Customdt.Rows.Count; k++) //自定义标签类型表的行数 { n = -1; tmpdr = tmpdt.NewRow(); n++; tmpdr[n] = Customdt.Rows[k]["ItemName"]; n++; tmpdr[n] = dt.Rows[i]["PlcConn"]; n++; tmpdr[n] = dt.Rows[i]["dBlock"]; n++; tmpdr[n] = Customdt.Rows[k]["ItemType"]; Decimal TmpItemAddr = Convert.ToDecimal(InitItemAddr) + Convert.ToDecimal(Customdt.Rows[k]["ItemAddr"].ToString()) + offset * j; n++; tmpdr[n] = TmpItemAddr.ToString(); //标签地址 n++; tmpdr[n] = dt.Rows[i]["InitVal"]; n++; tmpdr[n] = dt.Rows[i]["Comment"]; tmpdt.Rows.Add(tmpdr); } } } } else //标准标签类型行 "ItemName", "PlcConn", "dBlock", "ItemType", "ItemAddr", "ItemNum", "InitVal", "Comment" { ItemAddr = InitItemAddr; for (int k = 0; k < ItemNum; k++) //标签类型数量 { n = -1; tmpdr = tmpdt.NewRow(); n++; tmpdr[n] = dt.Rows[i]["ItemName"]; n++; tmpdr[n] = dt.Rows[i]["PlcConn"]; n++; tmpdr[n] = dt.Rows[i]["dBlock"]; n++; tmpdr[n] = dt.Rows[i]["ItemType"]; n++; tmpdr[n] = ItemAddr; n++; tmpdr[n] = dt.Rows[i]["InitVal"]; n++; tmpdr[n] = dt.Rows[i]["Comment"]; tmpdt.Rows.Add(tmpdr); ItemAddr = ResetOctalToString(Convert.ToDecimal(ItemAddr), dt.Rows[i]["ItemType"].ToString()); } } } return(tmpdt); } catch (Exception ex) { MessageBox.Show("Error :" + ex.ToString()); return(null); } }
private void buttOk_Click(object sender, EventArgs e) { try { if (txtXlsFileName.Text != "" && txtXlsForm.Text.Trim() != "" && cmbOpcGroupName.Text != "") { int iStartRow = (int)neStartRow.Value, iEndRow = (int)neEndRow.Value; int iStartCol = (int)neStartCol.Value, iEndCol = (int)neEndCol.Value; ExcelAppClass MyExcelApp = new ExcelAppClass(); MyExcelApp.OpenExistFile(strXlsFileName); MyExcelApp.App.Visible = false; //int usedRows = MyExcelApp.GetSheet(txtXlsForm.Text).UsedRange.Rows.Count; //int usedCols = MyExcelApp.GetSheet(txtXlsForm.Text).UsedRange.Columns.Count; //******************************************检查数据表是否存在,不存在创建************************************** string sTableName = "OpcItemTbl_" + cmbOpcGroupName.Text; string[] sFieldName = { "ItemName", "PlcConn", "dBlock", "ItemType", "ItemAddr", "ItemNum", "InitVal", "Comment" }; string[] sDataType = { "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar", "Varchar" }; int[] iMaxLen = { 24, 24, 16, 24, 48, 12, 16, 32 }; string[] sAllowNull = { "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null", "Not Null" }; if (TSqlDbClass.CreateTableByDateTime(TGlobalVar.sSqlConn, sTableName, sFieldName, sDataType, iMaxLen, sAllowNull) == false) { MessageBox.Show("数据表创建失败,请检查!", "警告"); return; } //************************************************************************************************************** DateTime dtColTime = DateTime.Now; List <List <string> > strRecBufPtr = new List <List <string> >(); if (buttKeepAdd.Checked == true) { System.Data.DataTable DataRecTbl = TSqlDbClass.RetnTblBySqlCmd(TGlobalVar.sSqlConn, "Select * From " + sTableName); if (DataRecTbl != null && DataRecTbl.Rows.Count >= 1) { for (int k = 0; k < DataRecTbl.Rows.Count; k++) { List <string> strRecBuf = new List <string>(); strRecBuf.Add(dtColTime.ToString("yyyy-mm-dd hh:mm:ss:fff")); for (int j = 0; j < sFieldName.Length; j++) { string strFieldVal = DataRecTbl.Rows[k][sFieldName[j]].ToString(); strRecBuf.Add(strFieldVal); } strRecBufPtr.Add(strRecBuf); dtColTime = dtColTime.AddMilliseconds(1); } } } //***************************************************************************************************** TSqlDbClass.ExecuteNonQuerySql(TGlobalVar.sSqlConn, "Delete From " + sTableName); for (int i = 0; i <= iEndRow - iStartRow; i++) { List <string> strRecBuf = new List <string>(); strRecBuf.Add(dtColTime.ToString("yyyy-mm-dd hh:mm:ss:fff")); for (int j = 0; j <= iEndCol - iStartCol; j++) { Range TmpRng = (Range)MyExcelApp.GetSheet(txtXlsForm.Text).Cells[i + iStartRow, j + iStartCol]; strRecBuf.Add(Convert.ToString(TmpRng.Value2)); } strRecBufPtr.Add(strRecBuf); dtColTime = dtColTime.AddMilliseconds(1); } List <string> strFieldList = new List <string>(); strFieldList.Add("ID_DateTime"); for (int k = 0; k < sFieldName.Length; k++) { strFieldList.Add(sFieldName[k]); } InsertRecProc(sTableName, strFieldList, strRecBufPtr); MyExcelApp.Close(); } else { MessageBox.Show("Opc组名或Excel表单名没填写, 请检查!", "提示"); } } catch (Exception ex) { throw ex; } }