From a5795484685dbbf9e27b2bc071222c690c594f0f Mon Sep 17 00:00:00 2001 From: hwajin Date: Mon, 29 Mar 2021 10:11:51 +0900 Subject: [PATCH] 0329_ --- CSProject/CSProject/Program.cs | 73 +++++++-- .../dat/schtest_test_20210325174753.dat | 1 + .../dat/schtest_test_20210325174753.trc | 1 + .../dat/schtest_test_20210329095819.dat | 1 + .../dat/schtest_test_20210329095819.trc | 1 + .../dat/schtest_test_20210329095907.dat | 1 + .../dat/schtest_test_20210329095907.trc | 1 + .../dat/schtest_test_20210329095933.dat | 1 + .../dat/schtest_test_20210329095933.trc | 1 + CSProject/ConnDB/Connect.cs | 2 +- CSProject/MsgPackStruct/MsgStruct.cs | 2 +- CSProject/ProcessTrace/Trace.cs | 2 +- CSProject/SelectDB/Select.cs | 145 +++++------------- CSProject/SelectDB/Struct.cs | 2 +- 14 files changed, 111 insertions(+), 123 deletions(-) create mode 100644 CSProject/CSProject/dat/schtest_test_20210325174753.dat create mode 100644 CSProject/CSProject/dat/schtest_test_20210325174753.trc create mode 100644 CSProject/CSProject/dat/schtest_test_20210329095819.dat create mode 100644 CSProject/CSProject/dat/schtest_test_20210329095819.trc create mode 100644 CSProject/CSProject/dat/schtest_test_20210329095907.dat create mode 100644 CSProject/CSProject/dat/schtest_test_20210329095907.trc create mode 100644 CSProject/CSProject/dat/schtest_test_20210329095933.dat create mode 100644 CSProject/CSProject/dat/schtest_test_20210329095933.trc diff --git a/CSProject/CSProject/Program.cs b/CSProject/CSProject/Program.cs index dd6ebed..8938a88 100644 --- a/CSProject/CSProject/Program.cs +++ b/CSProject/CSProject/Program.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using NLog; using System.Threading; // Sleep -using System.IO; // FileStream +using System.Data; // DataSet using System.Data.SqlClient; // SqlConnection namespace CSProject @@ -50,14 +50,61 @@ namespace CSProject if (action[0] == "get") { if (action.Length == 5) - { + { + String pk_yn = "X"; // data processing - SelectDB.Struct.ProcessStc process_result = select_database.ProcessSelect(action, connection); - String select_result = ReturnResult(process_result); // return result data - path = String.Format("C:\\Users\\hwajin\\source\\repos\\CSProject\\CSProject\\dat\\{0}_{1}_", process_result.def_struct.schema, process_result.def_struct.table) + System.DateTime.Now.ToString("yyyyMMddHHmmss"); + DataSet process_result = select_database.ProcessSelect(action, connection); + + SelectDB.Struct.DefStc def_struct = new SelectDB.Struct.DefStc(); + List col_list = new List(); + + MsgPackStruct.MsgStruct.DataListStc data_list_struct = new MsgPackStruct.MsgStruct.DataListStc(); + MsgPackStruct.MsgStruct.RowListStc row_list_struct = new MsgPackStruct.MsgStruct.RowListStc(); + + def_struct.schema = action[1]; + def_struct.table = action[2]; + + if (process_result.Tables.Count > 0) + { + foreach (DataRow row in process_result.Tables[0].Rows) + { + SelectDB.Struct.ColStc col_struct = new SelectDB.Struct.ColStc(); + col_struct.colmn_name = row[0].ToString(); + col_struct.colmn_type = row[1].ToString(); + col_struct.colmn_length = int.Parse(row[2].ToString()); + + if (row[3].ToString() == "PK") + { + pk_yn = "O"; + } else + { + pk_yn = "X"; + } + col_struct.colmn_pk_yn = pk_yn; + col_list.Add(col_struct); + } + def_struct.col_list = col_list; + + row_list_struct.row_list = new List(); + foreach (DataRow row in process_result.Tables[1].Rows) + { + data_list_struct.data_list = new List(); + foreach (DataColumn col in process_result.Tables[1].Columns) + { + MsgPackStruct.MsgStruct.DataStc data_struct = new MsgPackStruct.MsgStruct.DataStc(); + data_struct.col_name = col.ColumnName; + data_struct.col_data = row[col].ToString(); + data_list_struct.data_list.Add(data_struct); + } + } + row_list_struct.row_list.Add(data_list_struct); + } + + String select_result = ReturnResult(def_struct, row_list_struct); // return result data + path = String.Format("C:\\Users\\hwajin\\source\\repos\\CSProject\\CSProject\\dat\\{0}_{1}_", def_struct.schema, def_struct.table) + System.DateTime.Now.ToString("yyyyMMddHHmmss"); byte[] dat_buffer = Encoding.UTF8.GetBytes(select_result); - byte[] trc_buffer = MessagePack.MessagePackSerializer.Serialize(process_result.row_list_struct); + byte[] trc_buffer = MessagePack.MessagePackSerializer.Serialize(row_list_struct); process_trace.CreateFile(path + ".dat", dat_buffer); process_trace.CreateFile(path + ".trc", trc_buffer); @@ -86,25 +133,25 @@ namespace CSProject } // processing result data - public static String ReturnResult(SelectDB.Struct.ProcessStc process_result) + public static String ReturnResult(SelectDB.Struct.DefStc def_struct, MsgPackStruct.MsgStruct.RowListStc row_list_struct) { - String result = String.Format("# def info\nschema : {0}, table : {1}\n", process_result.def_struct.schema, process_result.def_struct.table); + String result = String.Format("# def info\nschema : {0}, table : {1}\n", def_struct.schema, def_struct.table); // def data - for (int i = 0; i < process_result.def_struct.col_list.Count; i++) + for (int i = 0; i < def_struct.col_list.Count; i++) { - result += String.Format("col{0} name : {1},\ttype : {2},\tlength : {3},\tpk : {4}\n", i + 1, process_result.def_struct.col_list[i].colmn_name, process_result.def_struct.col_list[i].colmn_type, process_result.def_struct.col_list[i].colmn_length, process_result.def_struct.col_list[i].colmn_pk_yn); + result += String.Format("col{0} name : {1},\ttype : {2},\tlength : {3},\tpk : {4}\n", i + 1, def_struct.col_list[i].colmn_name, def_struct.col_list[i].colmn_type, def_struct.col_list[i].colmn_length, def_struct.col_list[i].colmn_pk_yn); } result += "\n# row data\n"; int k = 1; // row data - for (int i = 0; i < process_result.row_list_struct.row_list.Count; i++) + for (int i = 0; i < row_list_struct.row_list.Count; i++) { result += String.Format("row{0}", k++); - for (int j = 0; j < process_result.row_list_struct.row_list[i].data_list.Count; j++) + for (int j = 0; j < row_list_struct.row_list[i].data_list.Count; j++) { - result += String.Format(" {0} : {1} ", process_result.row_list_struct.row_list[i].data_list[j].col_name, process_result.row_list_struct.row_list[i].data_list[j].col_data); + result += String.Format(" {0} : {1} ", row_list_struct.row_list[i].data_list[j].col_name, row_list_struct.row_list[i].data_list[j].col_data); } result += "\n"; } diff --git a/CSProject/CSProject/dat/schtest_test_20210325174753.dat b/CSProject/CSProject/dat/schtest_test_20210325174753.dat new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210325174753.dat @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210325174753.trc b/CSProject/CSProject/dat/schtest_test_20210325174753.trc new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210325174753.trc @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210329095819.dat b/CSProject/CSProject/dat/schtest_test_20210329095819.dat new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210329095819.dat @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210329095819.trc b/CSProject/CSProject/dat/schtest_test_20210329095819.trc new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210329095819.trc @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210329095907.dat b/CSProject/CSProject/dat/schtest_test_20210329095907.dat new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210329095907.dat @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210329095907.trc b/CSProject/CSProject/dat/schtest_test_20210329095907.trc new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210329095907.trc @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210329095933.dat b/CSProject/CSProject/dat/schtest_test_20210329095933.dat new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210329095933.dat @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/CSProject/dat/schtest_test_20210329095933.trc b/CSProject/CSProject/dat/schtest_test_20210329095933.trc new file mode 100644 index 0000000..7badad3 --- /dev/null +++ b/CSProject/CSProject/dat/schtest_test_20210329095933.trc @@ -0,0 +1 @@ +System.Byte[] diff --git a/CSProject/ConnDB/Connect.cs b/CSProject/ConnDB/Connect.cs index 286f99b..e0db6a9 100644 --- a/CSProject/ConnDB/Connect.cs +++ b/CSProject/ConnDB/Connect.cs @@ -16,7 +16,7 @@ namespace ConnDB Logger log = LogManager.GetLogger("agent_logger"); public Struct.ConnStateStc ConnectDB() - { + { bool conn_result = true; Struct.ConnInfoStc conn_info_struct = new Struct.ConnInfoStc(); Struct.ConnStateStc conn_state_struct = new Struct.ConnStateStc(); diff --git a/CSProject/MsgPackStruct/MsgStruct.cs b/CSProject/MsgPackStruct/MsgStruct.cs index f159726..7d94c81 100644 --- a/CSProject/MsgPackStruct/MsgStruct.cs +++ b/CSProject/MsgPackStruct/MsgStruct.cs @@ -32,7 +32,7 @@ namespace MsgPackStruct [MessagePackObject] [StructLayout(LayoutKind.Sequential)] public struct RowListStc - { + { [Key(0)] public List row_list; } diff --git a/CSProject/ProcessTrace/Trace.cs b/CSProject/ProcessTrace/Trace.cs index 3ee270a..ceb3ffa 100644 --- a/CSProject/ProcessTrace/Trace.cs +++ b/CSProject/ProcessTrace/Trace.cs @@ -11,7 +11,7 @@ namespace ProcessTrace public class Trace { public void CreateFile(String path, byte[] data_buffer) - { + { using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { StreamWriter writer = new StreamWriter(fs); diff --git a/CSProject/SelectDB/Select.cs b/CSProject/SelectDB/Select.cs index a7178c8..2ed8d89 100644 --- a/CSProject/SelectDB/Select.cs +++ b/CSProject/SelectDB/Select.cs @@ -11,141 +11,74 @@ namespace SelectDB { public class Select { - public Struct.ProcessStc ProcessSelect(String[] str, SqlConnection connection) - { - SqlCommand cmd = null; - Struct.ProcessStc processStc = new Struct.ProcessStc(); - Struct.DefStc defStc = new Struct.DefStc(); - MsgPackStruct.MsgStruct.RowListStc rowListStc = new MsgPackStruct.MsgStruct.RowListStc(); + public DataSet ProcessSelect(String[] str, SqlConnection connection) + { + DataSet data_set = new DataSet(); try { + String pk_colmn = ""; // table column info - cmd = SelectCommand('D', str, null, connection); - Struct.ProcessStc def_result = SelectResult('D', cmd); - defStc = def_result.def_struct; - defStc.schema = str[1]; - defStc.table = str[2]; + DataTable def_datatable = SelectCommand('D', str, null, connection); + for (int i = 0; i < def_datatable.Rows.Count; i++) + { + for (int j = 0; j < def_datatable.Columns.Count; j++) + { + if(def_datatable.Rows[i][j].ToString() == "PK") + { + pk_colmn = def_datatable.Rows[i][0].ToString(); + } + } + } + + DataTable row_datatable = SelectCommand('R', str, pk_colmn, connection); - // table row data - cmd = SelectCommand('R', str, def_result.pk_colmn, connection); - Struct.ProcessStc row_result = SelectResult('R', cmd); - rowListStc = row_result.row_list_struct; + data_set.Tables.Add(def_datatable); + data_set.Tables.Add(row_datatable); } catch (Exception e) { //log.Error(e.ToString()); } - processStc.def_struct = defStc; - processStc.row_list_struct = rowListStc; - return processStc; + return data_set; } // select command - public SqlCommand SelectCommand(char type, String[] str, String pk_colmn, SqlConnection connection) + public DataTable SelectCommand(char type, String[] str, String pk_colmn, SqlConnection connection) { - SqlCommand cmd = connection.CreateCommand(); String command = ""; + String table_name = ""; + DataTable data_table = null; + SqlCommand cmd = connection.CreateCommand(); // table column info if (type == 'D') { - command = String.Format("select A.COLUMN_NAME, A.DATA_TYPE, D.max_length, F.type " + - "from INFORMATION_SCHEMA.COLUMNS A inner join sys.schemas B on A.TABLE_SCHEMA = B.name " + - "inner join sys.tables C on B.schema_id = C.schema_id " + - "inner join sys.columns D on C.object_id = D.object_id and A.COLUMN_NAME = D.name " + - "inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE E on A.TABLE_CATALOG = E.TABLE_CATALOG " + - "left join sys.key_constraints F on E.CONSTRAINT_NAME = F.name and E.COLUMN_NAME = A.COLUMN_NAME " + - "where A.TABLE_SCHEMA = '{0}' and A.TABLE_NAME = '{1}'", str[1], str[2]); + table_name = "defResult"; + command = String.Format("SELECT A.COLUMN_NAME, A.DATA_TYPE, D.MAX_LENGTH, F.TYPE PK_YN " + + "FROM INFORMATION_SCHEMA.COLUMNS A INNER JOIN SYS.SCHEMAS B ON A.TABLE_SCHEMA = B.NAME " + + "INNER JOIN SYS.TABLES C ON B.SCHEMA_ID = C.SCHEMA_ID " + + "INNER JOIN SYS.COLUMNS D ON C.OBJECT_ID = D.OBJECT_ID AND A.COLUMN_NAME = D.NAME " + + "INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE E ON A.TABLE_CATALOG = E.TABLE_CATALOG " + + "LEFT JOIN SYS.KEY_CONSTRAINTS F ON E.CONSTRAINT_NAME = F.NAME AND E.COLUMN_NAME = A.COLUMN_NAME " + + "WHERE A.TABLE_SCHEMA = '{0}' AND A.TABLE_NAME = '{1}'", str[1], str[2]); } // table row data else if (type == 'R') { - command = String.Format("select no, id from (select *, ROW_NUMBER() OVER(ORDER BY({0})) rownum from {1}.{2}) R where R.rownum between {3} and {4}", pk_colmn, str[1], str[2], str[3], str[4]); + table_name = "rowResult"; + command = String.Format("SELECT NO, ID FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY({0})) ROWNUM FROM {1}.{2}) R WHERE R.ROWNUM BETWEEN {3} AND {4}", pk_colmn, str[1], str[2], str[3], str[4]); } cmd.CommandText = command; - cmd.Dispose(); - - return cmd; - } - - // select process result - public Struct.ProcessStc SelectResult(Char type, SqlCommand cmd) - { - String pk_colmn = ""; - Struct.DefStc defStc = new Struct.DefStc(); - Struct.ProcessStc processStc = new Struct.ProcessStc(); - MsgPackStruct.MsgStruct.RowListStc rowListStc = new MsgPackStruct.MsgStruct.RowListStc(); - - // table column info - if (type == 'D') - { - String pk_yn = "X"; // Presence of primary key - Struct.ColStc colStc = new Struct.ColStc(); // column data - List col_list = new List(); - SqlDataReader readData = cmd.ExecuteReader(); - - if (readData != null) - { - while (readData.Read()) - { - // primary key - if (readData[3].ToString() == "PK") - { - pk_yn = "O"; - pk_colmn = readData[0].ToString(); - - } - // no primary key - else - { - pk_yn = "X"; - } - - colStc.colmn_name = readData[0].ToString(); - colStc.colmn_type = readData[1].ToString(); - colStc.colmn_length = int.Parse(readData[2].ToString()); - colStc.colmn_pk_yn = pk_yn; - - col_list.Add(colStc); - } - defStc.col_list = col_list; - } - readData.Close(); - } - // table row data - else if (type == 'R') - { - DataTable dataTable = null; - - SqlDataAdapter sda = new SqlDataAdapter(cmd); - dataTable = new DataTable("result"); - sda.Fill(dataTable); - MsgPackStruct.MsgStruct.DataListStc dataListStc = new MsgPackStruct.MsgStruct.DataListStc(); - - rowListStc.row_list = new List(); - for (int i = 0; i < dataTable.Rows.Count; i++) - { - dataListStc.data_list = new List(); - for (int j = 0; j < dataTable.Columns.Count; j++) - { - MsgPackStruct.MsgStruct.DataStc dataStc = new MsgPackStruct.MsgStruct.DataStc(); - dataStc.col_name = dataTable.Columns[j].ColumnName; - dataStc.col_data = dataTable.Rows[i][j].ToString(); - dataListStc.data_list.Add(dataStc); - } - rowListStc.row_list.Add(dataListStc); - } - } - - processStc.pk_colmn = pk_colmn; - processStc.def_struct = defStc; - processStc.row_list_struct = rowListStc; + SqlDataAdapter sda = new SqlDataAdapter(cmd); + data_table = new DataTable(table_name); + sda.Fill(data_table); + cmd.Dispose(); - return processStc; + return data_table; } } } diff --git a/CSProject/SelectDB/Struct.cs b/CSProject/SelectDB/Struct.cs index ede8fe3..0d1627a 100644 --- a/CSProject/SelectDB/Struct.cs +++ b/CSProject/SelectDB/Struct.cs @@ -21,7 +21,7 @@ namespace SelectDB public string schema; public string table; public List col_list; - } + } public struct ProcessStc { -- GitLab