From c6f2d4e79ff80432f06a0012b3097a1a8eccc976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=E5=87=AF?= Date: Tue, 25 Feb 2025 16:06:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=96=87=E4=BB=B6=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E6=AD=A3=E5=B8=B8=E8=AF=BB=E5=8F=96=E5=88=97=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CNAS_DBSync/frmSyncParams.cs | 27 +++++++++++++++---- CnasSynchronusDAL/DAL/MdbDAL.cs | 47 +++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/CNAS_DBSync/frmSyncParams.cs b/CNAS_DBSync/frmSyncParams.cs index 88e209e..a632ee8 100644 --- a/CNAS_DBSync/frmSyncParams.cs +++ b/CNAS_DBSync/frmSyncParams.cs @@ -315,6 +315,10 @@ namespace CNAS_DBSync dtTableType = SelectTableType.KingSql(strTableName_Instru); break; default: + if (dictInstruTables.ContainsKey(strTableName_Instru)) + { + dtTableType = dictInstruTables[strTableName_Instru]; + } break; } DataTable dtInstruShow = new DataTable(); @@ -323,16 +327,29 @@ namespace CNAS_DBSync dtInstruShow.Columns.Add("remark"); if (dtTableType != null) { - for (int i = 0; i < dtTableType.Rows.Count; i++) + switch (currentSyncItem.SyncInstrumentDSInfo.InstrumentDataSourceType) { - dtInstruShow.Rows.Add(new object[] { dtTableType.Rows[i]["ColumnName"], dtTableType.Rows[i]["DataType"], dtTableType.Rows[i]["remark"] }); + case DataSourceType.MySQL: + case DataSourceType.Dm: + case DataSourceType.Oracle: + case DataSourceType.PostgreSQL: + case DataSourceType.SQL: + case DataSourceType.Kingbase: + for (int i = 0; i < dtTableType.Rows.Count; i++) + { + dtInstruShow.Rows.Add(new object[] { dtTableType.Rows[i]["ColumnName"], dtTableType.Rows[i]["DataType"], dtTableType.Rows[i]["remark"] }); + } + break; + default: + foreach (DataColumn dc in dtTableType.Columns) + { + dtInstruShow.Rows.Add(new object[] { dc.ColumnName, dc.DataType, "" }); + } + break; } - } - dgvInstruDS.DataSource = dtInstruShow; - } /// diff --git a/CnasSynchronusDAL/DAL/MdbDAL.cs b/CnasSynchronusDAL/DAL/MdbDAL.cs index b62107f..ab00816 100644 --- a/CnasSynchronusDAL/DAL/MdbDAL.cs +++ b/CnasSynchronusDAL/DAL/MdbDAL.cs @@ -21,13 +21,14 @@ namespace CnasSynchronusDAL public static Dictionary ReadAccessTables(string strPath, string strPwd,string strAccessVersion) { Dictionary dictTables = new Dictionary(); + OleDbConnection conn = null; try { //连接字符串 string connstring = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Security Info=False;Jet OLEDB:Database Password={1}", strPath, strPwd); if(!string.IsNullOrWhiteSpace(strAccessVersion)&&strAccessVersion != "0") connstring = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Jet OLEDB:Database Password={1}", strPath, strPwd); - using (OleDbConnection conn = new OleDbConnection(connstring)) + using (conn = new OleDbConnection(connstring)) { conn.Open(); DataTable TablesName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字 @@ -50,19 +51,26 @@ namespace CnasSynchronusDAL //发生异常,写入日志 AppLog.Error(ex.Message); } + finally + { + conn?.Close(); + conn?.Dispose(); + } return dictTables; } internal static DataTable ReadAccessTableStruct(string strPath, string strPwd, string strAccessVersion, string strViewName, string strViewSQL,string strTableName) { DataTable dt = new DataTable(); + OleDbConnection conn = null; + OleDbDataAdapter ada = null; try { //连接字符串 string connstring = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Security Info=False;Jet OLEDB:Database Password={1}", strPath, strPwd); if (!string.IsNullOrWhiteSpace(strAccessVersion) && strAccessVersion != "0") connstring = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Jet OLEDB:Database Password={1}", strPath, strPwd); - using (OleDbConnection conn = new OleDbConnection(connstring)) + using (conn = new OleDbConnection(connstring)) { conn.Open(); @@ -78,7 +86,7 @@ namespace CnasSynchronusDAL else sql = string.Format("select * from [{0}] where 1=0", strTableName); //查询字符串 - using (OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring)) + using (ada = new OleDbDataAdapter(sql, connstring)) { DataSet set = new DataSet(); ada.Fill(set); @@ -91,6 +99,12 @@ namespace CnasSynchronusDAL //发生异常,写入日志 AppLog.Error(ex.Message); } + finally + { + ada?.Dispose(); + conn?.Close(); + conn?.Dispose(); + } return dt; } @@ -98,6 +112,8 @@ namespace CnasSynchronusDAL { DataTable dt = new DataTable(); OleDbConnection conn = null; + OleDbCommand command = null; + OleDbDataReader reader = null; try { AppLog.Info("开始执行"); @@ -120,13 +136,13 @@ namespace CnasSynchronusDAL using (conn = new OleDbConnection(connstring)) { conn.Open(); - + //获取数据库表结构 DataTable dtStruct = new DataTable(); dtStruct = ReadAccessTableStruct(strPath, strPwd, strAccessVersion, strViewName, strViewSQL, strTableName); //获取数据,并插入到表中 - using (OleDbCommand command = new OleDbCommand(sql, conn)) + using (command = new OleDbCommand(sql, conn)) { if (strViewName != strTableName || string.IsNullOrWhiteSpace(strViewName)) { @@ -134,7 +150,7 @@ namespace CnasSynchronusDAL command.Parameters.AddWithValue("?", datetime); } - using (OleDbDataReader reader = command.ExecuteReader()) + using (reader = command.ExecuteReader()) { try { @@ -170,6 +186,13 @@ namespace CnasSynchronusDAL //发生异常,写入日志 AppLog.Error(ex.Message); } + finally + { + reader?.Close(); + command?.Dispose(); + conn?.Close(); + conn?.Dispose(); + } return dt; } @@ -191,17 +214,19 @@ namespace CnasSynchronusDAL public static DataTable ReadAccessTablesByTableName(string strPath, string strUser, string strPwd, string strTableName,string strAccessVersion) { DataSet set = new DataSet(); + OleDbConnection conn = null; + OleDbDataAdapter ada = null; try { //连接字符串 string connstring = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Persist Security Info=False;Jet OLEDB:Database Password={1}", strPath, strPwd); if (!string.IsNullOrWhiteSpace(strAccessVersion) && strAccessVersion != "0") connstring = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;Jet OLEDB:Database Password={1}", strPath, strPwd); - using (OleDbConnection conn = new OleDbConnection(connstring)) + using (conn = new OleDbConnection(connstring)) { conn.Open(); string sql = string.Format("SELECT * FROM [{0}]", strTableName); //查询字符串 - using (OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring)) + using (ada = new OleDbDataAdapter(sql, connstring)) { ada.Fill(set); } @@ -212,6 +237,12 @@ namespace CnasSynchronusDAL //发生异常,写入日志 AppLog.Error(ex.Message); } + finally + { + ada?.Dispose(); + conn?.Close(); + conn?.Dispose(); + } return set.Tables[0]; }