Browse Source

修正文件不能正常读取列的问题。

final
曾凯 4 months ago
parent
commit
c6f2d4e79f
2 changed files with 61 additions and 13 deletions
  1. +22
    -5
      CNAS_DBSync/frmSyncParams.cs
  2. +39
    -8
      CnasSynchronusDAL/DAL/MdbDAL.cs

+ 22
- 5
CNAS_DBSync/frmSyncParams.cs View File

@@ -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;

}

/// <summary>


+ 39
- 8
CnasSynchronusDAL/DAL/MdbDAL.cs View File

@@ -21,13 +21,14 @@ namespace CnasSynchronusDAL
public static Dictionary<string, DataTable> ReadAccessTables(string strPath, string strPwd,string strAccessVersion)
{
Dictionary<string, DataTable> dictTables = new Dictionary<string, DataTable>();
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];
}



Loading…
Cancel
Save