프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

hytos / DTI_PID / ID2PSN / DB.cs @ 08b33e44

이력 | 보기 | 이력해설 | 다운로드 (181 KB)

1
using System;
2
using System.Collections.Generic;
3
using System.Data;
4
using System.Data.Common;
5
using System.Data.SqlClient;
6
using System.Data.SQLite;
7
using System.Linq;
8
using System.Text.RegularExpressions;
9

    
10
namespace ID2PSN
11
{
12
    public class DB
13
    {
14
        const string PSN_TOPOLOGY_RULE = "T_PSN_TOPOLOGY_RULE";
15
        const string PSN_HEADER_SETTING = "T_PSN_HEADER_SETTING";
16
        const string PSN_VENTDRAIN_SETTING = "T_PSN_VENTDRAIN_SETTING";
17
        const string PSN_VIEW = "T_PSN_VIEW";
18
        const string PSN_TRANSFORMKEYWORD_SETTING = "T_PSN_TRANSFORMKEYWORD_SETTING";
19
        const string PSN_VALVEGROUP_SETTING = "SPPIDValveGroup";
20

    
21
        const string PSN_PATHITEMS = "SPPIDPathItem";
22
        const string PSN_SEQUENCEDATA = "SPPIDSequenceData";
23
        const string PSN_PIPESYSTEMNETWORK = "SPPIDPipeSystemNetwork";
24
        const string PSN_EQUIPMENT = "SPPIDEquipment";
25
        const string PSN_NOZZLE = "SPPIDNozzle";
26
        const string PSN_FLUIDCODE = "SPPIDFluidCode";
27
        const string PSN_PIPINGMATLCLASS = "SPPIDPipingMatlClass";
28
        const string PSN_TOPOLOGYSET = "SPPIDTopologySet";
29
        //2021.11.17 추가 
30
        const string PSN_PIPELINE = "SPPIDPipeLine";
31
        //2021.11.26 추가
32
        const string PSN_INSULATIONPURPOSE = "SPPIDInsulationPurpose";
33
        //2022.01.12 추가 //ARS_COMMON DB
34
        const string PSN_REVISION = "PSNRevision";
35
        const string PSN_COMMON = "ARS_COMMON";
36
        //2022.01.19 추가
37
        const string PSN_PIPESYSTEM = "SPPIDPipeSystem";
38

    
39
        //2022.02.03 추가
40
        const string PSN_NOPOCKETSETTING = "T_PSN_NOPOCKET_SETTING";
41
        /// <summary>
42
        ///  ID2 Project.db 데이터를 가져온다. 
43
        ///  DB 접속 정보 및 DBType (Sqlite, Mssql) 정보를 가져옴
44
        ///  - JY
45
        /// </summary>
46
        /// <returns></returns>
47
        public static DataTable GetProject()
48
        {
49
            DataTable dt = new DataTable();
50
            ID2Info id2Info = ID2Info.GetInstance();
51
            try
52
            {
53
                using (SQLiteConnection connection = new SQLiteConnection(@"Data Source = C:\ProgramData\Digital PID\Project.db", true))
54
                {
55
                    connection.Open();
56
                    if (connection.State.Equals(ConnectionState.Open))
57
                    {
58
                        using (SQLiteCommand cmd = connection.CreateCommand())
59
                        {
60
                            cmd.CommandText = "SELECT p.[Id], p.Name, p.Path, s.DBTypes_UID, s.Host, s.[User], s.[Password], s.FilePath FROM DBSettings s, Projects p WHERE s.Projects_UID = p.[Id]";
61
                            using (SQLiteDataReader dr = cmd.ExecuteReader())
62
                                dt.Load(dr);
63
                        }
64

    
65
                    }
66
                    connection.Close();
67
                }
68
            }
69
            catch (Exception ex)
70
            {
71
                System.Windows.Forms.MessageBox.Show(ex.Message);
72
            }
73

    
74
            dt.AcceptChanges();
75
            dt.DefaultView.Sort = "Name";
76
            dt = dt.DefaultView.ToTable();
77

    
78
            return dt;
79
        }
80

    
81
        /// <summary>
82
        ///  SQLite에 초기 DB 생성
83
        ///  - JY
84
        /// </summary>
85
        /// <returns></returns>
86
        public static bool ConnTestAndCreateTable()
87
        {
88
            bool result = false;
89
            ID2Info id2Info = ID2Info.GetInstance();
90

    
91
            using (IAbstractDatabase connection = id2Info.CreateConnection())
92
            {
93
                try
94
                {
95
                    var names = connection.GetTableNames();
96
                    var matched = names.FirstOrDefault(param => param == PSN_HEADER_SETTING);
97
                    Dictionary<string, string> dicColCheck = new Dictionary<string, string>();
98
                    dicColCheck.Add("GROUP_ID", "TEXT");
99
                    dicColCheck.Add("DESCRIPTION", "TEXT");
100
                    dicColCheck.Add("INDEX", "INTEGER");
101
                    dicColCheck.Add("NAME", "TEXT");
102

    
103
                    if (matched == null)
104
                    {
105
                        var query = $"CREATE TABLE {PSN_HEADER_SETTING} (GROUP_ID TEXT, DESCRIPTION TEXT, [INDEX] INTEGER, NAME TEXT)";
106
                        using (var cmd = connection.GetSqlStringCommand(query))
107
                        {
108
                            cmd.ExecuteNonQuery();
109
                        }
110
                    }
111
                    else
112
                    {
113
                        AddColumn(PSN_HEADER_SETTING, dicColCheck);
114
                    }
115

    
116
                    matched = names.FirstOrDefault(param => param == PSN_VENTDRAIN_SETTING);
117
                    dicColCheck.Clear();
118
                    dicColCheck.Add("GROUP_ID", "TEXT");
119
                    dicColCheck.Add("DESCRIPTION", "TEXT");
120
                    dicColCheck.Add("INDEX", "INTEGER");
121
                    dicColCheck.Add("NAME", "TEXT");
122
                    if (matched == null)
123
                    {
124
                        var query = $"CREATE TABLE {PSN_VENTDRAIN_SETTING} (GROUP_ID TEXT, DESCRIPTION TEXT, [INDEX] INTEGER, NAME TEXT)";
125
                        using (var cmd = connection.GetSqlStringCommand(query))
126
                        {
127
                            cmd.ExecuteNonQuery();
128
                        }
129
                    }
130
                    else
131
                    {
132
                        AddColumn(PSN_VENTDRAIN_SETTING, dicColCheck);
133
                    }
134

    
135
                    matched = names.FirstOrDefault(param => param == PSN_TOPOLOGY_RULE);
136
                    dicColCheck.Clear();
137
                    dicColCheck.Add("UID", "TEXT");
138
                    if (matched == null)
139
                    {
140
                        var query = $"CREATE TABLE {PSN_TOPOLOGY_RULE} (UID TEXT)";
141
                        using (var cmd = connection.GetSqlStringCommand(query))
142
                        {
143
                            cmd.ExecuteNonQuery();
144
                        }
145

    
146
                        DataTable topologyRule = new DataTable();
147
                        topologyRule.Columns.Add("NAME", typeof(string));
148

    
149
                        topologyRule.Rows.Add("FluidCode");
150
                        topologyRule.Rows.Add("-");
151
                        topologyRule.Rows.Add("PipingMaterialsClass");
152
                        topologyRule.Rows.Add("-");
153
                        topologyRule.Rows.Add("Tag Seq No");
154

    
155
                        SaveTopologyRule(topologyRule);
156
                    }
157
                    //else
158
                    //{
159
                    //    AddColumn(PSN_TOPOLOGY_RULE, dicColCheck);
160
                    //}
161

    
162
                    matched = names.FirstOrDefault(param => param == PSN_PIPESYSTEMNETWORK);
163
                    dicColCheck.Clear();
164
                    dicColCheck.Add("OID",                      "NVARCHAR(255)");
165
                    dicColCheck.Add("Type",                     "NVARCHAR(255)");
166
                    dicColCheck.Add("OrderNumber",              "NVARCHAR(255)");
167
                    dicColCheck.Add("Pipeline_OID",             "NVARCHAR(255)");
168
                    dicColCheck.Add("From_Data",                "NVARCHAR(255)");
169
                    dicColCheck.Add("To_Data", "NVARCHAR(255)");
170
                    dicColCheck.Add("TopologySet_OID_Key", "NVARCHAR(125)");
171
                    dicColCheck.Add("PSNRevisionNumber", "NVARCHAR(255)");
172
                    dicColCheck.Add("IsValid", "INT");
173
                    dicColCheck.Add("Status", "NVARCHAR(255)");
174
                    dicColCheck.Add("PBS", "NVARCHAR(255)");
175
                    dicColCheck.Add("Drawings", "NVARCHAR(255)");
176
                    dicColCheck.Add("IncludingVirtualData", "NVARCHAR(10)");
177
                    dicColCheck.Add("PSNAccuracy", "REAL");
178
                    dicColCheck.Add("Pocket", "NVARCHAR(10)");
179
                    
180
                    if (matched == null)
181
                    {
182
                        var query = $"CREATE TABLE {PSN_PIPESYSTEMNETWORK} (OID NVARCHAR(255), Type NVARCHAR(255), OrderNumber NVARCHAR(255), Pipeline_OID NVARCHAR(255), From_Data NVARCHAR(255), " +
183
                            "To_Data NVARCHAR(255), TopologySet_OID_Key NVARCHAR(125), PSNRevisionNumber NVARCHAR(255), IsValid INTEGER, Status NVARCHAR(255), PBS NVARCHAR(255), Drawings NVARCHAR(255), " +
184
                            "IncludingVirtualData NVARCHAR(10), PSNAccuracy REAL, Pocket NVARCHAR(10))";
185
                        using (var cmd = connection.GetSqlStringCommand(query))
186
                        {
187
                            cmd.ExecuteNonQuery();
188
                        }
189
                    }
190
                    else
191
                    {
192
                        AddColumn(PSN_PIPESYSTEMNETWORK, dicColCheck);
193
                    }
194

    
195
                    matched = names.FirstOrDefault(param => param == PSN_EQUIPMENT);
196
                    dicColCheck.Clear();
197
                    dicColCheck.Add("OID", "NVARCHAR(255)");
198
                    dicColCheck.Add("ItemTag", "NVARCHAR(255)");
199
                    dicColCheck.Add("Xcoords", "REAL");
200
                    dicColCheck.Add("Ycoords", "REAL");
201
                    if (matched == null)
202
                    {
203
                        var query = $"CREATE TABLE {PSN_EQUIPMENT} (OID NVARCHAR(255), ItemTag NVARCHAR(255), Xcoords REAL, Ycoords REAL)";
204
                        using (var cmd = connection.GetSqlStringCommand(query))
205
                        {
206
                            cmd.ExecuteNonQuery();
207
                        }
208
                    }
209
                    else
210
                    {
211
                        AddColumn(PSN_EQUIPMENT, dicColCheck);
212
                    }
213

    
214
                    dicColCheck.Clear();
215
                    dicColCheck.Add("OID", "NVARCHAR(255)");
216
                    dicColCheck.Add("ItemTag", "NVARCHAR(255)");
217
                    dicColCheck.Add("Xcoords", "REAL");
218
                    dicColCheck.Add("Ycoords", "REAL");
219
                    dicColCheck.Add("Equipment_OID", "NVARCHAR(255)");
220
                    dicColCheck.Add("Fluid", "NVARCHAR(255)");
221
                    dicColCheck.Add("NPD", "NVARCHAR(255)");
222
                    dicColCheck.Add("PMC", "NVARCHAR(255)");
223
                    dicColCheck.Add("Rotation", "REAL");
224
                    dicColCheck.Add("FlowDirection", "NVARCHAR(255)");
225

    
226
                    matched = names.FirstOrDefault(param => param == PSN_NOZZLE);
227
                    if (matched == null)
228
                    {
229
                        var query = $"CREATE TABLE {PSN_NOZZLE} (OID NVARCHAR(255), ItemTag NVARCHAR(255), Xcoords REAL, Ycoords REAL, Equipment_OID NVARCHAR(255), " +
230
                            "Fluid NVARCHAR(255), NPD NVARCHAR(255), PMC NVARCHAR(255), Rotation REAL, FlowDirection NVARCHAR(255))";
231
                        using (var cmd = connection.GetSqlStringCommand(query))
232
                        {
233
                            cmd.ExecuteNonQuery();
234
                        }
235
                    }
236
                    else
237
                    {
238
                        AddColumn(PSN_NOZZLE, dicColCheck);
239
                    }
240

    
241
                    matched = names.FirstOrDefault(param => param == PSN_FLUIDCODE);
242
                    dicColCheck.Clear();
243
                    dicColCheck.Add("UID", "NVARCHAR(50)");
244
                    dicColCheck.Add("Code", "NVARCHAR(255)");
245
                    dicColCheck.Add("Description", "NVARCHAR(255)");
246
                    dicColCheck.Add("Condition", "NVARCHAR(255)");
247
                    dicColCheck.Add("Remarks", "NVARCHAR(255)");
248
                    dicColCheck.Add("GroundLevel", "NVARCHAR(20)");
249
                    if (matched == null)
250
                    {
251
                        var query = $"CREATE TABLE {PSN_FLUIDCODE} (UID NVARCHAR(50), Code NVARCHAR(255), Description NVARCHAR(255), Condition NVARCHAR(255), Remarks NVARCHAR(255), GroundLevel NVARCHAR(20))";
252
                        using (var cmd = connection.GetSqlStringCommand(query))
253
                        {
254
                            cmd.ExecuteNonQuery();
255
                        }
256
                    }
257
                    else
258
                    {
259
                        AddColumn(PSN_FLUIDCODE, dicColCheck);
260
                    }
261

    
262
                    matched = names.FirstOrDefault(param => param == PSN_PIPINGMATLCLASS);
263
                    dicColCheck.Clear();
264
                    dicColCheck.Add("UID", "NVARCHAR(50)");
265
                    dicColCheck.Add("Priority", "INTEGER");
266
                    dicColCheck.Add("Code", "NVARCHAR(255)");
267
                    dicColCheck.Add("Description", "NVARCHAR(255)");
268
                    dicColCheck.Add("Condition", "NVARCHAR(255)");
269
                    dicColCheck.Add("Remarks", "NVARCHAR(255)");
270
                    dicColCheck.Add("GroundLevel", "NVARCHAR(20)");
271
                    if (matched == null)
272
                    {
273
                        var query = $"CREATE TABLE {PSN_PIPINGMATLCLASS} (UID NVARCHAR(50), Priority INTEGER, Code NVARCHAR(255), Description NVARCHAR(255), Condition NVARCHAR(255), Remarks NVARCHAR(255), GroundLevel NVARCHAR(20))";
274
                        using (var cmd = connection.GetSqlStringCommand(query))
275
                        {
276
                            cmd.ExecuteNonQuery();
277
                        }
278
                    }
279
                    else
280
                    {
281
                        AddColumn(PSN_PIPINGMATLCLASS, dicColCheck);
282
                    }
283

    
284
                    matched = names.FirstOrDefault(param => param == PSN_SEQUENCEDATA);
285
                    dicColCheck.Clear();
286
                    dicColCheck.Add("OID", "NVARCHAR(255)");
287
                    dicColCheck.Add("SERIALNUMBER", "NVARCHAR(255)");
288
                    dicColCheck.Add("PathItem_OID", "NVARCHAR(255)");
289
                    dicColCheck.Add("TopologySet_OID_Key", "NVARCHAR(255)");
290
                    if (matched == null)
291
                    {
292
                        var query = $"CREATE TABLE {PSN_SEQUENCEDATA} (OID NVARCHAR(255), SERIALNUMBER NVARCHAR(255), PathItem_OID NVARCHAR(255), TopologySet_OID_Key NVARCHAR(255))";
293
                        using (var cmd = connection.GetSqlStringCommand(query))
294
                        {
295
                            cmd.ExecuteNonQuery();
296
                        }
297
                    }
298
                    else
299
                    {
300
                        AddColumn(PSN_SEQUENCEDATA, dicColCheck);
301
                    }
302

    
303
                    matched = names.FirstOrDefault(param => param == PSN_PATHITEMS);
304
                    dicColCheck.Clear();
305
                    dicColCheck.Add("OID", "NVARCHAR(255)");
306
                    dicColCheck.Add("SequenceData_OID", "NVARCHAR(255)");
307
                    dicColCheck.Add("TopologySet_OID", "NVARCHAR(255)");
308
                    dicColCheck.Add("BranchTopologySet_OID", "NVARCHAR(255)");
309
                    dicColCheck.Add("PipeLine_OID", "NVARCHAR(255)");
310
                    dicColCheck.Add("ItemName", "NVARCHAR(255)");
311
                    dicColCheck.Add("ItemTag", "NVARCHAR(255)");
312
                    dicColCheck.Add("DESCRIPTION", "NVARCHAR(255)");
313
                    dicColCheck.Add("CLASS", "NVARCHAR(255)");
314
                    dicColCheck.Add("SUBCLASS", "NVARCHAR(255)");
315
                    dicColCheck.Add("TYPE", "NVARCHAR(255)");
316
                    dicColCheck.Add("PIDNAME", "NVARCHAR(255)");
317
                    dicColCheck.Add("Equipment_OID", "NVARCHAR(255)");
318
                    dicColCheck.Add("NPD", "NVARCHAR(255)");
319
                    dicColCheck.Add("GROUPTAG", "NVARCHAR(255)");
320
                    dicColCheck.Add("PipeSystemNetwork_OID", "NVARCHAR(255)");
321
                    dicColCheck.Add("PipeRun_OID", "NVARCHAR(255)");
322
                    dicColCheck.Add("ViewPipeSystemNetwork_OID", "NVARCHAR(255)");
323

    
324
                    if (matched == null)
325
                    {
326
                        var query = $"CREATE TABLE {PSN_PATHITEMS} (OID NVARCHAR(255), SequenceData_OID NVARCHAR(255), " +
327
                            "TopologySet_OID NVARCHAR(255), BranchTopologySet_OID NVARCHAR(255), PipeLine_OID NVARCHAR(255), ItemName NVARCHAR(255), ItemTag NVARCHAR(255), DESCRIPTION NVARCHAR(255), " +
328
                            "CLASS NVARCHAR(255), SUBCLASS NVARCHAR(255), TYPE NVARCHAR(255), PIDNAME NVARCHAR(255), Equipment_OID NVARCHAR(255), NPD NVARCHAR(255), GROUPTAG NVARCHAR(255), PipeSystemNetwork_OID NVARCHAR(255), PipeRun_OID NVARCHAR(255), " +
329
                            "ViewPipeSystemNetwork_OID NVARCHAR(255))";
330
                        using (var cmd = connection.GetSqlStringCommand(query))
331
                        {
332
                            cmd.ExecuteNonQuery();
333
                        }
334
                    }
335
                    else
336
                    {
337
                        AddColumn(PSN_PATHITEMS, dicColCheck);
338
                    }
339

    
340
                    matched = names.FirstOrDefault(param => param == PSN_VIEW);
341
                    dicColCheck.Clear();
342
                    dicColCheck.Add("OID", "TEXT");
343
                    if (matched == null)
344
                    {
345
                        var query = $"CREATE TABLE {PSN_VIEW} (OID TEXT)";
346
                        using (var cmd = connection.GetSqlStringCommand(query))
347
                        {
348
                            cmd.ExecuteNonQuery();
349
                        }
350
                    }
351

    
352
                    matched = names.FirstOrDefault(param => param == PSN_TOPOLOGYSET);
353
                    dicColCheck.Clear();
354
                    dicColCheck.Add("OID", "NVARCHAR(255)");
355
                    dicColCheck.Add("Type", "NVARCHAR(255)");
356
                    dicColCheck.Add("SubType", "NVARCHAR(255)");
357
                    dicColCheck.Add("HeadItemTag", "NVARCHAR(255)");
358
                    dicColCheck.Add("TailItemTag", "NVARCHAR(255)");
359
                    dicColCheck.Add("HeadItemSPID", "NVARCHAR(255)");
360
                    dicColCheck.Add("TailItemSPID", "NVARCHAR(255)");
361

    
362
                    if (matched == null)
363
                    {
364
                        var query = $"CREATE TABLE {PSN_TOPOLOGYSET} (OID NVARCHAR(255), Type NVARCHAR(255), SubType NVARCHAR(255), HeadItemTag NVARCHAR(255), TailItemTag NVARCHAR(255), HeadItemSPID NVARCHAR(255), TailItemSPID NVARCHAR(255))";
365
                        using (var cmd = connection.GetSqlStringCommand(query))
366
                        {
367
                            cmd.ExecuteNonQuery();
368
                        }
369
                    }
370
                    else
371
                    {
372
                        AddColumn(PSN_TOPOLOGYSET, dicColCheck);
373
                    }
374

    
375
                    matched = names.FirstOrDefault(param => param == PSN_TRANSFORMKEYWORD_SETTING);
376
                    dicColCheck.Clear();
377
                    dicColCheck.Add("[INDEX]", "INTEGER");
378
                    dicColCheck.Add("[NAME]", "TEXT");
379
                    dicColCheck.Add("[KEYWORD]", "TEXT");
380
                    if (matched == null)
381
                    {
382
                        var query = $"CREATE TABLE {PSN_TRANSFORMKEYWORD_SETTING} ([INDEX] INTEGER, [NAME] TEXT, [KEYWORD] TEXT)";
383
                        using (var cmd = connection.GetSqlStringCommand(query))
384
                        {
385
                            cmd.ExecuteNonQuery();
386
                        }
387
                    }
388
                    else
389
                    {
390
                        AddColumn(PSN_TRANSFORMKEYWORD_SETTING, dicColCheck);
391
                    }
392

    
393
                    matched = names.FirstOrDefault(param => param == PSN_PIPELINE);
394
                    dicColCheck.Clear();
395
                    dicColCheck.Add("OID", "NVARCHAR(255)");
396
                    dicColCheck.Add("PipeSystem_OID", "NVARCHAR(255)");
397
                    dicColCheck.Add("FLUID", "NVARCHAR(255)");
398
                    dicColCheck.Add("PMC", "NVARCHAR(255)");
399
                    dicColCheck.Add("SEQNUMBER", "NVARCHAR(255)");
400
                    dicColCheck.Add("INSULATION", "NVARCHAR(255)");
401
                    dicColCheck.Add("FROM_DATA", "NVARCHAR(255)");
402
                    dicColCheck.Add("TO_DATA", "NVARCHAR(255)");
403
                    dicColCheck.Add("Unit", "NVARCHAR(100)");
404
                    if (matched == null)
405
                    {
406
                        var query = $"CREATE TABLE {PSN_PIPELINE} (OID NVARCHAR(255), PipeSystem_OID NVARCHAR(255), FLUID NVARCHAR(255), PMC NVARCHAR(255), SEQNUMBER NVARCHAR(255), INSULATION NVARCHAR(255), " +
407
                            $"FROM_DATA NVARCHAR(255), TO_DATA NVARCHAR(255), Unit NVARCHAR(100))";
408
                        using (var cmd = connection.GetSqlStringCommand(query))
409
                        {
410
                            cmd.ExecuteNonQuery();
411
                        }
412
                    }
413
                    else
414
                    {
415
                        AddColumn(PSN_PIPELINE, dicColCheck);
416
                    }
417

    
418
                    matched = names.FirstOrDefault(param => param == PSN_INSULATIONPURPOSE);
419
                    dicColCheck.Clear();
420
                    dicColCheck.Add("UID", "NVARCHAR(50)");
421
                    dicColCheck.Add("Code", "NVARCHAR(255)");
422
                    dicColCheck.Add("Description", "NVARCHAR(255)");
423
                    dicColCheck.Add("Remarks", "NVARCHAR(255)");
424
                    if (matched == null)
425
                    {
426
                        var query = $"CREATE TABLE {PSN_INSULATIONPURPOSE} (UID NVARCHAR(50), Code NVARCHAR(255), Description NVARCHAR(255), Remarks NVARCHAR(255))";
427
                        using (var cmd = connection.GetSqlStringCommand(query))
428
                        {
429
                            cmd.ExecuteNonQuery();
430
                        }
431
                    }
432
                    else
433
                    {
434
                        AddColumn(PSN_INSULATIONPURPOSE, dicColCheck);
435
                    }
436

    
437
                    matched = names.FirstOrDefault(param => param == PSN_VALVEGROUP_SETTING);
438
                    dicColCheck.Clear();
439
                    dicColCheck.Add("OID", "NVARCHAR(255)");
440
                    dicColCheck.Add("GroupType", "NVARCHAR(255)");
441
                    dicColCheck.Add("TagIdentifier", "NVARCHAR(50)");
442
                    dicColCheck.Add("AttributeName", "NVARCHAR(255)");
443
                    dicColCheck.Add("SppidSymbolName", "NVARCHAR(255)");
444
                    if (matched == null)
445
                    {
446
                        var query = $"CREATE TABLE {PSN_VALVEGROUP_SETTING} (OID NVARCHAR(255), GroupType NVARCHAR(255), TagIdentifier NVARCHAR(50), AttributeName NVARCHAR(255), SppidSymbolName NVARCHAR(255))";
447
                        using (var cmd = connection.GetSqlStringCommand(query))
448
                        {
449
                            cmd.ExecuteNonQuery();
450
                        }
451
                    }
452
                    else
453
                    {
454
                        AddColumn(PSN_VALVEGROUP_SETTING, dicColCheck);
455
                    }
456

    
457
                    matched = names.FirstOrDefault(param => param == PSN_PIPESYSTEM);
458
                    dicColCheck.Clear();
459
                    dicColCheck.Add("OID", "NVARCHAR(255)");
460
                    dicColCheck.Add("DESCRIPTION", "NVARCHAR(255)");
461
                    dicColCheck.Add("FLUID", "NVARCHAR(255)");
462
                    dicColCheck.Add("PMC", "NVARCHAR(255)");
463
                    dicColCheck.Add("PipeLineQty", "NVARCHAR(255)");
464
                    dicColCheck.Add("GroundLevel", "NVARCHAR(20)");
465
                    if (matched == null)
466
                    {
467
                        var query = $"CREATE TABLE {PSN_PIPESYSTEM} (OID NVARCHAR(255), DESCRIPTION NVARCHAR(255), FLUID NVARCHAR(255), PMC NVARCHAR(255), PipeLineQty NVARCHAR(255), GroundLevel NVARCHAR(20))";
468
                        using (var cmd = connection.GetSqlStringCommand(query))
469
                        {
470
                            cmd.ExecuteNonQuery();
471
                        }
472
                    }
473
                    else
474
                    {
475
                        AddColumn(PSN_PIPESYSTEM, dicColCheck);
476
                    }
477

    
478
                    matched = names.FirstOrDefault(param => param == PSN_NOPOCKETSETTING);
479
                    dicColCheck.Clear();
480
                    dicColCheck.Add("[INDEX]", "INTEGER");
481
                    dicColCheck.Add("[TYPE]", "TEXT");
482
                    dicColCheck.Add("[NAME]", "TEXT");
483
                    if (matched == null)
484
                    {
485
                        var query = $"CREATE TABLE {PSN_NOPOCKETSETTING} ([INDEX] INTEGER, [TYPE] TEXT, [NAME] TEXT)";
486
                        using (var cmd = connection.GetSqlStringCommand(query))
487
                        {
488
                            cmd.ExecuteNonQuery();
489
                        }
490
                    }
491
                    else
492
                    {
493
                        AddColumn(PSN_NOPOCKETSETTING, dicColCheck);
494
                    }
495

    
496

    
497
                    void AddColumn(string TableName, Dictionary<string, string> dicCol)
498
                    {
499
                        var colnames = connection.GetColumnNames(TableName);
500
                        bool check = false;
501
                        if (colnames != null)
502
                        {
503
                            foreach (KeyValuePair<string, string> col in dicCol)
504
                            {
505
                                check = false;
506
                                foreach (string c in colnames)
507
                                {
508
                                    if (col.Key.Contains(c))
509
                                    {
510
                                        check = true;
511
                                        break;
512
                                    }
513
                                }
514

    
515
                                if (!check) //없으면 추가
516
                                {
517
                                    string i = string.Empty;
518
                                    if (col.Value.ToString().ToUpper().Contains("INT") || col.Value.ToString().ToUpper().Contains("REAL"))
519
                                        i = "DEFAULT 0";
520

    
521
                                    var query = $"ALTER TABLE " + TableName + " ADD [" + col.Key + "] " + col.Value + " " + i + ";";
522
                                    using (var cmd = connection.GetSqlStringCommand(query))
523
                                    {
524
                                        cmd.ExecuteNonQuery();
525
                                    }
526
                                }
527
                            }
528
                        }
529
                    }
530

    
531
                    result = true;
532
                }
533
                catch (Exception ex)
534
                {
535
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
536
                }
537
            }
538

    
539
            return result;
540
        }
541

    
542
        // ID2 DB 데이터
543
        /// <summary>
544
        /// ID2 데이타베이스에서 OPC 데이터를 조회
545
        /// </summary>
546
        /// <returns></returns>
547
        public static DataTable SelectOPCRelations()
548
        {
549
            DataTable dt = null;
550
            ID2Info id2Info = ID2Info.GetInstance();
551

    
552
            using (IAbstractDatabase connection = id2Info.CreateConnection())
553
            {
554
                try
555
                {
556
                    var query = "SELECT * FROM OPCRelations;";
557
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
558
                    {
559
                        dt = ds.Tables[0].Copy();
560
                    }
561
                }
562
                catch (Exception ex)
563
                {
564
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
565
                }
566
            }
567

    
568
            return dt;
569
        }
570

    
571
        /// <summary>
572
        /// ID2 데이타베이스에서 도면 데이터를 조회
573
        /// </summary>
574
        /// <returns></returns>
575
        public static DataTable SelectDrawings()
576
        {
577
            DataTable dt = null;
578
            ID2Info id2Info = ID2Info.GetInstance();
579

    
580
            using (IAbstractDatabase connection = id2Info.CreateConnection())
581
            {
582
                try
583
                {
584
                    var query = "SELECT DISTINCT NAME FROM [Drawings]";
585
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
586
                    {
587
                        dt = ds.Tables[0].Copy();
588
                    }
589
                }
590
                catch (Exception ex)
591
                {
592
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
593
                }
594
            }
595

    
596
            return dt;
597
        }
598

    
599
        public static DataTable AllDrawings()
600
        {
601
            DataTable dt = null;
602
            ID2Info id2Info = ID2Info.GetInstance();
603

    
604
            using (IAbstractDatabase connection = id2Info.CreateConnection())
605
            {
606
                try
607
                {
608
                    var query = "SELECT * FROM [Drawings]";
609
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
610
                    {
611
                        dt = ds.Tables[0].Copy();
612
                    }
613
                }
614
                catch (Exception ex)
615
                {
616
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
617
                }
618
            }
619

    
620
            return dt;
621
        }
622

    
623
        public static DataTable SelectLineProperties()
624
        {
625
            DataTable dt = null;
626
            ID2Info id2Info = ID2Info.GetInstance();
627

    
628
            using (IAbstractDatabase connection = id2Info.CreateConnection())
629
            {
630
                try
631
                {
632
                    var query = "SELECT * FROM LineProperties";
633
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
634
                    {
635
                        dt = ds.Tables[0].Copy();
636
                    }
637
                }
638
                catch (Exception ex)
639
                {
640
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
641
                }
642
            }
643

    
644
            return dt;
645
        }
646

    
647
        public static DataTable SelectFluidCode()
648
        {
649
            DataTable dt = null;
650
            ID2Info id2Info = ID2Info.GetInstance();
651

    
652
            using (IAbstractDatabase connection = id2Info.CreateConnection())
653
            {
654
                try
655
                {
656
                    var query = "SELECT * FROM FluidCode";
657
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
658
                    {
659
                        dt = ds.Tables[0].Copy();
660
                    }
661
                }
662
                catch (Exception ex)
663
                {
664
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
665
                }
666
            }
667

    
668
            return dt;
669
        }
670

    
671
        public static DataTable SelectPipingMaterialsClass()
672
        {
673
            DataTable dt = null;
674
            ID2Info id2Info = ID2Info.GetInstance();
675

    
676
            using (IAbstractDatabase connection = id2Info.CreateConnection())
677
            {
678
                try
679
                {
680
                    var query = "SELECT * FROM PipingMaterialsClass";
681
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
682
                    {
683
                        dt = ds.Tables[0].Copy();
684
                    }
685
                }
686
                catch (Exception ex)
687
                {
688
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
689
                }
690
            }
691

    
692
            return dt;
693
        }
694

    
695
        public static DataTable SelectPSNPIPINGMATLCLASS()
696
        {
697
            DataTable dt = null;
698
            ID2Info id2Info = ID2Info.GetInstance();
699

    
700
            using (IAbstractDatabase connection = id2Info.CreateConnection())
701
            {
702
                try
703
                {
704
                    var query = $"SELECT * FROM {PSN_PIPINGMATLCLASS}";
705
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
706
                    {
707
                        dt = ds.Tables[0].Copy();
708
                    }
709
                }
710
                catch (Exception ex)
711
                {
712
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
713
                }
714
            }
715

    
716
            return dt;
717
        }
718
        
719
        public static DataTable SelectInsulationPurpose()
720
        {
721
            DataTable dt = null;
722
            ID2Info id2Info = ID2Info.GetInstance();
723

    
724
            using (IAbstractDatabase connection = id2Info.CreateConnection())
725
            {
726
                try
727
                {
728
                    var query = "SELECT * FROM InsulationPurpose";
729
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
730
                    {
731
                        dt = ds.Tables[0].Copy();
732
                    }
733
                }
734
                catch (Exception ex)
735
                {
736
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
737
                }
738
            }
739

    
740
            return dt;
741
        }
742

    
743
        public static DataTable SelectPSNINSULATIONPURPOSE()
744
        {
745
            DataTable dt = null;
746
            ID2Info id2Info = ID2Info.GetInstance();
747

    
748
            using (IAbstractDatabase connection = id2Info.CreateConnection())
749
            {
750
                try
751
                {
752
                    var query = $"SELECT * FROM {PSN_INSULATIONPURPOSE}";
753
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
754
                    {
755
                        dt = ds.Tables[0].Copy();
756
                    }
757
                }
758
                catch (Exception ex)
759
                {
760
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
761
                }
762
            }
763

    
764
            return dt;
765
        }
766

    
767
        public static DataTable SelectNominalDiameter()
768
        {
769
            DataTable dt = null;
770
            ID2Info id2Info = ID2Info.GetInstance();
771

    
772
            using (IAbstractDatabase connection = id2Info.CreateConnection())
773
            {
774
                try
775
                {
776
                    var query = "SELECT * FROM NominalDiameter ORDER BY Metric DESC";
777
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
778
                    {
779
                        dt = ds.Tables[0].Copy();
780
                    }
781
                }
782
                catch (Exception ex)
783
                {
784
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
785
                }
786
            }
787

    
788
            ///TODO: need to check below code
789
            dt.Rows.RemoveAt(0);
790
            dt.Rows.RemoveAt(0);
791
            dt.Rows.RemoveAt(0);
792
            dt.Rows.RemoveAt(0);
793

    
794
            return dt;
795
        }
796

    
797
        public static DataTable SelectAllSymbolAttribute()
798
        {
799
            DataTable dt = null;
800
            ID2Info id2Info = ID2Info.GetInstance();
801

    
802
            using (IAbstractDatabase connection = id2Info.CreateConnection())
803
            {
804
                try
805
                {
806
                    var query = "SELECT B.Name AS SymbolName, Attribute AS SymbolAttribute, A.SymbolType_UID ,Attribute ,DisplayAttribute ,AttributeType, Expression FROM SymbolAttribute A INNER JOIN Symbol B ON A.SymbolType_UID = B.SymbolType_UID; ";
807
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
808
                    {
809
                        dt = ds.Tables[0].Copy();
810
                    }
811
                }
812
                catch (Exception ex)
813
                {
814
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
815
                }
816
            }
817

    
818
            return dt;
819
        }
820

    
821
        public static DataTable SelectSymbolAttribute()
822
        {
823
            DataTable dt = null;
824
            ID2Info id2Info = ID2Info.GetInstance();
825

    
826
            using (IAbstractDatabase connection = id2Info.CreateConnection())
827
            {
828
                try
829
                {
830
                   // var query = "SELECT DISTINCT Attribute, DisplayAttribute FROM SymbolAttribute;";
831
                    var query = "SELECT DISTINCT Attribute FROM SymbolAttribute;";
832
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
833
                    {
834
                        dt = ds.Tables[0].Copy();
835
                    }
836
                }
837
                catch (Exception ex)
838
                {
839
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
840
                }
841
            }
842

    
843
            return dt;
844
        }
845

    
846
        public static DataTable SelectSymbolName()
847
        {
848
            DataTable dt = null;
849
            ID2Info id2Info = ID2Info.GetInstance();
850

    
851
            using (IAbstractDatabase connection = id2Info.CreateConnection())
852
            {
853
                try
854
                {
855
                    var query = "SELECT * FROM SymbolName;";
856
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
857
                    {
858
                        dt = ds.Tables[0].Copy();
859
                    }
860
                }
861
                catch (Exception ex)
862
                {
863
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
864
                }
865
            }
866

    
867
            return dt;
868
        }
869

    
870
        public static double[] GetDrawingSize()
871
        {
872
            double[] result = null;
873

    
874
            ID2Info id2Info = ID2Info.GetInstance();
875
            using (IAbstractDatabase connection = id2Info.CreateConnection())
876
            {
877
                try
878
                {
879
                    var query = "SELECT value FROM Configuration WHERE Section = 'Area' AND [Key] = 'Drawing';";
880
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
881
                    {
882
                        if (ds.Tables[0].Rows.Count == 1)
883
                        {
884
                            string value = ds.Tables[0].Rows[0][0].ToString();
885
                            string[] split = value.Split(new char[] { ',' });
886
                            result = new double[] {
887
                                Convert.ToDouble(Regex.Replace(split[0], @"[^0-9]", string.Empty)),
888
                                Convert.ToDouble(Regex.Replace(split[1], @"[^0-9]", string.Empty)),
889
                                Convert.ToDouble(Regex.Replace(split[2], @"[^0-9]", string.Empty)),
890
                                Convert.ToDouble(Regex.Replace(split[3], @"[^0-9]", string.Empty))
891
                                };
892
                            result = new double[] {
893
                                Math.Min(result[0], result[2]),
894
                                Math.Min(result[1], result[3]),
895
                                Math.Max(result[0], result[2]),
896
                                Math.Max(result[1], result[3])
897
                                };
898
                        }
899
                    }
900
                }
901
                catch (Exception ex)
902
                {
903
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
904
                }
905
            }
906

    
907
            return result;
908
        }
909

    
910
        public static DataTable GetEquipmentType()
911
        {
912
            DataTable dt = null;
913
            ID2Info id2Info = ID2Info.GetInstance();
914

    
915
            using (IAbstractDatabase connection = id2Info.CreateConnection())
916
            {
917
                try
918
                {
919
                    var query = "SELECT Type FROM SymbolType WHERE Category = 'Equipment';";
920
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
921
                    {
922
                        dt = ds.Tables[0].Copy();
923
                    }
924
                }
925
                catch (Exception ex)
926
                {
927
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
928
                }
929
            }
930

    
931
            return dt;
932
        }
933

    
934
        /// <summary>
935
        ///  Zoom 을 위하여 저장 T_PSN_VIEW 데이터로 PSN 데이터지만 Msqql 과 Sqlite 둘다 저장되어 있음
936
        ///  => ID2 가 DB 타입에 따라서 바라보는 DB가 mssql이냐 sqlite냐로 지정되기 때문에 zoom 기능을 그대로 사용하려면 해당 데이터는 psn도 id2 dbtype에 맞춰서 저장 및 로드해야함
937
        ///  => 더 이상 사용하지 않음
938
        /// </summary>
939
        /// <param name="values"></param>
940
        /// <returns></returns>
941
        public static bool SaveView(List<string> values)
942
        {
943
            ID2Info id2Info = ID2Info.GetInstance();
944

    
945
            bool result = true;
946

    
947
            using (IAbstractDatabase connection = id2Info.CreateConnection())
948
            {
949
                try
950
                {
951
                    using (var txn = connection.BeginTransaction())
952
                    {
953
                        try
954
                        {
955
                            var query = $"DELETE FROM {PSN_VIEW}";
956
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
957

    
958
                            foreach (string value in values)
959
                            {
960
                                query = $"INSERT INTO {PSN_VIEW} (OID) VALUES (@OID)";
961
                                var cmd = connection.GetSqlStringCommand(query);
962
                                AddWithValue(cmd, "@OID", value);
963
                                connection.ExecuteNonQuery(cmd, txn);
964
                            }
965
                            txn.Commit();
966
                        }
967
                        catch (Exception ex)
968
                        {
969
                            txn.Rollback();
970
                            result = false;
971
                        }
972
                    }
973
                }
974
                catch (Exception ex)
975
                {
976
                    System.Windows.Forms.MessageBox.Show(ex.Message);
977
                    result = false;
978
                }
979
            }
980

    
981
            return result;
982
        }
983

    
984
        public static bool DeleteView()
985
        {
986
            ID2Info id2Info = ID2Info.GetInstance();
987

    
988
            bool result = true;
989
            using (IAbstractDatabase connection = id2Info.CreateConnection())
990
            {
991
                try
992
                {
993
                    using (var txn = connection.BeginTransaction())
994
                    {
995
                        try
996
                        {
997
                            var query = $"DELETE FROM {PSN_VIEW}";
998
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
999
                            txn.Commit();
1000
                        }
1001
                        catch (Exception ex)
1002
                        {
1003
                            txn.Rollback();
1004
                            result = false;
1005
                        }
1006
                    }
1007
                }
1008
                catch (Exception ex)
1009
                {
1010
                    System.Windows.Forms.MessageBox.Show(ex.Message);
1011
                    result = false;
1012
                }
1013
            }
1014

    
1015
            return result;
1016
        }
1017

    
1018
        //PSN Sqlite 
1019
        public static DataTable SelectHeaderSetting()
1020
        {
1021
            DataTable dt = null;
1022
            ID2Info id2Info = ID2Info.GetInstance();
1023

    
1024
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1025
            {
1026
                try
1027
                {
1028
                    var query = $@"SELECT GROUP_ID, DESCRIPTION, [INDEX], NAME FROM {PSN_HEADER_SETTING};";
1029
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1030
                    {
1031
                        dt = ds.Tables[0].Copy();
1032
                    }
1033
                }
1034
                catch (Exception ex)
1035
                {
1036
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1037
                }
1038
            }
1039

    
1040
            return dt;
1041
        }
1042

    
1043
        public static DataTable SelectVentDrainSetting()
1044
        {
1045
            DataTable dt = null;
1046
            ID2Info id2Info = ID2Info.GetInstance();
1047

    
1048
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1049
            {
1050
                try
1051
                {
1052
                    var query = $@"SELECT GROUP_ID, DESCRIPTION, [INDEX], NAME FROM {PSN_VENTDRAIN_SETTING};";
1053
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1054
                    {
1055
                        dt = ds.Tables[0].Copy();
1056
                    }
1057
                }
1058
                catch (Exception ex)
1059
                {
1060
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1061
                }
1062
            }
1063

    
1064
            return dt;
1065
        }
1066

    
1067
        public static DataTable SelectKeywordsSetting()
1068
        {
1069
            DataTable dt = null;
1070
            ID2Info id2Info = ID2Info.GetInstance();
1071

    
1072
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1073
            {
1074
                try
1075
                {
1076
                    var query = $@"SELECT [KEYWORD], [INDEX], [NAME] FROM {PSN_TRANSFORMKEYWORD_SETTING};";
1077
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1078
                    {
1079
                        dt = ds.Tables[0].Copy();
1080
                    }
1081
                }
1082
                catch (Exception ex)
1083
                {
1084
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1085
                }
1086
            }
1087

    
1088
            return dt;
1089
        }
1090

    
1091
        public static DataTable SelectValveGroupItemsSetting()
1092
        {
1093
            DataTable dt = null;
1094
            ID2Info id2Info = ID2Info.GetInstance();
1095

    
1096
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1097
            {
1098
                try
1099
                {
1100
                    var query = $@"SELECT OID, GroupType, TagIdentifier, AttributeName, SppidSymbolName FROM {PSN_VALVEGROUP_SETTING};";
1101
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1102
                    {
1103
                        dt = ds.Tables[0].Copy();
1104
                    }
1105
                }
1106
                catch (Exception ex)
1107
                {
1108
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1109
                }
1110
            }
1111

    
1112
            return dt;
1113
        }
1114

    
1115
  
1116
        public static DataTable SelectEquipmentNoPocketSetting()
1117
        {
1118
            DataTable dt = null;
1119
            ID2Info id2Info = ID2Info.GetInstance();
1120

    
1121
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1122
            {
1123
                try
1124
                {
1125
                    var query = $@"SELECT [INDEX], [TYPE], [NAME] FROM {PSN_NOPOCKETSETTING};";
1126
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1127
                    {
1128
                        dt = ds.Tables[0].Copy();
1129
                    }
1130
                }
1131
                catch (Exception ex)
1132
                {
1133
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1134
                }
1135
            }
1136

    
1137
            return dt;
1138
        }
1139

    
1140
        public static bool SaveHeaderSetting(List<HeaderInfo> headerInfos)
1141
        {
1142
            ID2Info id2Info = ID2Info.GetInstance();
1143
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1144
            {
1145
                try
1146
                {
1147
                    using (var txn = connection.BeginTransaction())
1148
                    {
1149
                        var query = $"DELETE FROM {PSN_HEADER_SETTING}";
1150
                        connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1151

    
1152
                        foreach (HeaderInfo headerInfo in headerInfos)
1153
                        {
1154
                            foreach (HeaderItem item in headerInfo.HeaderItems)
1155
                            {
1156
                                query = $"INSERT INTO {PSN_HEADER_SETTING} (GROUP_ID, DESCRIPTION, [INDEX], NAME) VALUES (@GROUP_ID, @DESCRIPTION, @INDEX, @NAME)";
1157
                                var cmd = connection.GetSqlStringCommand(query);
1158
                                AddWithValue(cmd, "@GROUP_ID", headerInfo.UID);
1159
                                AddWithValue(cmd, "@DESCRIPTION", headerInfo.Description);
1160
                                AddWithValue(cmd, "@INDEX", item.Index);
1161
                                AddWithValue(cmd, "@NAME", item.Name);
1162
                                connection.ExecuteNonQuery(cmd, txn);
1163
                            }
1164
                        }
1165
                        txn.Commit();
1166
                    }
1167
                    
1168
                }
1169
                catch (Exception ex)
1170
                {
1171
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1172
                    return false;
1173
                }
1174
            }
1175
            return true;
1176
        }
1177

    
1178
        public static bool SaveVentDrainSetting(List<VentDrainInfo> ventDrainInfos)
1179
        {
1180
            ID2Info id2Info = ID2Info.GetInstance();
1181
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1182
            {
1183
                using (var txn = connection.BeginTransaction())
1184
                {
1185
                    try
1186
                    {
1187
                        var query = $"DELETE FROM {PSN_VENTDRAIN_SETTING}";
1188
                        connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1189

    
1190
                        foreach (VentDrainInfo ventDrainInfo in ventDrainInfos)
1191
                        {
1192
                            foreach (VentDrainItem item in ventDrainInfo.VentDrainItems)
1193
                            {
1194
                                query = $"INSERT INTO {PSN_VENTDRAIN_SETTING} (GROUP_ID, DESCRIPTION, [INDEX], NAME) VALUES (@GROUP_ID, @DESCRIPTION, @INDEX, @NAME)";
1195
                                var cmd = connection.GetSqlStringCommand(query);
1196
                                AddWithValue(cmd, "@GROUP_ID", ventDrainInfo.UID);
1197
                                AddWithValue(cmd, "@DESCRIPTION", ventDrainInfo.Description);
1198
                                AddWithValue(cmd, "@INDEX", item.Index);
1199
                                AddWithValue(cmd, "@NAME", item.Name);
1200
                                connection.ExecuteNonQuery(cmd, txn);
1201
                            }
1202
                        }
1203

    
1204
                        txn.Commit();
1205
                    }
1206
                    catch (Exception ex)
1207
                    {
1208
                        Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1209
                        return false;
1210
                    }
1211
                }
1212
            }
1213

    
1214
            return true;
1215
        }
1216

    
1217
        public static bool SaveValveGroupItemsSetting(List<ValveGroupItem> valveGroupItems)
1218
        {
1219
            ID2Info id2Info = ID2Info.GetInstance();
1220
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1221
            {
1222
                using (var txn = connection.BeginTransaction())
1223
                {
1224
                    try
1225
                    {
1226
                        var query = $"DELETE FROM {PSN_VALVEGROUP_SETTING}";
1227
                        connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1228

    
1229
                        foreach (ValveGroupItem item in valveGroupItems)
1230
                        {
1231
                            query = $"INSERT INTO {PSN_VALVEGROUP_SETTING} (OID, GroupType, TagIdentifier, AttributeName, SppidSymbolName) " +
1232
                                $"VALUES (@OID, @GroupType, @TagIdentifier, @AttributeName, @SppidSymbolName)";
1233
                            var cmd = connection.GetSqlStringCommand(query);
1234
                            AddWithValue(cmd, "@OID", item.OID);
1235
                            AddWithValue(cmd, "@GroupType", item.GroupType);
1236
                            AddWithValue(cmd, "@TagIdentifier", item.TagIdentifier);
1237
                            AddWithValue(cmd, "@AttributeName", item.AttributeName);
1238
                            AddWithValue(cmd, "@SppidSymbolName", item.SppidSymbolName);
1239
                            connection.ExecuteNonQuery(cmd, txn);
1240
                        }
1241

    
1242
                        txn.Commit();
1243
                    }
1244
                    catch (Exception ex)
1245
                    {
1246
                        Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1247
                        return false;
1248
                    }
1249
                }
1250
            }
1251

    
1252
            return true;
1253
        }
1254

    
1255
        public static bool SaveKeywordsSetting(List<KeywordItem> keywordItems)
1256
        {
1257
            ID2Info id2Info = ID2Info.GetInstance();
1258
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1259
            {
1260
                using (var txn = connection.BeginTransaction())
1261
                {
1262
                    try
1263
                    {
1264
                        var query = $"DELETE FROM {PSN_TRANSFORMKEYWORD_SETTING}";
1265
                        connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1266
                        
1267
                        foreach (KeywordItem item in keywordItems)
1268
                        {
1269
                            query = $"INSERT INTO {PSN_TRANSFORMKEYWORD_SETTING} ([INDEX], NAME, KEYWORD) VALUES (@INDEX, @NAME, @KEYWORD)";
1270
                            var cmd = connection.GetSqlStringCommand(query);
1271
                            AddWithValue(cmd, "@INDEX", item.Index);
1272
                            AddWithValue(cmd, "@NAME", item.Name);
1273
                            AddWithValue(cmd, "@KEYWORD", item.Keyword);                            
1274
                            connection.ExecuteNonQuery(cmd, txn);
1275
                        }
1276
                        
1277
                        txn.Commit();
1278
                    }
1279
                    catch (Exception ex)
1280
                    {
1281
                        Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1282
                        return false;
1283
                    }
1284
                }
1285
            }
1286

    
1287
            return true;
1288
        }
1289

    
1290
        public static bool SaveEquipmentNopocketSetting(List<EquipmentNoPocketItem> keywordItems)
1291
        {
1292
            ID2Info id2Info = ID2Info.GetInstance();
1293
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1294
            {
1295
                using (var txn = connection.BeginTransaction())
1296
                {
1297
                    try
1298
                    {
1299
                        var query = $"DELETE FROM {PSN_NOPOCKETSETTING}";
1300
                        connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1301

    
1302
                        foreach (EquipmentNoPocketItem item in keywordItems)
1303
                        {
1304
                            query = $"INSERT INTO {PSN_NOPOCKETSETTING} ([INDEX], [TYPE], [NAME]) VALUES (@INDEX, @TYPE, @NAME)";
1305
                            var cmd = connection.GetSqlStringCommand(query);
1306
                            AddWithValue(cmd, "@INDEX", item.Index);
1307
                            AddWithValue(cmd, "@TYPE", item.Type);
1308
                            AddWithValue(cmd, "@NAME", item.Name);
1309
                            connection.ExecuteNonQuery(cmd, txn);
1310
                        }
1311

    
1312
                        txn.Commit();
1313
                    }
1314
                    catch (Exception ex)
1315
                    {
1316
                        Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1317
                        return false;
1318
                    }
1319
                }
1320
            }
1321

    
1322
            return true;
1323
        }
1324

    
1325
        public static bool SaveTopologyRule(DataTable dt)
1326
        {
1327
            ID2Info id2Info = ID2Info.GetInstance();
1328
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1329
            {
1330
                using (var txn = connection.BeginTransaction())
1331
                {
1332
                    try
1333
                    {
1334
                        var query = $"DELETE FROM {PSN_TOPOLOGY_RULE}";
1335
                        var cmd = connection.GetSqlStringCommand(query);
1336
                        //connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1337
                        connection.ExecuteNonQuery(cmd, txn);
1338

    
1339
                        foreach (DataRow row in dt.Rows)
1340
                        {
1341
                            query = $"INSERT INTO {PSN_TOPOLOGY_RULE} (UID) VALUES (@UID)";
1342
                            cmd = connection.GetSqlStringCommand(query);
1343
                            AddWithValue(cmd, "@UID", row["NAME"].ToString());
1344
                            connection.ExecuteNonQuery(cmd, txn);
1345
                        }
1346

    
1347
                        txn.Commit();
1348
                    }
1349
                    catch (Exception ex)
1350
                    {
1351
                        txn.Rollback();
1352
                        Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1353
                        return false;
1354
                    }
1355
                }
1356
            }
1357

    
1358
            return true;
1359
        }
1360

    
1361
        public static DataTable SelectTopologyRule()
1362
        {
1363
            DataTable dt = null;
1364

    
1365
            ID2Info id2Info = ID2Info.GetInstance();
1366
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1367
            {
1368
                try
1369
                {
1370
                    var query = $"SELECT * FROM {PSN_TOPOLOGY_RULE}";
1371
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1372
                    {
1373
                        dt = ds.Tables[0].Copy();
1374
                    }
1375
                }
1376
                catch (Exception ex)
1377
                {
1378
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1379
                }
1380
            }
1381

    
1382
            return dt;
1383
        }
1384

    
1385
        private static void AddWithValue(DbCommand cmd, string PropName, object Value)
1386
        {
1387
            var param = cmd.CreateParameter();
1388
            param.ParameterName = PropName;
1389
            param.Value = Value;
1390
            cmd.Parameters.Add(param);
1391
        }
1392

    
1393
        public static DataTable SelectRevisionTable()
1394
        {
1395
            DataTable dt = null;
1396
            ID2Info id2Info = ID2Info.GetInstance();
1397

    
1398
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1399
            {
1400
                try
1401
                {
1402
                    var query = $"SELECT T.name AS table_name, C.name AS column_name FROM ARS_COMMON.sys.tables AS T INNER JOIN ARS_COMMON.sys.columns AS C ON T.object_id = C.object_id WHERE T.name = 'PSNREVISION'";
1403
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1404
                    {
1405
                        dt = ds.Tables[0].Copy();
1406
                    }
1407
                }
1408
                catch (Exception ex)
1409
                {
1410
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1411
                }
1412
            }
1413

    
1414
            return dt;
1415
        }
1416

    
1417
        public static DataTable SelectRevision()
1418
        {
1419
            DataTable dt = null;
1420
            ID2Info id2Info = ID2Info.GetInstance();
1421

    
1422
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1423
            {
1424
                try
1425
                {
1426
                    var query = $"SELECT * FROM ARS_COMMON.dbo.PSNREVISION";
1427

    
1428
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
1429
                    {
1430
                        dt = ds.Tables[0].Copy();
1431
                    }
1432
                }
1433
                catch (Exception ex)
1434
                {
1435
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1436
                }
1437
            }
1438

    
1439
            return dt;
1440
        }
1441

    
1442
        public static bool ConnCreateRevisionTable(Dictionary<string, string> dicColCheck, List<string> names)
1443
        {
1444
            bool result = false;
1445
            ID2Info id2Info = ID2Info.GetInstance();
1446

    
1447
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1448
            {
1449
                try
1450
                {
1451
                    if (names.Count == 0)
1452
                    {
1453
                        
1454
                        var query = $"CREATE TABLE ARS_COMMON.dbo.PSNRevision ([OID] [uniqueidentifier] ,[Project_OID] [uniqueidentifier] ," +
1455
                            $"[ProjectCode] nvarchar(255), [RevNumber] int ,[UserName] nvarchar(255) ,[TimeData] nvarchar(255) ," +
1456
                            $"[PSNDatabasePath] nvarchar(255) ,	[PsnByPBSFilter] varchar(20) ,[PsnByNPDFilter] varchar(20) ,[PidDrawings] int ,	" +
1457
                            $"[PipeSystems] int ,[PipeLines] int ,[Topologies] int ,[PipeSystemNetworks] int ,[InValidPSNs] int ,[E2E] int ," +
1458
                            $"[E2B] int ,[B2E] int ,[HDE] int ,[HD2] int ,[HDB] int ,[B2B] int, [LastModificationdate] nvarchar(255))";
1459
                        using (var cmd = connection.GetSqlStringCommand(query))
1460
                        {
1461
                            cmd.ExecuteNonQuery();
1462
                        }
1463
                    }
1464
                    else
1465
                    {
1466
                        AddColumn(PSN_REVISION, dicColCheck, names);
1467
                    }
1468

    
1469
                    void AddColumn(string TableName, Dictionary<string, string> dicCol, List<string> colnames)
1470
                    {
1471
                        bool check = false;
1472
                        if (colnames != null)
1473
                        {
1474
                            foreach (KeyValuePair<string, string> col in dicCol)
1475
                            {
1476
                                check = false;
1477
                                foreach (string c in colnames)
1478
                                {
1479
                                    if (col.Key.Contains(c))
1480
                                    {
1481
                                        check = true;
1482
                                        break;
1483
                                    }
1484
                                }
1485

    
1486
                                if (!check) //없으면 추가
1487
                                {
1488
                                    string i = string.Empty;
1489
                                    if (col.Value.ToString().ToUpper().Contains("INT") || col.Value.ToString().ToUpper().Contains("REAL"))
1490
                                        i = "DEFAULT 0";
1491

    
1492
                                    var queryalter = $"ALTER TABLE ARS_COMMON.dbo.PSNRevision ADD [" + col.Key + "] " + col.Value + " " + i + ";";
1493
                                    using (var cmd = connection.GetSqlStringCommand(queryalter))
1494
                                    {
1495
                                        cmd.ExecuteNonQuery();
1496
                                    }
1497
                                }
1498
                            }
1499
                        }
1500
                    }
1501

    
1502
                    result = true;
1503
                }
1504
                catch (Exception ex)
1505
                {
1506
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
1507
                }
1508
            }
1509

    
1510
            return result;
1511
        }
1512

    
1513
        public static bool UpdateRevision(string TimeData, string ProjectCode, int RevNumber, string UserName, string PSNDatabasePath, string PsnByPBSFilter, string PsnByNPDFilter,
1514
           int PidDrawings, int PipeSystems, int PipeLines, int Topologies, int PipeSystemNetworks, int InValidPSNs, int E2E, int E2B, int B2E, int HDE, int HD2, int HDB, int B2B)
1515
        {
1516
            ID2Info id2Info = ID2Info.GetInstance();
1517
            bool result = true;
1518

    
1519
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1520
            {
1521
                try
1522
                {
1523
                    using (var txn = connection.BeginTransaction())
1524
                    {
1525
                        try
1526
                        {
1527
                            string where = string.Format("DELETE FROM ARS_COMMON.dbo.PSNRevision WHERE ProjectCode = '{0}' AND PSNDatabasePath = '{1}' AND RevNumber = {2}", ProjectCode, PSNDatabasePath, RevNumber);
1528
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(where), txn);
1529
                            var query = $"INSERT INTO ARS_COMMON.dbo.PSNRevision (OID, Project_OID, ProjectCode, RevNumber, UserName, TimeData, PSNDatabasePath, " +
1530
                                $"PsnByPBSFilter, PsnByNPDFilter, PidDrawings, PipeSystems, PipeLines, Topologies, PipeSystemNetworks, InValidPSNs, E2E, E2B, B2E, HDE, " +
1531
                                $"HD2, HDB, B2B, LastModificationdate) VALUES (NEWID(), NEWID(), @ProjectCode, @RevNumber, @UserName, @TimeData, @PSNDatabasePath" +
1532
                                $", @PsnByPBSFilter, @PsnByNPDFilter, @PidDrawings, @PipeSystems, @PipeLines, @Topologies, @PipeSystemNetworks, @InValidPSNs, " +
1533
                                $"@E2E, @E2B, @B2E, @HDE, @HD2, @HDB, @B2B, @LastModificationdate)";
1534
                            var cmd = connection.GetSqlStringCommand(query);
1535
                      
1536
                            AddWithValue(cmd, "@ProjectCode", ProjectCode);
1537
                            AddWithValue(cmd, "@RevNumber", RevNumber);
1538
                            AddWithValue(cmd, "@UserName", UserName);
1539
                            AddWithValue(cmd, "@TimeData", TimeData); //String.Format("{0:G}", dt) // DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
1540

    
1541
                            AddWithValue(cmd, "@PSNDatabasePath", PSNDatabasePath);
1542

    
1543
                            AddWithValue(cmd, "@PsnByPBSFilter", PsnByPBSFilter);
1544
                            AddWithValue(cmd, "@PsnByNPDFilter", PsnByNPDFilter);
1545
                            AddWithValue(cmd, "@PidDrawings", PidDrawings);
1546
                            AddWithValue(cmd, "@PipeSystems", PipeSystems);
1547
                            AddWithValue(cmd, "@PipeLines", PipeLines);
1548

    
1549
                            AddWithValue(cmd, "@Topologies", Topologies);
1550
                            AddWithValue(cmd, "@PipeSystemNetworks", PipeSystemNetworks);
1551
                            AddWithValue(cmd, "@InValidPSNs", InValidPSNs);
1552
                            AddWithValue(cmd, "@E2E", E2E);
1553
                            AddWithValue(cmd, "@E2B", E2B);
1554
                            AddWithValue(cmd, "@B2E", B2E);
1555
                            AddWithValue(cmd, "@HDE", HDE);
1556
                            AddWithValue(cmd, "@HD2", HD2);
1557
                            AddWithValue(cmd, "@HDB", HDB);
1558
                            AddWithValue(cmd, "@B2B", B2B);
1559
                            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
1560
                            DateTime oDateTime = DateTime.Now;
1561
                            AddWithValue(cmd, "@LastModificationdate", oDateTime.ToString(ci));
1562
                            connection.ExecuteNonQuery(cmd, txn);
1563

    
1564
                            txn.Commit();
1565
                        }
1566
                        catch (Exception ex)
1567
                        {
1568
                            txn.Rollback();
1569
                            result = false;
1570
                        }
1571
                    }
1572
                }
1573
                catch (Exception ex)
1574
                {
1575
                    System.Windows.Forms.MessageBox.Show(ex.Message);
1576
                    result = false;
1577
                }
1578
            }
1579

    
1580
            return result;
1581
        }
1582

    
1583

    
1584
        public static bool SaveRevision(string ProjectCode, int RevNumber, string UserName, string PSNDatabasePath, string PsnByPBSFilter, string PsnByNPDFilter,
1585
            int PidDrawings, int PipeSystems, int PipeLines, int Topologies, int PipeSystemNetworks, int InValidPSNs, int E2E, int E2B, int B2E, int HDE, int HD2, int HDB, int B2B)
1586
        {
1587
            ID2Info id2Info = ID2Info.GetInstance();
1588

    
1589
            bool result = true;
1590

    
1591
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1592
            {
1593
                try
1594
                {
1595
                    using (var txn = connection.BeginTransaction())
1596
                    {
1597
                        try
1598
                        {                           
1599
                         
1600
                            var query = $"INSERT INTO ARS_COMMON.dbo.PSNRevision (OID, Project_OID, ProjectCode, RevNumber, UserName, TimeData, PSNDatabasePath, " +
1601
                                $"PsnByPBSFilter, PsnByNPDFilter, PidDrawings, PipeSystems, PipeLines, Topologies, PipeSystemNetworks, InValidPSNs, E2E, E2B, B2E, HDE, " +
1602
                                $"HD2, HDB, B2B, LastModificationdate) VALUES (NEWID(), NEWID(), @ProjectCode, @RevNumber, @UserName, @TimeData, @PSNDatabasePath" +
1603
                                $", @PsnByPBSFilter, @PsnByNPDFilter, @PidDrawings, @PipeSystems, @PipeLines, @Topologies, @PipeSystemNetworks, @InValidPSNs, " +
1604
                                $"@E2E, @E2B, @B2E, @HDE, @HD2, @HDB, @B2B, @LastModificationdate)";
1605
                            var cmd = connection.GetSqlStringCommand(query);
1606
                            AddWithValue(cmd, "@OID", Guid.NewGuid().ToString());
1607
                            AddWithValue(cmd, "@Project_OID", Guid.NewGuid().ToString());
1608
                            AddWithValue(cmd, "@ProjectCode", ProjectCode);
1609
                            AddWithValue(cmd, "@RevNumber", RevNumber);
1610
                            AddWithValue(cmd, "@UserName", UserName);
1611

    
1612
                            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
1613
                            DateTime oDateTime = DateTime.Now;
1614

    
1615
                            AddWithValue(cmd, "@TimeData", oDateTime.ToString(ci)); //String.Format("{0:G}", dt) // DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
1616

    
1617
                            AddWithValue(cmd, "@PSNDatabasePath", PSNDatabasePath);
1618

    
1619
                            AddWithValue(cmd, "@PsnByPBSFilter", PsnByPBSFilter);
1620
                            AddWithValue(cmd, "@PsnByNPDFilter", PsnByNPDFilter);
1621
                            AddWithValue(cmd, "@PidDrawings", PidDrawings);
1622
                            AddWithValue(cmd, "@PipeSystems", PipeSystems);
1623
                            AddWithValue(cmd, "@PipeLines", PipeLines);
1624

    
1625
                            AddWithValue(cmd, "@Topologies", Topologies);
1626
                            AddWithValue(cmd, "@PipeSystemNetworks", PipeSystemNetworks);
1627
                            AddWithValue(cmd, "@InValidPSNs", InValidPSNs);
1628
                            AddWithValue(cmd, "@E2E", E2E);
1629
                            AddWithValue(cmd, "@E2B", E2B);
1630
                            AddWithValue(cmd, "@B2E", B2E);
1631
                            AddWithValue(cmd, "@HDE", HDE);
1632
                            AddWithValue(cmd, "@HD2", HD2);
1633
                            AddWithValue(cmd, "@HDB", HDB);
1634
                            AddWithValue(cmd, "@B2B", B2B);
1635
                            // AddWithValue(cmd, "@LastModificationdate", oDateTime.ToString(ci));
1636
                            AddWithValue(cmd, "@LastModificationdate", "");
1637
                            connection.ExecuteNonQuery(cmd, txn);
1638
                            
1639
                            txn.Commit();
1640
                        }
1641
                        catch (Exception ex)
1642
                        {
1643
                            txn.Rollback();
1644
                            result = false;
1645
                        }
1646
                    }
1647
                }
1648
                catch (Exception ex)
1649
                {
1650
                    System.Windows.Forms.MessageBox.Show(ex.Message);
1651
                    result = false;
1652
                }
1653
            }
1654

    
1655
            return result;
1656
        }
1657

    
1658
        public static bool SavePSNData(PSN item)
1659
        {
1660
            ID2Info id2Info = ID2Info.GetInstance();
1661

    
1662
            bool result = true;            
1663

    
1664
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1665
            {
1666
                try
1667
                {
1668
                    using (var txn = connection.BeginTransaction())
1669
                    {
1670
                        try
1671
                        {
1672
                            // Path Items
1673
                            var query = $"DELETE FROM {PSN_PATHITEMS}";
1674
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1675
                            for (int i = 0; i < item.PathItems.Rows.Count; i++)
1676
                            {
1677
                                DataRow row = item.PathItems.Rows[i];
1678
                                query = $"INSERT INTO {PSN_PATHITEMS} " +
1679
                                    $"(OID, SequenceData_OID, TopologySet_OID, BranchTopologySet_OID, PipeLine_OID, ItemName, ItemTag, DESCRIPTION, CLASS, SUBCLASS, TYPE, " +
1680
                                    $"PIDNAME, Equipment_OID, NPD, GROUPTAG, PipeSystemNetwork_OID, PipeRun_OID, ViewPipeSystemNetwork_OID) VALUES " +
1681
                                    $"(@OID, @SequenceData_OID, @TopologySet_OID, @BranchTopologySet_OID, @PipeLine_OID, @ITEMNAME, @ITEMTAG, @DESCRIPTION, @Class, @SubClass, @TYPE, @PIDNAME, " +
1682
                                    $"@Equipment_OID, @NPD, @GROUPTAG, @PipeSystemNetwork_OID,@PipeRun_OID, @ViewPipeSystemNetwork_OID)";
1683
                                var cmd = connection.GetSqlStringCommand(query);
1684
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
1685
                                AddWithValue(cmd, "@SequenceData_OID", string.IsNullOrEmpty(row["SequenceData_OID"].ToString()) ? "" : row["SequenceData_OID"].ToString());
1686
                                AddWithValue(cmd, "@TopologySet_OID", string.IsNullOrEmpty(row["TopologySet_OID"].ToString()) ? "" : row["TopologySet_OID"].ToString());
1687
                                AddWithValue(cmd, "@BranchTopologySet_OID", string.IsNullOrEmpty(row["BranchTopologySet_OID"].ToString()) ? "" : row["BranchTopologySet_OID"].ToString());
1688
                                AddWithValue(cmd, "@PipeLine_OID", string.IsNullOrEmpty(row["PipeLine_OID"].ToString()) ? "" : row["PipeLine_OID"].ToString());
1689
                                AddWithValue(cmd, "@ITEMNAME", string.IsNullOrEmpty(row["ITEMNAME"].ToString()) ? "" : row["ITEMNAME"].ToString());
1690
                                AddWithValue(cmd, "@ITEMTAG", string.IsNullOrEmpty(row["ITEMTAG"].ToString()) ? "" : row["ITEMTAG"].ToString());
1691
                                AddWithValue(cmd, "@DESCRIPTION", string.IsNullOrEmpty(row["DESCRIPTION"].ToString()) ? "" : row["DESCRIPTION"].ToString());
1692
                                AddWithValue(cmd, "@Class", string.IsNullOrEmpty(row["Class"].ToString()) ? "" : row["Class"].ToString());
1693
                                AddWithValue(cmd, "@SubClass", string.IsNullOrEmpty(row["SubClass"].ToString()) ? "" : row["SubClass"].ToString());
1694
                                AddWithValue(cmd, "@TYPE", string.IsNullOrEmpty(row["TYPE"].ToString()) ? "" : row["TYPE"].ToString());
1695
                                AddWithValue(cmd, "@PIDNAME", string.IsNullOrEmpty(row["PIDNAME"].ToString()) ? "" : row["PIDNAME"].ToString());
1696
                                AddWithValue(cmd, "@Equipment_OID", string.IsNullOrEmpty(row["Equipment_OID"].ToString()) ? "" : row["Equipment_OID"].ToString());
1697
                                AddWithValue(cmd, "@NPD", string.IsNullOrEmpty(row["NPD"].ToString()) ? "" : row["NPD"].ToString());
1698
                                AddWithValue(cmd, "@GROUPTAG", string.IsNullOrEmpty(row["GROUPTAG"].ToString()) ? "" : row["GROUPTAG"].ToString());
1699
                                AddWithValue(cmd, "@PipeSystemNetwork_OID", string.IsNullOrEmpty(row["PipeSystemNetwork_OID"].ToString()) ? "" : row["PipeSystemNetwork_OID"].ToString());
1700
                                AddWithValue(cmd, "@ViewPipeSystemNetwork_OID", string.IsNullOrEmpty(row["ViewPipeSystemNetwork_OID"].ToString()) ? "" : row["ViewPipeSystemNetwork_OID"].ToString());
1701
                                AddWithValue(cmd, "@PipeRun_OID", string.IsNullOrEmpty(row["PipeRun_OID"].ToString()) ? "" : row["PipeRun_OID"].ToString());
1702
                                connection.ExecuteNonQuery(cmd, txn);
1703
                            }
1704

    
1705
                            // Sequence
1706
                            query = $"DELETE FROM {PSN_SEQUENCEDATA}";
1707
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1708
                            foreach (DataRow row in item.SequenceData.Rows)
1709
                            {
1710
                                query = $"INSERT INTO {PSN_SEQUENCEDATA} (OID, SERIALNUMBER, PathItem_OID, TopologySet_OID_Key) VALUES (@OID, @SERIALNUMBER, @PathItem_OID, @TopologySet_OID_Key)";
1711
                                var cmd = connection.GetSqlStringCommand(query);
1712
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
1713
                                AddWithValue(cmd, "@SERIALNUMBER", string.IsNullOrEmpty(row["SERIALNUMBER"].ToString()) ? "" : row["SERIALNUMBER"].ToString());
1714
                                AddWithValue(cmd, "@PathItem_OID", string.IsNullOrEmpty(row["PathItem_OID"].ToString()) ? "" : row["PathItem_OID"].ToString());
1715
                                AddWithValue(cmd, "@TopologySet_OID_Key", string.IsNullOrEmpty(row["TopologySet_OID_Key"].ToString()) ? "" : row["TopologySet_OID_Key"].ToString());
1716
                                connection.ExecuteNonQuery(cmd, txn);
1717
                            }
1718

    
1719
                            // Nozzle
1720
                            query = $"DELETE FROM {PSN_NOZZLE}";
1721
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1722
                            foreach (DataRow row in item.Nozzle.Rows)
1723
                            {
1724
                                query = $"INSERT INTO {PSN_NOZZLE} (OID, ItemTag, Xcoords, Ycoords, Equipment_OID, Fluid, NPD, PMC, Rotation, FlowDirection) VALUES (@OID, @ITEMTAG, @XCOORDS, @YCOORDS, @Equipment_OID, @FLUID, @NPD, @PMC, @ROTATION, @FlowDirection)";
1725
                                var cmd = connection.GetSqlStringCommand(query);
1726
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
1727
                                AddWithValue(cmd, "@ITEMTAG", string.IsNullOrEmpty(row["ITEMTAG"].ToString()) ? "" : row["ITEMTAG"].ToString());
1728

    
1729
                                if (string.IsNullOrEmpty(row["XCOORDS"].ToString()))
1730
                                    AddWithValue(cmd, "@XCOORDS", DBNull.Value);
1731
                                else
1732
                                    AddWithValue(cmd, "@XCOORDS", row["XCOORDS"].ToString());
1733

    
1734
                                if (string.IsNullOrEmpty(row["YCOORDS"].ToString()))
1735
                                    AddWithValue(cmd, "@YCOORDS", DBNull.Value);
1736
                                else
1737
                                    AddWithValue(cmd, "@YCOORDS", row["YCOORDS"].ToString());
1738

    
1739
                                AddWithValue(cmd, "@Equipment_OID", string.IsNullOrEmpty(row["Equipment_OID"].ToString()) ? "" : row["Equipment_OID"].ToString());
1740
                                AddWithValue(cmd, "@FLUID", string.IsNullOrEmpty(row["FLUID"].ToString()) ? "" : row["FLUID"].ToString());
1741
                                AddWithValue(cmd, "@NPD", string.IsNullOrEmpty(row["NPD"].ToString()) ? "" : row["NPD"].ToString());
1742
                                AddWithValue(cmd, "@PMC", string.IsNullOrEmpty(row["PMC"].ToString()) ? "" : row["PMC"].ToString());
1743

    
1744
                                if (string.IsNullOrEmpty(row["ROTATION"].ToString()))
1745
                                    AddWithValue(cmd, "@ROTATION", DBNull.Value);
1746
                                else
1747
                                    AddWithValue(cmd, "@ROTATION", row["ROTATION"].ToString());
1748

    
1749
                                AddWithValue(cmd, "@FlowDirection", string.IsNullOrEmpty(row["FlowDirection"].ToString()) ? "" : row["FlowDirection"].ToString());
1750
                                connection.ExecuteNonQuery(cmd, txn);
1751
                            }
1752

    
1753
                            //Equipment
1754
                            query = $"DELETE FROM {PSN_EQUIPMENT}";
1755
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1756
                            foreach (DataRow row in item.Equipment.Rows)
1757
                            {
1758
                                query = $"INSERT INTO {PSN_EQUIPMENT} (OID, ItemTag, Xcoords, Ycoords) VALUES (@OID, @ITEMTAG, @XCOORDS, @YCOORDS)";
1759
                                var cmd = connection.GetSqlStringCommand(query);
1760
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
1761
                                AddWithValue(cmd, "@ITEMTAG", string.IsNullOrEmpty(row["ITEMTAG"].ToString()) ? "" : row["ITEMTAG"].ToString());
1762

    
1763
                                if (string.IsNullOrEmpty(row["XCOORDS"].ToString()))
1764
                                    AddWithValue(cmd, "@XCOORDS", DBNull.Value);
1765
                                else
1766
                                    AddWithValue(cmd, "@XCOORDS", row["XCOORDS"].ToString());
1767

    
1768
                                if (string.IsNullOrEmpty(row["YCOORDS"].ToString()))
1769
                                    AddWithValue(cmd, "@YCOORDS", DBNull.Value);
1770
                                else
1771
                                    AddWithValue(cmd, "@YCOORDS", row["YCOORDS"].ToString());
1772

    
1773
                                connection.ExecuteNonQuery(cmd, txn);
1774
                            }
1775

    
1776
                            // TopologySet
1777
                            query = $"DELETE FROM {PSN_TOPOLOGYSET}";
1778
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1779
                            foreach (DataRow row in item.TopologySet.Rows)
1780
                            {
1781
                                query = $"INSERT INTO {PSN_TOPOLOGYSET} (OID, Type, SubType, HeadItemTag, TailItemTag, HeadItemSPID, TailItemSPID) VALUES (@OID, @Type, @SubType, @HeadItemTag, @TailItemTag, @HeadItemSPID, @TailItemSPID)";
1782
                                var cmd = connection.GetSqlStringCommand(query);
1783
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
1784
                                AddWithValue(cmd, "@Type", string.IsNullOrEmpty(row["Type"].ToString()) ? "" : row["Type"].ToString());
1785
                                AddWithValue(cmd, "@SubType", string.IsNullOrEmpty(row["SubType"].ToString()) ? "" : row["SubType"].ToString());
1786
                                AddWithValue(cmd, "@HeadItemTag", string.IsNullOrEmpty(row["HeadItemTag"].ToString()) ? "" : row["HeadItemTag"].ToString());
1787
                                AddWithValue(cmd, "@TailItemTag", string.IsNullOrEmpty(row["TailItemTag"].ToString()) ? "" : row["TailItemTag"].ToString());
1788
                                AddWithValue(cmd, "@HeadItemSPID", string.IsNullOrEmpty(row["HeadItemSPID"].ToString()) ? "" : row["HeadItemSPID"].ToString());
1789
                                AddWithValue(cmd, "@TailItemSPID", string.IsNullOrEmpty(row["TailItemSPID"].ToString()) ? "" : row["TailItemSPID"].ToString());
1790
                                connection.ExecuteNonQuery(cmd, txn);
1791
                            }
1792

    
1793
                            // PSN
1794
                            query = $"DELETE FROM {PSN_PIPESYSTEMNETWORK} WHERE PSNRevisionNumber = '{string.Format("V{0:D4}", item.Revision)}'";
1795
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1796
                            foreach (DataRow row in item.PipeSystemNetwork.Rows)
1797
                            {
1798
                                query = $"INSERT INTO {PSN_PIPESYSTEMNETWORK} " +
1799
                                    $"(OID, Type, OrderNumber, Pipeline_OID, FROM_DATA, TO_DATA, TopologySet_OID_Key, PSNRevisionNumber, PBS, Drawings, IsValid, Status, IncludingVirtualData, PSNAccuracy, Pocket) VALUES " +
1800
                                    $"(@OID, @Type, @OrderNumber, @Pipeline_OID, @FROM_DATA, @TO_DATA, @TopologySet_OID_Key, @PSNRevisionNumber,  @PBS, @Drawings, @IsValid, @Status, @IncludingVirtualData, @PSNAccuracy, @Pocket)";
1801
                                var cmd = connection.GetSqlStringCommand(query);
1802
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
1803
                                AddWithValue(cmd, "@Type", string.IsNullOrEmpty(row["Type"].ToString()) ? "" : row["Type"].ToString());
1804
                                AddWithValue(cmd, "@OrderNumber", string.IsNullOrEmpty(row["OrderNumber"].ToString()) ? "" : row["OrderNumber"].ToString());
1805
                                AddWithValue(cmd, "@Pipeline_OID", string.IsNullOrEmpty(row["Pipeline_OID"].ToString()) ? "" : row["Pipeline_OID"].ToString());
1806
                                AddWithValue(cmd, "@FROM_DATA", string.IsNullOrEmpty(row["FROM_DATA"].ToString()) ? "" : row["FROM_DATA"].ToString());
1807
                                AddWithValue(cmd, "@TO_DATA", string.IsNullOrEmpty(row["TO_DATA"].ToString()) ? "" : row["TO_DATA"].ToString());
1808
                                AddWithValue(cmd, "@TopologySet_OID_Key", string.IsNullOrEmpty(row["TopologySet_OID_Key"].ToString()) ? "" : row["TopologySet_OID_Key"].ToString());
1809
                                AddWithValue(cmd, "@PSNRevisionNumber", string.IsNullOrEmpty(row["PSNRevisionNumber"].ToString()) ? "" : row["PSNRevisionNumber"].ToString());
1810

    
1811
                                int IsValid = 0;
1812
                                if (row["IsValid"].ToString() == string.Empty || row["IsValid"].ToString() == "OK")
1813
                                    IsValid = 0;
1814
                                else if (row["IsValid"].ToString() == "InValid")
1815
                                    IsValid = 1;
1816
                                else if (row["IsValid"].ToString() == "Error")
1817
                                    IsValid = -1;
1818

    
1819
                                AddWithValue(cmd, "@IsValid", IsValid);
1820
                                AddWithValue(cmd, "@Status", string.IsNullOrEmpty(row["Status"].ToString()) ? "" : row["Status"].ToString());
1821

    
1822
                                AddWithValue(cmd, "@PBS", string.IsNullOrEmpty(row["PBS"].ToString()) ? "" : row["PBS"].ToString());
1823
                                AddWithValue(cmd, "@Drawings", string.IsNullOrEmpty(row["Drawings"].ToString()) ? "" : row["Drawings"].ToString());
1824

    
1825
                                AddWithValue(cmd, "@IncludingVirtualData", string.IsNullOrEmpty(row["IncludingVirtualData"].ToString()) ? "" : row["IncludingVirtualData"].ToString());
1826
                                if (string.IsNullOrEmpty(row["PSNAccuracy"].ToString()))
1827
                                    AddWithValue(cmd, "@PSNAccuracy", DBNull.Value);
1828
                                else
1829
                                    AddWithValue(cmd, "@PSNAccuracy", row["PSNAccuracy"].ToString().Replace("%", ""));
1830

    
1831
                                AddWithValue(cmd, "@Pocket", string.IsNullOrEmpty(row["Pocket"].ToString()) ? "Yes" : row["Pocket"].ToString());
1832

    
1833
                                connection.ExecuteNonQuery(cmd, txn);
1834
                            }
1835

    
1836
                            //Pipeline
1837
                            query = $"DELETE FROM {PSN_PIPELINE}";
1838
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1839
                            foreach (DataRow row in item.PipeLine.Rows)
1840
                            {
1841
                                query = $"INSERT INTO {PSN_PIPELINE} (OID, PipeSystem_OID, FLUID, PMC, SEQNUMBER, INSULATION, FROM_DATA, TO_DATA, Unit) VALUES (@OID, @PipeSystem_OID, @FLUID, @PMC, @SEQNUMBER, @INSULATION, @FROM_DATA, @TO_DATA, @Unit)";
1842
                                var cmd = connection.GetSqlStringCommand(query);
1843
                                AddWithValue(cmd, "@OID", row["OID"].ToString());
1844
                                AddWithValue(cmd, "@PipeSystem_OID", row["PipeSystem_OID"].ToString());
1845
                                AddWithValue(cmd, "@FLUID", row["FLUID"].ToString());
1846
                                AddWithValue(cmd, "@PMC", row["PMC"].ToString());
1847
                                AddWithValue(cmd, "@SEQNUMBER", row["SEQNUMBER"].ToString());
1848
                                AddWithValue(cmd, "@INSULATION", row["INSULATION"].ToString());
1849
                                AddWithValue(cmd, "@FROM_DATA", row["FROM_DATA"].ToString());
1850
                                AddWithValue(cmd, "@TO_DATA", row["TO_DATA"].ToString());
1851
                                AddWithValue(cmd, "@Unit", row["Unit"].ToString());
1852
                                connection.ExecuteNonQuery(cmd, txn);
1853
                            }
1854

    
1855
                            //PipeSystem
1856
                            query = $"DELETE FROM {PSN_PIPESYSTEM}";
1857
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1858
                            foreach (DataRow row in item.PipeSystem.Rows)
1859
                            {
1860
                                query = $"INSERT INTO {PSN_PIPESYSTEM} (OID, DESCRIPTION, FLUID, PMC, PipeLineQty, GroundLevel) VALUES (@OID, @DESCRIPTION, @FLUID, @PMC, @PipeLineQty, @GroundLevel)";
1861
                                var cmd = connection.GetSqlStringCommand(query);
1862
                                AddWithValue(cmd, "@OID", row["OID"].ToString());
1863
                                AddWithValue(cmd, "@DESCRIPTION", row["DESCRIPTION"].ToString());
1864
                                AddWithValue(cmd, "@FLUID", row["FLUID"].ToString());
1865
                                AddWithValue(cmd, "@PMC", row["PMC"].ToString());
1866
                                AddWithValue(cmd, "@PipeLineQty", row["PipeLineQty"].ToString());
1867
                                AddWithValue(cmd, "@GroundLevel", row["GroundLevel"].ToString());
1868
                                connection.ExecuteNonQuery(cmd, txn);
1869
                            }
1870

    
1871
                            if(id2Info.ID2DBType == ID2DB_Type.MSSQL)
1872
                            {
1873
                                query = $"If(db_id(N'" + PSN_COMMON + "') IS NULL) CREATE DATABASE [" + PSN_COMMON + "]";
1874
                                connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1875
                            }
1876
                          
1877

    
1878
                            txn.Commit();
1879
                        }
1880
                        catch (Exception ex)
1881
                        {
1882
                            txn.Rollback();
1883
                            result = false;
1884
                        }
1885

    
1886
                    }
1887
                    void AddColumn(string TableName, Dictionary<string, string> dicCol, List<string> colnames)
1888
                    {                        
1889
                        bool check = false;
1890
                        if (colnames != null)
1891
                        {
1892
                            foreach (KeyValuePair<string, string> col in dicCol)
1893
                            {
1894
                                check = false;
1895
                                foreach (string c in colnames)
1896
                                {
1897
                                    if (col.Key.Contains(c))
1898
                                    {
1899
                                        check = true;
1900
                                        break;
1901
                                    }
1902
                                }
1903

    
1904
                                if (!check) //없으면 추가
1905
                                {
1906
                                    string i = string.Empty;
1907
                                    if (col.Value.ToString().ToUpper().Contains("INT") || col.Value.ToString().ToUpper().Contains("REAL"))
1908
                                        i = "DEFAULT 0";
1909

    
1910
                                    var queryalter = $"ALTER TABLE " + TableName + " ADD [" + col.Key + "] " + col.Value + " " + i + ";";
1911
                                    using (var cmd = connection.GetSqlStringCommand(queryalter))
1912
                                    {
1913
                                        cmd.ExecuteNonQuery();
1914
                                    }
1915
                                }
1916
                            }
1917
                        }
1918
                    }
1919
                }
1920
                catch (Exception ex)
1921
                {
1922
                    System.Windows.Forms.MessageBox.Show(ex.Message);
1923
                    result = false;
1924
                }
1925
            }
1926

    
1927
            return result;
1928
        }
1929

    
1930
        public static bool SavePSNFluidCode(DataTable dt)
1931
        {
1932
            ID2Info id2Info = ID2Info.GetInstance();
1933

    
1934
            bool result = true;
1935
            using (IAbstractDatabase connection = id2Info.CreateConnection())
1936
            {
1937
                try
1938
                {
1939
                    using (var txn = connection.BeginTransaction())
1940
                    {
1941
                        try
1942
                        {
1943
                            var query = $"DELETE FROM {PSN_FLUIDCODE}";
1944
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
1945

    
1946
                            foreach (DataRow row in dt.Rows)
1947
                            {
1948
                                query = $"INSERT INTO {PSN_FLUIDCODE} (UID, Code, Description, Condition, Remarks, GroundLevel) VALUES (@UID, @Code, @Description, @Condition, @Remarks, @GroundLevel)";
1949
                                var cmd = connection.GetSqlStringCommand(query);
1950
                                cmd.Parameters.Clear();
1951

    
1952
                                {
1953
                                    var param = cmd.CreateParameter();
1954
                                    param.ParameterName = "@UID";
1955
                                    param.Value = row["UID"].ToString();
1956
                                    cmd.Parameters.Add(param);
1957
                                }
1958

    
1959
                                {
1960
                                    var param = cmd.CreateParameter();
1961
                                    param.ParameterName = "@Code";
1962
                                    param.Value = row["Code"].ToString();
1963
                                    cmd.Parameters.Add(param);
1964
                                }
1965

    
1966
                                {
1967
                                    var param = cmd.CreateParameter();
1968
                                    param.ParameterName = "@Description";
1969
                                    param.Value = row["Description"].ToString();
1970
                                    cmd.Parameters.Add(param);
1971
                                }
1972

    
1973
                                {
1974
                                    var param = cmd.CreateParameter();
1975
                                    param.ParameterName = "@Condition";
1976
                                    param.Value = row["Condition"].ToString();
1977
                                    cmd.Parameters.Add(param);
1978
                                }
1979

    
1980
                                {
1981
                                    var param = cmd.CreateParameter();
1982
                                    param.ParameterName = "@Remarks";
1983
                                    param.Value = row["Remarks"].ToString();
1984
                                    cmd.Parameters.Add(param);
1985
                                }
1986

    
1987
                                {
1988
                                    var param = cmd.CreateParameter();
1989
                                    param.ParameterName = "@GroundLevel";
1990
                                    param.Value = row["GroundLevel"].ToString();
1991
                                    cmd.Parameters.Add(param);
1992
                                }
1993

    
1994
                                connection.ExecuteNonQuery(cmd, txn);
1995
                            }
1996
                            txn.Commit();
1997
                        }
1998
                        catch (Exception ex)
1999
                        {
2000
                            txn.Rollback();
2001
                            result = false;
2002
                        }
2003
                    }
2004
                }
2005
                catch (Exception ex)
2006
                {
2007
                    System.Windows.Forms.MessageBox.Show(ex.Message);
2008
                    result = false;
2009
                }
2010
            }
2011

    
2012
            return result;
2013
        }
2014

    
2015
        public static DataTable SelectPSNFluidCode()
2016
        {
2017
            DataTable dt = null;
2018
            ID2Info id2Info = ID2Info.GetInstance();
2019

    
2020
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2021
            {
2022
                try
2023
                {
2024
                    var query = $"SELECT * FROM {PSN_FLUIDCODE}";
2025
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2026
                    {
2027
                        dt = ds.Tables[0].Copy();
2028
                    }
2029
                }
2030
                catch (Exception ex)
2031
                {
2032
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2033
                }
2034
            }
2035

    
2036
            return dt;
2037
        }
2038

    
2039
        public static bool SavePSNPMC(DataTable dt)
2040
        {
2041
            ID2Info id2Info = ID2Info.GetInstance();
2042

    
2043
            bool result = true;
2044
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2045
            {
2046
                try
2047
                {
2048
                    using (var txn = connection.BeginTransaction())
2049
                    {
2050
                        try
2051
                        {
2052
                            var query = $"DELETE FROM {PSN_PIPINGMATLCLASS}";
2053
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
2054

    
2055
                            foreach (DataRow row in dt.Rows)
2056
                            {
2057
                                query = $"INSERT INTO {PSN_PIPINGMATLCLASS} ( UID, Priority, Code, Description, Condition, Remarks, GroundLevel) VALUES (@UID, @Priority, @Code, @Description, @Condition, @Remarks, @GroundLevel)";
2058
                                var cmd = connection.GetSqlStringCommand(query);
2059
                                cmd.Parameters.Clear();
2060

    
2061
                                {
2062
                                    var param = cmd.CreateParameter();
2063
                                    param.ParameterName = "@UID";
2064
                                    param.Value = row["UID"].ToString();
2065
                                    cmd.Parameters.Add(param);
2066
                                }
2067

    
2068
                                {
2069
                                    var param = cmd.CreateParameter();
2070
                                    param.ParameterName = "@Priority";
2071
                                    param.Value = row["Priority"].ToString();
2072
                                    cmd.Parameters.Add(param);
2073
                                }
2074

    
2075
                                {
2076
                                    var param = cmd.CreateParameter();
2077
                                    param.ParameterName = "@Code";
2078
                                    param.Value = row["Code"].ToString();
2079
                                    cmd.Parameters.Add(param);
2080
                                }
2081

    
2082
                                {
2083
                                    var param = cmd.CreateParameter();
2084
                                    param.ParameterName = "@Description";
2085
                                    param.Value = row["Description"].ToString();
2086
                                    cmd.Parameters.Add(param);
2087
                                }
2088

    
2089
                                {
2090
                                    var param = cmd.CreateParameter();
2091
                                    param.ParameterName = "@Condition";
2092
                                    param.Value = row["Condition"].ToString();
2093
                                    cmd.Parameters.Add(param);
2094
                                }
2095

    
2096
                                {
2097
                                    var param = cmd.CreateParameter();
2098
                                    param.ParameterName = "@Remarks";
2099
                                    param.Value = row["Remarks"].ToString();
2100
                                    cmd.Parameters.Add(param);
2101
                                }
2102

    
2103
                                {
2104
                                    var param = cmd.CreateParameter();
2105
                                    param.ParameterName = "@GroundLevel";
2106
                                    param.Value = row["GroundLevel"].ToString();
2107
                                    cmd.Parameters.Add(param);
2108
                                }
2109

    
2110
                                connection.ExecuteNonQuery(cmd, txn);
2111
                            }
2112

    
2113
                            txn.Commit();
2114
                        }
2115
                        catch (Exception ex)
2116
                        {
2117
                            txn.Rollback();
2118
                            result = false;
2119
                        }
2120
                    }
2121
                }
2122
                catch (Exception ex)
2123
                {
2124
                    System.Windows.Forms.MessageBox.Show(ex.Message);
2125
                    result = false;
2126
                }
2127
            }
2128

    
2129
            return result;
2130
        }
2131

    
2132
        public static bool SavePSNInsulation(DataTable dt)
2133
        {
2134
            ID2Info id2Info = ID2Info.GetInstance();
2135

    
2136
            bool result = true;
2137
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2138
            {
2139
                try
2140
                {
2141
                    using (var txn = connection.BeginTransaction())
2142
                    {
2143
                        try
2144
                        {
2145
                            var query = $"DELETE FROM {PSN_INSULATIONPURPOSE}";
2146
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
2147

    
2148
                            foreach (DataRow row in dt.Rows)
2149
                            {
2150
                                query = $"INSERT INTO {PSN_INSULATIONPURPOSE} (UID, Code, Description, Remarks) VALUES (@UID, @Code, @Description, @Remarks)";
2151
                                var cmd = connection.GetSqlStringCommand(query);
2152
                                cmd.Parameters.Clear();
2153

    
2154
                                {
2155
                                    var param = cmd.CreateParameter();
2156
                                    param.ParameterName = "@UID";
2157
                                    param.Value = row["UID"].ToString();
2158
                                    cmd.Parameters.Add(param);
2159
                                }
2160
                                
2161
                                {
2162
                                    var param = cmd.CreateParameter();
2163
                                    param.ParameterName = "@Code";
2164
                                    param.Value = row["Code"].ToString();
2165
                                    cmd.Parameters.Add(param);
2166
                                }
2167

    
2168
                                {
2169
                                    var param = cmd.CreateParameter();
2170
                                    param.ParameterName = "@Description";
2171
                                    param.Value = row["Description"].ToString();
2172
                                    cmd.Parameters.Add(param);
2173
                                }
2174
                                
2175
                                {
2176
                                    var param = cmd.CreateParameter();
2177
                                    param.ParameterName = "@Remarks";
2178
                                    param.Value = row["Remarks"].ToString();
2179
                                    cmd.Parameters.Add(param);
2180
                                }
2181

    
2182
                                connection.ExecuteNonQuery(cmd, txn);
2183
                            }
2184

    
2185
                            txn.Commit();
2186
                        }
2187
                        catch (Exception ex)
2188
                        {
2189
                            txn.Rollback();
2190
                            result = false;
2191
                        }
2192
                    }
2193
                }
2194
                catch (Exception ex)
2195
                {
2196
                    System.Windows.Forms.MessageBox.Show(ex.Message);
2197
                    result = false;
2198
                }
2199
            }
2200

    
2201
            return result;
2202
        }
2203

    
2204
        public static PSN GetDBPSN()
2205
        {
2206
            PSN result = new PSN();
2207
            ID2Info id2Info = ID2Info.GetInstance();
2208

    
2209
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2210
            {
2211
                try
2212
                {
2213
                    //query = $"SELECT * FROM {PSN_PIPESYSTEMNETWORK}";
2214
                    //using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2215
                    //{
2216
                    //    result.PipeSystemNetwork = ds.Tables[0].Copy();
2217
                    //}
2218

    
2219
                    var query = $"SELECT * FROM {PSN_PIPESYSTEMNETWORK} WHERE PSNRevisionNumber = '{string.Format("V{0:D4}", GetRevision())}'";
2220
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2221
                    {
2222
                        result.PipeSystemNetwork = ds.Tables[0].Clone();
2223
                        result.PipeSystemNetwork.Columns["IsValid"].DataType = typeof(string);
2224

    
2225
                        foreach (DataRow row in ds.Tables[0].Rows)
2226
                        {
2227
                            DataRow newRow = result.PipeSystemNetwork.NewRow();
2228
                            newRow["OID"] = row["OID"].ToString();
2229
                            newRow["Type"] = row["Type"].ToString();
2230
                            newRow["OrderNumber"] = row["OrderNumber"].ToString();
2231
                            newRow["Pipeline_OID"] = row["Pipeline_OID"].ToString();
2232
                            newRow["FROM_DATA"] = row["FROM_DATA"].ToString();
2233
                            newRow["TO_DATA"] = row["TO_DATA"].ToString();
2234
                            newRow["TopologySet_OID_Key"] = row["TopologySet_OID_Key"].ToString();
2235
                            newRow["PSNRevisionNumber"] = row["PSNRevisionNumber"].ToString();
2236

    
2237
                            string IsValid = string.Empty;
2238

    
2239
                            if (Convert.ToInt32(row["IsValid"].ToString()) == 0)
2240
                                IsValid = string.Empty;//"OK";
2241
                            else if (Convert.ToInt32(row["IsValid"].ToString()) == 1)
2242
                                IsValid = "InValid";
2243
                            else if (Convert.ToInt32(row["IsValid"].ToString()) == -1)
2244
                                IsValid = "Error";
2245

    
2246
                            newRow["IsValid"] = IsValid;
2247

    
2248
                            newRow["Status"] = row["Status"].ToString();
2249
                            newRow["PBS"] = row["PBS"].ToString();
2250
                            newRow["Drawings"] = row["Drawings"].ToString();
2251

    
2252
                            newRow["IncludingVirtualData"] = row["IncludingVirtualData"].ToString();
2253
                            newRow["PSNAccuracy"] = row["PSNAccuracy"].ToString();
2254

    
2255
                            newRow["Pocket"] = row["Pocket"].ToString();
2256
                            
2257
                            result.PipeSystemNetwork.Rows.Add(newRow);
2258
                        }
2259
                    }
2260

    
2261
                    query = $"SELECT * FROM {PSN_EQUIPMENT}";
2262
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2263
                    {
2264
                        result.Equipment = ds.Tables[0].Copy();
2265
                    }
2266

    
2267
                    query = $"SELECT * FROM {PSN_NOZZLE}";
2268
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2269
                    {
2270
                        result.Nozzle = ds.Tables[0].Copy();
2271
                    }
2272

    
2273
                    query = $"SELECT * FROM {PSN_PATHITEMS}";
2274
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2275
                    {
2276
                        result.PathItems = ds.Tables[0].Copy();
2277
                    }
2278

    
2279
                    query = $"SELECT * FROM {PSN_SEQUENCEDATA}";
2280
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2281
                    {
2282
                        result.SequenceData = ds.Tables[0].Copy();
2283
                    }
2284

    
2285
                    query = $"SELECT * FROM {PSN_TOPOLOGYSET}";
2286
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2287
                    {
2288
                        result.TopologySet = ds.Tables[0].Copy();
2289
                    }
2290

    
2291
                    query = $"SELECT * FROM {PSN_PIPELINE}";
2292
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2293
                    {
2294
                        result.PipeLine = ds.Tables[0].Copy();
2295
                    }
2296

    
2297
                    query = $"SELECT * FROM {PSN_PIPESYSTEM}";
2298
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2299
                    {
2300
                        result.PipeSystem = ds.Tables[0].Copy();
2301
                    }
2302

    
2303
                    result.Revision = GetRevision();
2304
                }
2305
                catch (Exception ex)
2306
                {
2307
                    System.Windows.Forms.MessageBox.Show(ex.Message);
2308
                    result = null;
2309
                }
2310
            }
2311

    
2312
            return result;
2313
        }
2314

    
2315
        public static int GetRevision()
2316
        {
2317
            int result = 0;
2318
            ID2Info id2Info = ID2Info.GetInstance();
2319

    
2320
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2321
            {
2322
                try
2323
                {
2324
                    var query = $"SELECT DISTINCT PSNRevisionNumber FROM {PSN_PIPESYSTEMNETWORK};";
2325
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2326
                    {
2327
                        foreach (DataRow row in ds.Tables[0].Rows)
2328
                        {
2329
                            string value = row["PSNRevisionNumber"].ToString();
2330
                            if (value.StartsWith("V"))
2331
                                value = value.Remove(0, 1);
2332
                            int revisionNumber = Convert.ToInt32(value);
2333
                            if (result < revisionNumber)
2334
                                result = revisionNumber;
2335
                        }
2336
                    }
2337
                }
2338
                catch (Exception ex)
2339
                {
2340
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2341
                    result = -1;
2342
                }
2343
            }
2344

    
2345
            return result;
2346
        }
2347

    
2348
        public static DataTable GetPathItem()
2349
        {
2350
            DataTable dt = null;
2351

    
2352
            ID2Info id2Info = ID2Info.GetInstance();
2353
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2354
            {
2355
                try
2356
                {
2357
                    var query = $"SELECT * FROM {PSN_PATHITEMS}";
2358
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2359
                    {
2360
                        dt = ds.Tables[0].Copy();
2361
                    }
2362
                }
2363
                catch (Exception ex)
2364
                {
2365
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2366
                }
2367
            }
2368

    
2369
            return dt;
2370
        }
2371

    
2372
        public static DataTable GetTopologySet()
2373
        {
2374
            DataTable dt = null;
2375

    
2376
            ID2Info id2Info = ID2Info.GetInstance();
2377
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2378
            {
2379
                try
2380
                {
2381
                    var query = $"SELECT * FROM {PSN_TOPOLOGYSET}";
2382
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2383
                    {
2384
                        dt = ds.Tables[0].Clone();
2385
                        foreach (DataRow row in ds.Tables[0].Rows)
2386
                        {
2387
                            DataRow newRow = dt.NewRow();
2388
                            newRow["OID"] = row["OID"].ToString();
2389
                            newRow["Type"] = row["Type"].ToString();
2390
                            newRow["SubType"] = row["SubType"].ToString();
2391
                            newRow["HeadItemTag"] = row["HeadItemTag"].ToString();
2392
                            newRow["TailItemTag"] = row["TailItemTag"].ToString();
2393
                            newRow["HeadItemSPID"] = row["HeadItemSPID"].ToString();
2394
                            newRow["TailItemSPID"] = row["TailItemSPID"].ToString();
2395
                            dt.Rows.Add(newRow);
2396
                        }
2397
                    }
2398
                }
2399
                catch (Exception ex)
2400
                {
2401
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2402
                }
2403
            }
2404

    
2405
            return dt;
2406
        }
2407

    
2408
        public static DataTable GetPipeSystemNetwork()
2409
        {
2410
            DataTable dt = null;
2411

    
2412
            ID2Info id2Info = ID2Info.GetInstance();
2413
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2414
            {
2415
                try
2416
                {
2417
                    var query = $"SELECT * FROM {PSN_PIPESYSTEMNETWORK} WHERE PSNRevisionNumber = '{string.Format("V{0:D4}", GetRevision())}' ORDER BY OID, OrderNumber";
2418
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2419
                    {
2420
                        dt = ds.Tables[0].Clone();
2421
                        dt.Columns["IsValid"].DataType = typeof(string);
2422
                        foreach (DataRow row in ds.Tables[0].Rows)
2423
                        {
2424
                            DataRow newRow = dt.NewRow();
2425
                            newRow["OID"] = row["OID"].ToString();
2426
                            newRow["Type"] = row["Type"].ToString();
2427
                            newRow["OrderNumber"] = row["OrderNumber"].ToString();
2428
                            newRow["Pipeline_OID"] = row["Pipeline_OID"].ToString();
2429
                            newRow["FROM_DATA"] = row["FROM_DATA"].ToString();
2430
                            newRow["TO_DATA"] = row["TO_DATA"].ToString();
2431
                            newRow["TopologySet_OID_Key"] = row["TopologySet_OID_Key"].ToString();
2432
                            newRow["PSNRevisionNumber"] = row["PSNRevisionNumber"].ToString();
2433

    
2434
                            string IsValid = string.Empty;
2435

    
2436
                            if (Convert.ToInt32(row["IsValid"].ToString()) == 0)
2437
                                IsValid = string.Empty;//"OK";
2438
                            else if (Convert.ToInt32(row["IsValid"].ToString()) == 1)
2439
                                IsValid = "InValid";
2440
                            else if (Convert.ToInt32(row["IsValid"].ToString()) == -1)
2441
                                IsValid = "Error";
2442

    
2443
                            newRow["IsValid"] = IsValid;
2444
                            newRow["Status"] = row["Status"].ToString();
2445

    
2446
                            newRow["PBS"] = row["PBS"].ToString();
2447
                            newRow["Drawings"] = row["Drawings"].ToString();
2448
                            
2449
                            newRow["IncludingVirtualData"] = row["IncludingVirtualData"].ToString();
2450
                            newRow["PSNAccuracy"] = row["PSNAccuracy"].ToString();
2451

    
2452
                            newRow["Pocket"] = row["Pocket"].ToString();
2453
                            
2454
                            dt.Rows.Add(newRow);
2455
                        }
2456
                    }
2457
                }
2458
                catch (Exception ex)
2459
                {
2460
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2461
                }
2462
            }
2463

    
2464
            return dt;
2465
        }
2466

    
2467
        public static DataTable GetSequenceData()
2468
        {
2469
            DataTable dt = null;
2470

    
2471
            ID2Info id2Info = ID2Info.GetInstance();
2472
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2473
            {
2474
                try
2475
                {
2476
                    var query = $"SELECT * FROM {PSN_SEQUENCEDATA}";
2477
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
2478
                    {
2479
                        dt = ds.Tables[0].Copy();
2480
                    }
2481
                }
2482
                catch (Exception ex)
2483
                {
2484
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2485
                }
2486
            }
2487

    
2488
            return dt;
2489
        }
2490

    
2491
       
2492
        //Anohter DB
2493
        public static bool ConnTestAndCreateAnotherTable()
2494
        {
2495
            bool result = false;
2496
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
2497

    
2498
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2499
            {
2500
                try
2501
                {
2502
                    var names = connection.GetTableNames();
2503
                    var matched = names.FirstOrDefault(param => param == PSN_HEADER_SETTING);
2504
                    Dictionary<string, string> dicColCheck = new Dictionary<string, string>();
2505
                    dicColCheck.Add("GROUP_ID", "TEXT");
2506
                    dicColCheck.Add("DESCRIPTION", "TEXT");
2507
                    dicColCheck.Add("INDEX", "INTEGER");
2508
                    dicColCheck.Add("NAME", "TEXT");
2509

    
2510
                    if (matched == null)
2511
                    {
2512
                        var query = $"CREATE TABLE {PSN_HEADER_SETTING} (GROUP_ID TEXT, DESCRIPTION TEXT, [INDEX] INTEGER, NAME TEXT)";
2513
                        using (var cmd = connection.GetSqlStringCommand(query))
2514
                        {
2515
                            cmd.ExecuteNonQuery();
2516
                        }
2517
                    }
2518
                    else
2519
                    {
2520
                        AddColumn(PSN_HEADER_SETTING, dicColCheck);
2521
                    }
2522

    
2523
                    matched = names.FirstOrDefault(param => param == PSN_VENTDRAIN_SETTING);
2524
                    dicColCheck.Clear();
2525
                    dicColCheck.Add("GROUP_ID", "TEXT");
2526
                    dicColCheck.Add("DESCRIPTION", "TEXT");
2527
                    dicColCheck.Add("INDEX", "INTEGER");
2528
                    dicColCheck.Add("NAME", "TEXT");
2529
                    if (matched == null)
2530
                    {
2531
                        var query = $"CREATE TABLE {PSN_VENTDRAIN_SETTING} (GROUP_ID TEXT, DESCRIPTION TEXT, [INDEX] INTEGER, NAME TEXT)";
2532
                        using (var cmd = connection.GetSqlStringCommand(query))
2533
                        {
2534
                            cmd.ExecuteNonQuery();
2535
                        }
2536
                    }
2537
                    else
2538
                    {
2539
                        AddColumn(PSN_VENTDRAIN_SETTING, dicColCheck);
2540
                    }
2541

    
2542
                    matched = names.FirstOrDefault(param => param == PSN_TOPOLOGY_RULE);
2543
                    dicColCheck.Clear();
2544
                    dicColCheck.Add("UID", "TEXT");
2545
                    if (matched == null)
2546
                    {
2547
                        var query = $"CREATE TABLE {PSN_TOPOLOGY_RULE} (UID TEXT)";
2548
                        using (var cmd = connection.GetSqlStringCommand(query))
2549
                        {
2550
                            cmd.ExecuteNonQuery();
2551
                        }
2552

    
2553
                        DataTable topologyRule = new DataTable();
2554
                        topologyRule.Columns.Add("NAME", typeof(string));
2555

    
2556
                        topologyRule.Rows.Add("FluidCode");
2557
                        topologyRule.Rows.Add("-");
2558
                        topologyRule.Rows.Add("PipingMaterialsClass");
2559
                        topologyRule.Rows.Add("-");
2560
                        topologyRule.Rows.Add("Tag Seq No");
2561

    
2562
                        SaveTopologyRule(topologyRule);
2563
                    }
2564
                    //else
2565
                    //{
2566
                    //    AddColumn(PSN_TOPOLOGY_RULE, dicColCheck);
2567
                    //}
2568

    
2569
                    matched = names.FirstOrDefault(param => param == PSN_PIPESYSTEMNETWORK);
2570
                    dicColCheck.Clear();
2571
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2572
                    dicColCheck.Add("Type", "NVARCHAR(255)");
2573
                    dicColCheck.Add("OrderNumber", "NVARCHAR(255)");
2574
                    dicColCheck.Add("Pipeline_OID", "NVARCHAR(255)");
2575
                    dicColCheck.Add("From_Data", "NVARCHAR(255)");
2576
                    dicColCheck.Add("To_Data", "NVARCHAR(255)");
2577
                    dicColCheck.Add("TopologySet_OID_Key", "NVARCHAR(125)");
2578
                    dicColCheck.Add("PSNRevisionNumber", "NVARCHAR(255)");
2579
                    dicColCheck.Add("IsValid", "INT");
2580
                    dicColCheck.Add("Status", "NVARCHAR(255)");
2581
                    dicColCheck.Add("PBS", "NVARCHAR(255)");
2582
                    dicColCheck.Add("Drawings", "NVARCHAR(255)");
2583
                    dicColCheck.Add("IncludingVirtualData", "NVARCHAR(10)");
2584
                    dicColCheck.Add("PSNAccuracy", "REAL");
2585
                    dicColCheck.Add("Pocket", "NVARCHAR(10)");
2586
                    
2587
                    if (matched == null)
2588
                    {
2589
                        var query = $"CREATE TABLE {PSN_PIPESYSTEMNETWORK} (OID NVARCHAR(255), Type NVARCHAR(255), OrderNumber NVARCHAR(255), Pipeline_OID NVARCHAR(255), From_Data NVARCHAR(255), " +
2590
                            "To_Data NVARCHAR(255), TopologySet_OID_Key NVARCHAR(125), PSNRevisionNumber NVARCHAR(255), IsValid INTEGER, Status NVARCHAR(255), PBS NVARCHAR(255), Drawings NVARCHAR(255), " +
2591
                            "IncludingVirtualData NVARCHAR(10),  PSNAccuracy REAL, Pocket NVARCHAR(10))";
2592
                        using (var cmd = connection.GetSqlStringCommand(query))
2593
                        {
2594
                            cmd.ExecuteNonQuery();
2595
                        }
2596
                    }
2597
                    else
2598
                    {
2599
                        AddColumn(PSN_PIPESYSTEMNETWORK, dicColCheck);
2600
                    }
2601

    
2602
                    matched = names.FirstOrDefault(param => param == PSN_EQUIPMENT);
2603
                    dicColCheck.Clear();
2604
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2605
                    dicColCheck.Add("ItemTag", "NVARCHAR(255)");
2606
                    dicColCheck.Add("Xcoords", "REAL");
2607
                    dicColCheck.Add("Ycoords", "REAL");
2608
                    if (matched == null)
2609
                    {
2610
                        var query = $"CREATE TABLE {PSN_EQUIPMENT} (OID NVARCHAR(255), ItemTag NVARCHAR(255), Xcoords REAL, Ycoords REAL)";
2611
                        using (var cmd = connection.GetSqlStringCommand(query))
2612
                        {
2613
                            cmd.ExecuteNonQuery();
2614
                        }
2615
                    }
2616
                    else
2617
                    {
2618
                        AddColumn(PSN_EQUIPMENT, dicColCheck);
2619
                    }
2620

    
2621
                    dicColCheck.Clear();
2622
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2623
                    dicColCheck.Add("ItemTag", "NVARCHAR(255)");
2624
                    dicColCheck.Add("Xcoords", "REAL");
2625
                    dicColCheck.Add("Ycoords", "REAL");
2626
                    dicColCheck.Add("Equipment_OID", "NVARCHAR(255)");
2627
                    dicColCheck.Add("Fluid", "NVARCHAR(255)");
2628
                    dicColCheck.Add("NPD", "NVARCHAR(255)");
2629
                    dicColCheck.Add("PMC", "NVARCHAR(255)");
2630
                    dicColCheck.Add("Rotation", "REAL");
2631
                    dicColCheck.Add("FlowDirection", "NVARCHAR(255)");
2632

    
2633
                    matched = names.FirstOrDefault(param => param == PSN_NOZZLE);
2634
                    if (matched == null)
2635
                    {
2636
                        var query = $"CREATE TABLE {PSN_NOZZLE} (OID NVARCHAR(255), ItemTag NVARCHAR(255), Xcoords REAL, Ycoords REAL, Equipment_OID NVARCHAR(255), " +
2637
                            "Fluid NVARCHAR(255), NPD NVARCHAR(255), PMC NVARCHAR(255), Rotation REAL, FlowDirection NVARCHAR(255))";
2638
                        using (var cmd = connection.GetSqlStringCommand(query))
2639
                        {
2640
                            cmd.ExecuteNonQuery();
2641
                        }
2642
                    }
2643
                    else
2644
                    {
2645
                        AddColumn(PSN_NOZZLE, dicColCheck);
2646
                    }
2647

    
2648
                    matched = names.FirstOrDefault(param => param == PSN_FLUIDCODE);
2649
                    dicColCheck.Clear();
2650
                    dicColCheck.Add("UID", "NVARCHAR(50)");
2651
                    dicColCheck.Add("Code", "NVARCHAR(255)");
2652
                    dicColCheck.Add("Description", "NVARCHAR(255)");
2653
                    dicColCheck.Add("Condition", "NVARCHAR(255)");
2654
                    dicColCheck.Add("Remarks", "NVARCHAR(255)");
2655
                    dicColCheck.Add("GroundLevel", "NVARCHAR(20)");
2656
                    if (matched == null)
2657
                    {
2658
                        var query = $"CREATE TABLE {PSN_FLUIDCODE} (UID NVARCHAR(50), Code NVARCHAR(255), Description NVARCHAR(255), Condition NVARCHAR(255), Remarks NVARCHAR(255), GroundLevel NVARCHAR(20))";
2659
                        using (var cmd = connection.GetSqlStringCommand(query))
2660
                        {
2661
                            cmd.ExecuteNonQuery();
2662
                        }
2663
                    }
2664
                    else
2665
                    {
2666
                        AddColumn(PSN_FLUIDCODE, dicColCheck);
2667
                    }
2668

    
2669
                    matched = names.FirstOrDefault(param => param == PSN_PIPINGMATLCLASS);
2670
                    dicColCheck.Clear();
2671
                    dicColCheck.Add("UID", "NVARCHAR(50)");
2672
                    dicColCheck.Add("Priority", "INTEGER");
2673
                    dicColCheck.Add("Code", "NVARCHAR(255)");
2674
                    dicColCheck.Add("Description", "NVARCHAR(255)");
2675
                    dicColCheck.Add("Condition", "NVARCHAR(255)");
2676
                    dicColCheck.Add("Remarks", "NVARCHAR(255)");
2677
                    dicColCheck.Add("GroundLevel", "NVARCHAR(20)");
2678
                    if (matched == null)
2679
                    {
2680
                        var query = $"CREATE TABLE {PSN_PIPINGMATLCLASS} (UID NVARCHAR(50), Priority INTEGER, Code NVARCHAR(255), Description NVARCHAR(255), Condition NVARCHAR(255), Remarks NVARCHAR(255), GroundLevel NVARCHAR(20))";
2681
                        using (var cmd = connection.GetSqlStringCommand(query))
2682
                        {
2683
                            cmd.ExecuteNonQuery();
2684
                        }
2685
                    }
2686
                    else
2687
                    {
2688
                        AddColumn(PSN_PIPINGMATLCLASS, dicColCheck);
2689
                    }
2690

    
2691
                    matched = names.FirstOrDefault(param => param == PSN_SEQUENCEDATA);
2692
                    dicColCheck.Clear();
2693
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2694
                    dicColCheck.Add("SERIALNUMBER", "NVARCHAR(255)");
2695
                    dicColCheck.Add("PathItem_OID", "NVARCHAR(255)");
2696
                    dicColCheck.Add("TopologySet_OID_Key", "NVARCHAR(255)");
2697
                    if (matched == null)
2698
                    {
2699
                        var query = $"CREATE TABLE {PSN_SEQUENCEDATA} (OID NVARCHAR(255), SERIALNUMBER NVARCHAR(255), PathItem_OID NVARCHAR(255), TopologySet_OID_Key NVARCHAR(255))";
2700
                        using (var cmd = connection.GetSqlStringCommand(query))
2701
                        {
2702
                            cmd.ExecuteNonQuery();
2703
                        }
2704
                    }
2705
                    else
2706
                    {
2707
                        AddColumn(PSN_SEQUENCEDATA, dicColCheck);
2708
                    }
2709

    
2710
                    matched = names.FirstOrDefault(param => param == PSN_PATHITEMS);
2711
                    dicColCheck.Clear();
2712
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2713
                    dicColCheck.Add("SequenceData_OID", "NVARCHAR(255)");
2714
                    dicColCheck.Add("TopologySet_OID", "NVARCHAR(255)");
2715
                    dicColCheck.Add("BranchTopologySet_OID", "NVARCHAR(255)");
2716
                    dicColCheck.Add("PipeLine_OID", "NVARCHAR(255)");
2717
                    dicColCheck.Add("ItemName", "NVARCHAR(255)");
2718
                    dicColCheck.Add("ItemTag", "NVARCHAR(255)");
2719
                    dicColCheck.Add("DESCRIPTION", "NVARCHAR(255)");
2720
                    dicColCheck.Add("CLASS", "NVARCHAR(255)");
2721
                    dicColCheck.Add("SUBCLASS", "NVARCHAR(255)");
2722
                    dicColCheck.Add("TYPE", "NVARCHAR(255)");
2723
                    dicColCheck.Add("PIDNAME", "NVARCHAR(255)");
2724
                    dicColCheck.Add("Equipment_OID", "NVARCHAR(255)");
2725
                    dicColCheck.Add("NPD", "NVARCHAR(255)");
2726
                    dicColCheck.Add("GROUPTAG", "NVARCHAR(255)");
2727
                    dicColCheck.Add("PipeSystemNetwork_OID", "NVARCHAR(255)");
2728
                    dicColCheck.Add("PipeRun_OID", "NVARCHAR(255)");
2729
                    dicColCheck.Add("ViewPipeSystemNetwork_OID", "NVARCHAR(255)");
2730
                    if (matched == null)
2731
                    {
2732
                        var query = $"CREATE TABLE {PSN_PATHITEMS} (OID NVARCHAR(255), SequenceData_OID NVARCHAR(255), " +
2733
                            "TopologySet_OID NVARCHAR(255), BranchTopologySet_OID NVARCHAR(255), PipeLine_OID NVARCHAR(255), ItemName NVARCHAR(255), ItemTag NVARCHAR(255), DESCRIPTION NVARCHAR(255), " +
2734
                            "CLASS NVARCHAR(255), SUBCLASS NVARCHAR(255), TYPE NVARCHAR(255), PIDNAME NVARCHAR(255), Equipment_OID NVARCHAR(255), NPD NVARCHAR(255), GROUPTAG NVARCHAR(255), PipeSystemNetwork_OID NVARCHAR(255), PipeRun_OID NVARCHAR(255), " +
2735
                            "ViewPipeSystemNetwork_OID NVARCHAR(255))";
2736
                        using (var cmd = connection.GetSqlStringCommand(query))
2737
                        {
2738
                            cmd.ExecuteNonQuery();
2739
                        }
2740
                    }
2741
                    else
2742
                    {
2743
                        AddColumn(PSN_PATHITEMS, dicColCheck);
2744
                    }
2745

    
2746
                    matched = names.FirstOrDefault(param => param == PSN_VIEW);
2747
                    dicColCheck.Clear();
2748
                    dicColCheck.Add("OID", "TEXT");
2749
                    if (matched == null)
2750
                    {
2751
                        var query = $"CREATE TABLE {PSN_VIEW} (OID TEXT)";
2752
                        using (var cmd = connection.GetSqlStringCommand(query))
2753
                        {
2754
                            cmd.ExecuteNonQuery();
2755
                        }
2756
                    }
2757

    
2758
                    matched = names.FirstOrDefault(param => param == PSN_TOPOLOGYSET);
2759
                    dicColCheck.Clear();
2760
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2761
                    dicColCheck.Add("Type", "NVARCHAR(255)");
2762
                    dicColCheck.Add("SubType", "NVARCHAR(255)");
2763
                    dicColCheck.Add("HeadItemTag", "NVARCHAR(255)");
2764
                    dicColCheck.Add("TailItemTag", "NVARCHAR(255)");
2765
                    dicColCheck.Add("HeadItemSPID", "NVARCHAR(255)");
2766
                    dicColCheck.Add("TailItemSPID", "NVARCHAR(255)");
2767

    
2768
                    if (matched == null)
2769
                    {
2770
                        var query = $"CREATE TABLE { PSN_TOPOLOGYSET} (OID NVARCHAR(255), Type NVARCHAR(255), SubType NVARCHAR(255), HeadItemTag NVARCHAR(255), TailItemTag NVARCHAR(255), HeadItemSPID NVARCHAR(255), TailItemSPID NVARCHAR(255))";
2771
                        using (var cmd = connection.GetSqlStringCommand(query))
2772
                        {
2773
                            cmd.ExecuteNonQuery();
2774
                        }
2775
                    }
2776
                    else
2777
                    {
2778
                        AddColumn(PSN_TOPOLOGYSET, dicColCheck);
2779
                    }
2780

    
2781
                    matched = names.FirstOrDefault(param => param == PSN_TRANSFORMKEYWORD_SETTING);
2782
                    dicColCheck.Clear();
2783
                    dicColCheck.Add("INDEX", "INTEGER");
2784
                    dicColCheck.Add("NAME", "TEXT");
2785
                    dicColCheck.Add("KEYWORD", "TEXT");
2786
                    if (matched == null)
2787
                    {
2788
                        var query = $"CREATE TABLE {PSN_TRANSFORMKEYWORD_SETTING} ([INDEX] INTEGER, [NAME] TEXT, [KEYWORD] TEXT)";
2789
                        using (var cmd = connection.GetSqlStringCommand(query))
2790
                        {
2791
                            cmd.ExecuteNonQuery();
2792
                        }
2793
                    }
2794
                    else
2795
                    {
2796
                        AddColumn(PSN_TRANSFORMKEYWORD_SETTING, dicColCheck);
2797
                    }
2798

    
2799
                    matched = names.FirstOrDefault(param => param == PSN_PIPELINE);
2800
                    dicColCheck.Clear();
2801
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2802
                    dicColCheck.Add("PipeSystem_OID", "NVARCHAR(255)");
2803
                    dicColCheck.Add("FLUID", "NVARCHAR(255)");
2804
                    dicColCheck.Add("PMC", "NVARCHAR(255)");
2805
                    dicColCheck.Add("SEQNUMBER", "NVARCHAR(255)");
2806
                    dicColCheck.Add("INSULATION", "NVARCHAR(255)");
2807
                    dicColCheck.Add("FROM_DATA", "NVARCHAR(255)");
2808
                    dicColCheck.Add("TO_DATA", "NVARCHAR(255)");
2809
                    dicColCheck.Add("Unit", "NVARCHAR(100)");
2810
                    if (matched == null)
2811
                    {
2812
                        var query = $"CREATE TABLE {PSN_PIPELINE} (OID NVARCHAR(255), PipeSystem_OID NVARCHAR(255), FLUID NVARCHAR(255), PMC NVARCHAR(255), SEQNUMBER NVARCHAR(255), INSULATION NVARCHAR(255), " +
2813
                            $"FROM_DATA NVARCHAR(255), TO_DATA NVARCHAR(255), Unit NVARCHAR(100))";
2814
                        using (var cmd = connection.GetSqlStringCommand(query))
2815
                        {
2816
                            cmd.ExecuteNonQuery();
2817
                        }
2818
                    }
2819
                    else
2820
                    {
2821
                        AddColumn(PSN_PIPELINE, dicColCheck);
2822
                    }
2823

    
2824
                    matched = names.FirstOrDefault(param => param == PSN_INSULATIONPURPOSE);
2825
                    dicColCheck.Clear();
2826
                    dicColCheck.Add("UID", "NVARCHAR(50)");
2827
                    dicColCheck.Add("Code", "NVARCHAR(255)");
2828
                    dicColCheck.Add("Description", "NVARCHAR(255)");
2829
                    dicColCheck.Add("Remarks", "NVARCHAR(255)");
2830
                    if (matched == null)
2831
                    {
2832
                        var query = $"CREATE TABLE {PSN_INSULATIONPURPOSE} (UID NVARCHAR(50), Code NVARCHAR(255), Description NVARCHAR(255), Remarks NVARCHAR(255))";
2833
                        using (var cmd = connection.GetSqlStringCommand(query))
2834
                        {
2835
                            cmd.ExecuteNonQuery();
2836
                        }
2837
                    }
2838
                    else
2839
                    {
2840
                        AddColumn(PSN_INSULATIONPURPOSE, dicColCheck);
2841
                    }
2842

    
2843
                    matched = names.FirstOrDefault(param => param == PSN_VALVEGROUP_SETTING);
2844
                    dicColCheck.Clear();
2845
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2846
                    dicColCheck.Add("GroupType", "NVARCHAR(255)");
2847
                    dicColCheck.Add("TagIdentifier", "NVARCHAR(50)");
2848
                    dicColCheck.Add("AttributeName", "NVARCHAR(255)");
2849
                    dicColCheck.Add("SppidSymbolName", "NVARCHAR(255)");
2850
                    if (matched == null)
2851
                    {
2852
                        var query = $"CREATE TABLE {PSN_VALVEGROUP_SETTING} (OID NVARCHAR(50), GroupType NVARCHAR(255), TagIdentifier NVARCHAR(50), AttributeName NVARCHAR(255), SppidSymbolName NVARCHAR(255))";
2853
                        using (var cmd = connection.GetSqlStringCommand(query))
2854
                        {
2855
                            cmd.ExecuteNonQuery();
2856
                        }
2857
                    }
2858
                    else
2859
                    {
2860
                        AddColumn(PSN_VALVEGROUP_SETTING, dicColCheck);
2861
                    }
2862

    
2863
                    matched = names.FirstOrDefault(param => param == PSN_PIPESYSTEM);
2864
                    dicColCheck.Clear();
2865
                    dicColCheck.Add("OID", "NVARCHAR(255)");
2866
                    dicColCheck.Add("DESCRIPTION", "NVARCHAR(255)");
2867
                    dicColCheck.Add("FLUID", "NVARCHAR(255)");
2868
                    dicColCheck.Add("PMC", "NVARCHAR(255)");
2869
                    dicColCheck.Add("PipeLineQty", "NVARCHAR(255)");
2870
                    dicColCheck.Add("GroundLevel", "NVARCHAR(20)");
2871
                    if (matched == null)
2872
                    {
2873
                        var query = $"CREATE TABLE {PSN_PIPESYSTEM} (OID NVARCHAR(255), DESCRIPTION NVARCHAR(255), FLUID NVARCHAR(255), PMC NVARCHAR(255), PipeLineQty NVARCHAR(255), GroundLevel NVARCHAR(20))";
2874
                        using (var cmd = connection.GetSqlStringCommand(query))
2875
                        {
2876
                            cmd.ExecuteNonQuery();
2877
                        }
2878
                    }
2879
                    else
2880
                    {
2881
                        AddColumn(PSN_PIPESYSTEM, dicColCheck);
2882
                    }
2883

    
2884
                    matched = names.FirstOrDefault(param => param == PSN_NOPOCKETSETTING);
2885
                    dicColCheck.Clear();
2886
                    dicColCheck.Add("[INDEX]", "INTEGER");
2887
                    dicColCheck.Add("[TYPE]", "TEXT");
2888
                    dicColCheck.Add("[NAME]", "TEXT");
2889
                    if (matched == null)
2890
                    {
2891
                        var query = $"CREATE TABLE {PSN_NOPOCKETSETTING} ([INDEX] INTEGER, [TYPE] TEXT, [NAME] TEXT)";
2892
                        using (var cmd = connection.GetSqlStringCommand(query))
2893
                        {
2894
                            cmd.ExecuteNonQuery();
2895
                        }
2896
                    }
2897
                    else
2898
                    {
2899
                        AddColumn(PSN_NOPOCKETSETTING, dicColCheck);
2900
                    }
2901

    
2902
                    var query2 = $"If(db_id(N'" + PSN_COMMON + "') IS NULL) CREATE DATABASE [" + PSN_COMMON + "]";
2903
                    if (id2Info.ID2DBType == AnotherID2DB_Type.MSSQL)
2904
                    {
2905
                        //connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
2906
                        using (var cmd = connection.GetSqlStringCommand(query2))
2907
                        {
2908
                            cmd.ExecuteNonQuery();
2909
                        }
2910
                    }
2911

    
2912
                    void AddColumn(string TableName, Dictionary<string, string> dicCol)
2913
                    {
2914
                        var colnames = connection.GetColumnNames(TableName);
2915
                        bool check = false;
2916
                        if (colnames != null)
2917
                        {
2918
                            foreach (KeyValuePair<string, string> col in dicCol)
2919
                            {
2920
                                check = false;
2921
                                foreach (string c in colnames)
2922
                                {
2923
                                    if (col.Key.ToUpper().Equals(c.ToUpper()))
2924
                                    {
2925
                                        check = true;
2926
                                        break;
2927
                                    }
2928
                                }
2929

    
2930
                                if (!check) //없으면 추가
2931
                                {
2932
                                    string i = string.Empty;
2933
                                    if (col.Value.ToString().ToUpper().Contains("INT") || col.Value.ToString().ToUpper().Contains("REAL"))
2934
                                        i = "DEFAULT 0";
2935

    
2936
                                    var query = $"ALTER TABLE " + TableName + " ADD [" + col.Key + "] " + col.Value + " " + i + ";";
2937
                                    using (var cmd = connection.GetSqlStringCommand(query))
2938
                                    {
2939
                                        cmd.ExecuteNonQuery();
2940
                                    }
2941
                                }
2942
                            }
2943
                        }
2944
                    }
2945

    
2946
                    result = true;
2947
                }
2948
                catch (Exception ex)
2949
                {
2950
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
2951
                }
2952
            }
2953

    
2954
            return result;
2955
        }
2956

    
2957
        public static bool SaveAnotherRevision(string ProjectCode, int RevNumber, string UserName, string PSNDatabasePath, string PsnByPBSFilter, string PsnByNPDFilter,
2958
         int PidDrawings, int PipeSystems, int PipeLines, int Topologies, int PipeSystemNetworks, int InValidPSNs, int E2E, int E2B, int B2E, int HDE, int HD2, int HDB, int B2B)
2959
        {
2960
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
2961

    
2962
            bool result = true;
2963

    
2964
            using (IAbstractDatabase connection = id2Info.CreateConnection())
2965
            {
2966
                try
2967
                {
2968
                    using (var txn = connection.BeginTransaction())
2969
                    {
2970
                        try
2971
                        {
2972

    
2973
                            var query = $"INSERT INTO ARS_COMMON.dbo.PSNRevision (OID, Project_OID, ProjectCode, RevNumber, UserName, TimeData, PSNDatabasePath, " +
2974
                                $"PsnByPBSFilter, PsnByNPDFilter, PidDrawings, PipeSystems, PipeLines, Topologies, PipeSystemNetworks, InValidPSNs, E2E, E2B, B2E, HDE, " +
2975
                                $"HD2, HDB, B2B, LastModificationdate) VALUES (NEWID(), NEWID(), @ProjectCode, @RevNumber, @UserName, @TimeData, @PSNDatabasePath" +
2976
                                $", @PsnByPBSFilter, @PsnByNPDFilter, @PidDrawings, @PipeSystems, @PipeLines, @Topologies, @PipeSystemNetworks, @InValidPSNs, " +
2977
                                $"@E2E, @E2B, @B2E, @HDE, @HD2, @HDB, @B2B, @LastModificationdate)";
2978
                            var cmd = connection.GetSqlStringCommand(query);
2979
                            AddWithValue(cmd, "@OID", Guid.NewGuid().ToString());
2980
                            AddWithValue(cmd, "@Project_OID", Guid.NewGuid().ToString());
2981
                            AddWithValue(cmd, "@ProjectCode", ProjectCode);
2982
                            AddWithValue(cmd, "@RevNumber", RevNumber);
2983
                            AddWithValue(cmd, "@UserName", UserName);
2984

    
2985
                            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");
2986
                            DateTime oDateTime = DateTime.Now;                            
2987

    
2988
                            AddWithValue(cmd, "@TimeData", oDateTime.ToString(ci)); //String.Format("{0:G}", dt) // DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
2989
                            
2990
                            AddWithValue(cmd, "@PSNDatabasePath", PSNDatabasePath);
2991

    
2992
                            AddWithValue(cmd, "@PsnByPBSFilter", PsnByPBSFilter);
2993
                            AddWithValue(cmd, "@PsnByNPDFilter", PsnByNPDFilter);
2994
                            AddWithValue(cmd, "@PidDrawings", PidDrawings);
2995
                            AddWithValue(cmd, "@PipeSystems", PipeSystems);
2996
                            AddWithValue(cmd, "@PipeLines", PipeLines);
2997

    
2998
                            AddWithValue(cmd, "@Topologies", Topologies);
2999
                            AddWithValue(cmd, "@PipeSystemNetworks", PipeSystemNetworks);
3000
                            AddWithValue(cmd, "@InValidPSNs", InValidPSNs);
3001
                            AddWithValue(cmd, "@E2E", E2E);
3002
                            AddWithValue(cmd, "@E2B", E2B);
3003
                            AddWithValue(cmd, "@B2E", B2E);
3004
                            AddWithValue(cmd, "@HDE", HDE);
3005
                            AddWithValue(cmd, "@HD2", HD2);
3006
                            AddWithValue(cmd, "@HDB", HDB);
3007
                            AddWithValue(cmd, "@B2B", B2B);
3008

    
3009
                            AddWithValue(cmd, "@LastModificationdate", oDateTime.ToString(ci));
3010
                            connection.ExecuteNonQuery(cmd, txn);
3011

    
3012
                            txn.Commit();
3013
                        }
3014
                        catch (Exception ex)
3015
                        {
3016
                            txn.Rollback();
3017
                            result = false;
3018
                        }
3019
                    }
3020
                }
3021
                catch (Exception ex)
3022
                {
3023
                    System.Windows.Forms.MessageBox.Show(ex.Message);
3024
                    result = false;
3025
                }
3026
            }
3027

    
3028
            return result;
3029
        }
3030

    
3031
        public static bool ConnAnotherCreateRevisionTable(Dictionary<string, string> dicColCheck, List<string> names)
3032
        {
3033
            bool result = false;
3034
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
3035

    
3036
            using (IAbstractDatabase connection = id2Info.CreateConnection())
3037
            {
3038
                try
3039
                {
3040
                    if (names.Count == 0)
3041
                    {
3042

    
3043
                        var query = $"CREATE TABLE ARS_COMMON.dbo.PSNRevision ([OID] [uniqueidentifier] ,[Project_OID] [uniqueidentifier] ," +
3044
                            $"[ProjectCode] nvarchar(255), [RevNumber] int ,[UserName] nvarchar(255) ,[TimeData] nvarchar(255) ," +
3045
                            $"[PSNDatabasePath] nvarchar(255) ,	[PsnByPBSFilter] varchar(20) ,[PsnByNPDFilter] varchar(20) ,[PidDrawings] int ,	" +
3046
                            $"[PipeSystems] int ,[PipeLines] int ,[Topologies] int ,[PipeSystemNetworks] int ,[InValidPSNs] int ,[E2E] int ," +
3047
                            $"[E2B] int ,[B2E] int ,[HDE] int ,[HD2] int ,[HDB] int ,[B2B] int , [LastModificationdate] nvarchar(255))";
3048
                        using (var cmd = connection.GetSqlStringCommand(query))
3049
                        {
3050
                            cmd.ExecuteNonQuery();
3051
                        }
3052
                    }
3053
                    else
3054
                    {
3055
                        AddColumn(PSN_REVISION, dicColCheck, names);
3056
                    }
3057

    
3058
                    void AddColumn(string TableName, Dictionary<string, string> dicCol, List<string> colnames)
3059
                    {
3060
                        bool check = false;
3061
                        if (colnames != null)
3062
                        {
3063
                            foreach (KeyValuePair<string, string> col in dicCol)
3064
                            {
3065
                                check = false;
3066
                                foreach (string c in colnames)
3067
                                {
3068
                                    if (col.Key.Contains(c))
3069
                                    {
3070
                                        check = true;
3071
                                        break;
3072
                                    }
3073
                                }
3074

    
3075
                                if (!check) //없으면 추가
3076
                                {
3077
                                    string i = string.Empty;
3078
                                    if (col.Value.ToString().ToUpper().Contains("INT") || col.Value.ToString().ToUpper().Contains("REAL"))
3079
                                        i = "DEFAULT 0";
3080

    
3081
                                    var queryalter = $"ALTER TABLE ARS_COMMON.dbo.PSNRevision ADD [" + col.Key + "] " + col.Value + " " + i + ";";
3082
                                    using (var cmd = connection.GetSqlStringCommand(queryalter))
3083
                                    {
3084
                                        cmd.ExecuteNonQuery();
3085
                                    }
3086
                                }
3087
                            }
3088
                        }
3089
                    }
3090

    
3091
                    result = true;
3092
                }
3093
                catch (Exception ex)
3094
                {
3095
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
3096
                }
3097
            }
3098

    
3099
            return result;
3100
        }
3101

    
3102
        public static DataTable SelectAnotherRevision()
3103
        {
3104
            DataTable dt = null;
3105
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
3106

    
3107
            using (IAbstractDatabase connection = id2Info.CreateConnection())
3108
            {
3109
                try
3110
                {
3111
                    var query = $"SELECT * FROM ARS_COMMON.dbo.PSNREVISION";
3112

    
3113
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
3114
                    {
3115
                        dt = ds.Tables[0].Copy();
3116
                    }
3117
                }
3118
                catch (Exception ex)
3119
                {
3120
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
3121
                }
3122
            }
3123

    
3124
            return dt;
3125
        }
3126

    
3127
        public static DataTable SelectAnotherRevisionTable()
3128
        {
3129
            DataTable dt = null;
3130
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
3131

    
3132
            using (IAbstractDatabase connection = id2Info.CreateConnection())
3133
            {
3134
                try
3135
                {
3136
                    var query = $"SELECT T.name AS table_name, C.name AS column_name FROM ARS_COMMON.sys.tables AS T INNER JOIN ARS_COMMON.sys.columns AS C ON T.object_id = C.object_id WHERE T.name = 'PSNREVISION'";
3137
                    using (var ds = connection.ExecuteDataSet(connection.GetSqlStringCommand(query)))
3138
                    {
3139
                        dt = ds.Tables[0].Copy();
3140
                    }
3141
                }
3142
                catch (Exception ex)
3143
                {
3144
                    Log.Write(ex.Message + "\r\n" + ex.StackTrace);
3145
                }
3146
            }
3147

    
3148
            return dt;
3149
        }
3150

    
3151
        public static bool SaveAnotherPSNData(PSN item, List<HeaderInfo> headerInfos, List<VentDrainInfo> ventDrainInfos,
3152
          List<KeywordItem> keywordItems, DataTable dtTopologyRule, DataTable dtFluidCode, DataTable dtPMC, DataTable dtInsulation, DataTable dtvalvegrouping, DataTable dtnopocket)
3153
        {
3154
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
3155

    
3156
            bool result = true;
3157
            using (IAbstractDatabase connection = id2Info.CreateConnection())
3158
            {
3159
                try
3160
                {
3161
                    using (var txn = connection.BeginTransaction())
3162
                    {
3163
                        try
3164
                        {
3165
                            // Path Items
3166
                            var query = $"DELETE FROM {PSN_PATHITEMS}";
3167
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3168
                            for (int i = 0; i < item.PathItems.Rows.Count; i++)
3169
                            {
3170
                                DataRow row = item.PathItems.Rows[i];
3171
                                query = $"INSERT INTO {PSN_PATHITEMS} " +
3172
                                    $"(OID, SequenceData_OID, TopologySet_OID, BranchTopologySet_OID, PipeLine_OID, ItemName, ItemTag, DESCRIPTION, CLASS, SUBCLASS, TYPE, " +
3173
                                    $"PIDNAME, Equipment_OID, NPD, GROUPTAG, PipeSystemNetwork_OID, PipeRun_OID, ViewPipeSystemNetwork_OID) VALUES " +
3174
                                    $"(@OID, @SequenceData_OID, @TopologySet_OID, @BranchTopologySet_OID, @PipeLine_OID, @ITEMNAME, @ITEMTAG, @DESCRIPTION, @Class, @SubClass, @TYPE, @PIDNAME," +
3175
                                    $" @Equipment_OID, @NPD, @GROUPTAG, @PipeSystemNetwork_OID,@PipeRun_OID, @ViewPipeSystemNetwork_OID)";
3176
                                var cmd = connection.GetSqlStringCommand(query);
3177
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
3178
                                AddWithValue(cmd, "@SequenceData_OID", string.IsNullOrEmpty(row["SequenceData_OID"].ToString()) ? "" : row["SequenceData_OID"].ToString());
3179
                                AddWithValue(cmd, "@TopologySet_OID", string.IsNullOrEmpty(row["TopologySet_OID"].ToString()) ? "" : row["TopologySet_OID"].ToString());
3180
                                AddWithValue(cmd, "@BranchTopologySet_OID", string.IsNullOrEmpty(row["BranchTopologySet_OID"].ToString()) ? "" : row["BranchTopologySet_OID"].ToString());
3181
                                AddWithValue(cmd, "@PipeLine_OID", string.IsNullOrEmpty(row["PipeLine_OID"].ToString()) ? "" : row["PipeLine_OID"].ToString());
3182
                                AddWithValue(cmd, "@ITEMNAME", string.IsNullOrEmpty(row["ITEMNAME"].ToString()) ? "" : row["ITEMNAME"].ToString());
3183
                                AddWithValue(cmd, "@ITEMTAG", string.IsNullOrEmpty(row["ITEMTAG"].ToString()) ? "" : row["ITEMTAG"].ToString());
3184
                                AddWithValue(cmd, "@DESCRIPTION", string.IsNullOrEmpty(row["DESCRIPTION"].ToString()) ? "" : row["DESCRIPTION"].ToString());
3185
                                AddWithValue(cmd, "@Class", string.IsNullOrEmpty(row["Class"].ToString()) ? "" : row["Class"].ToString());
3186
                                AddWithValue(cmd, "@SubClass", string.IsNullOrEmpty(row["SubClass"].ToString()) ? "" : row["SubClass"].ToString());
3187
                                AddWithValue(cmd, "@TYPE", string.IsNullOrEmpty(row["TYPE"].ToString()) ? "" : row["TYPE"].ToString());
3188
                                AddWithValue(cmd, "@PIDNAME", string.IsNullOrEmpty(row["PIDNAME"].ToString()) ? "" : row["PIDNAME"].ToString());
3189
                                AddWithValue(cmd, "@Equipment_OID", string.IsNullOrEmpty(row["Equipment_OID"].ToString()) ? "" : row["Equipment_OID"].ToString());
3190
                                AddWithValue(cmd, "@NPD", string.IsNullOrEmpty(row["NPD"].ToString()) ? "" : row["NPD"].ToString());
3191
                                AddWithValue(cmd, "@GROUPTAG", string.IsNullOrEmpty(row["GROUPTAG"].ToString()) ? "" : row["GROUPTAG"].ToString());
3192
                                AddWithValue(cmd, "@PipeSystemNetwork_OID", string.IsNullOrEmpty(row["PipeSystemNetwork_OID"].ToString()) ? "" : row["PipeSystemNetwork_OID"].ToString());
3193
                                AddWithValue(cmd, "@ViewPipeSystemNetwork_OID", string.IsNullOrEmpty(row["ViewPipeSystemNetwork_OID"].ToString()) ? "" : row["ViewPipeSystemNetwork_OID"].ToString());
3194
                                AddWithValue(cmd, "@PipeRun_OID", string.IsNullOrEmpty(row["PipeRun_OID"].ToString()) ? "" : row["PipeRun_OID"].ToString());
3195
                                connection.ExecuteNonQuery(cmd, txn);
3196
                            }
3197

    
3198
                            // Sequence
3199
                            query = $"DELETE FROM {PSN_SEQUENCEDATA}";
3200
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3201
                            foreach (DataRow row in item.SequenceData.Rows)
3202
                            {
3203
                                query = $"INSERT INTO {PSN_SEQUENCEDATA} (OID, SERIALNUMBER, PathItem_OID, TopologySet_OID_Key) VALUES (@OID, @SERIALNUMBER, @PathItem_OID, @TopologySet_OID_Key)";
3204
                                var cmd = connection.GetSqlStringCommand(query);
3205
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
3206
                                AddWithValue(cmd, "@SERIALNUMBER", string.IsNullOrEmpty(row["SERIALNUMBER"].ToString()) ? "" : row["SERIALNUMBER"].ToString());
3207
                                AddWithValue(cmd, "@PathItem_OID", string.IsNullOrEmpty(row["PathItem_OID"].ToString()) ? "" : row["PathItem_OID"].ToString());
3208
                                AddWithValue(cmd, "@TopologySet_OID_Key", string.IsNullOrEmpty(row["TopologySet_OID_Key"].ToString()) ? "" : row["TopologySet_OID_Key"].ToString());
3209
                                connection.ExecuteNonQuery(cmd, txn);
3210
                            }
3211

    
3212
                            // Nozzle
3213
                            query = $"DELETE FROM {PSN_NOZZLE}";
3214
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3215
                            foreach (DataRow row in item.Nozzle.Rows)
3216
                            {
3217
                                query = $"INSERT INTO {PSN_NOZZLE} (OID, ItemTag, Xcoords, Ycoords, Equipment_OID, Fluid, NPD, PMC, Rotation, FlowDirection) VALUES (@OID, @ITEMTAG, @XCOORDS, @YCOORDS, @Equipment_OID, @FLUID, @NPD, @PMC, @ROTATION, @FlowDirection)";
3218
                                var cmd = connection.GetSqlStringCommand(query);
3219
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
3220
                                AddWithValue(cmd, "@ITEMTAG", string.IsNullOrEmpty(row["ITEMTAG"].ToString()) ? "" : row["ITEMTAG"].ToString());
3221

    
3222
                                if (string.IsNullOrEmpty(row["XCOORDS"].ToString()))
3223
                                    AddWithValue(cmd, "@XCOORDS", DBNull.Value);
3224
                                else
3225
                                    AddWithValue(cmd, "@XCOORDS", row["XCOORDS"].ToString());
3226

    
3227
                                if (string.IsNullOrEmpty(row["YCOORDS"].ToString()))
3228
                                    AddWithValue(cmd, "@YCOORDS", DBNull.Value);
3229
                                else
3230
                                    AddWithValue(cmd, "@YCOORDS", row["YCOORDS"].ToString());
3231

    
3232
                                AddWithValue(cmd, "@Equipment_OID", string.IsNullOrEmpty(row["Equipment_OID"].ToString()) ? "" : row["Equipment_OID"].ToString());
3233
                                AddWithValue(cmd, "@FLUID", string.IsNullOrEmpty(row["FLUID"].ToString()) ? "" : row["FLUID"].ToString());
3234
                                AddWithValue(cmd, "@NPD", string.IsNullOrEmpty(row["NPD"].ToString()) ? "" : row["NPD"].ToString());
3235
                                AddWithValue(cmd, "@PMC", string.IsNullOrEmpty(row["PMC"].ToString()) ? "" : row["PMC"].ToString());
3236

    
3237
                                if (string.IsNullOrEmpty(row["ROTATION"].ToString()))
3238
                                    AddWithValue(cmd, "@ROTATION", DBNull.Value);
3239
                                else
3240
                                    AddWithValue(cmd, "@ROTATION", row["ROTATION"].ToString());
3241

    
3242
                                AddWithValue(cmd, "@FlowDirection", string.IsNullOrEmpty(row["FlowDirection"].ToString()) ? "" : row["FlowDirection"].ToString());
3243
                                connection.ExecuteNonQuery(cmd, txn);
3244
                            }
3245

    
3246
                            //Equipment
3247
                            query = $"DELETE FROM {PSN_EQUIPMENT}";
3248
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3249
                            foreach (DataRow row in item.Equipment.Rows)
3250
                            {
3251
                                query = $"INSERT INTO {PSN_EQUIPMENT} (OID, ItemTag, Xcoords, Ycoords) VALUES (@OID, @ITEMTAG, @XCOORDS, @YCOORDS)";
3252
                                var cmd = connection.GetSqlStringCommand(query);
3253
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
3254
                                AddWithValue(cmd, "@ITEMTAG", string.IsNullOrEmpty(row["ITEMTAG"].ToString()) ? "" : row["ITEMTAG"].ToString());
3255

    
3256
                                if (string.IsNullOrEmpty(row["XCOORDS"].ToString()))
3257
                                    AddWithValue(cmd, "@XCOORDS", DBNull.Value);
3258
                                else
3259
                                    AddWithValue(cmd, "@XCOORDS", row["XCOORDS"].ToString());
3260

    
3261
                                if (string.IsNullOrEmpty(row["YCOORDS"].ToString()))
3262
                                    AddWithValue(cmd, "@YCOORDS", DBNull.Value);
3263
                                else
3264
                                    AddWithValue(cmd, "@YCOORDS", row["YCOORDS"].ToString());
3265

    
3266
                                connection.ExecuteNonQuery(cmd, txn);
3267
                            }
3268

    
3269
                            // TopologySet
3270
                            query = $"DELETE FROM {PSN_TOPOLOGYSET}";
3271
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3272
                            foreach (DataRow row in item.TopologySet.Rows)
3273
                            {
3274
                                query = $"INSERT INTO {PSN_TOPOLOGYSET} (OID, Type, SubType, HeadItemTag, TailItemTag, HeadItemSPID, TailItemSPID) VALUES (@OID, @Type, @SubType, @HeadItemTag, @TailItemTag, @HeadItemSPID, @TailItemSPID)";
3275
                                var cmd = connection.GetSqlStringCommand(query);
3276
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
3277
                                AddWithValue(cmd, "@Type", string.IsNullOrEmpty(row["Type"].ToString()) ? "" : row["Type"].ToString());
3278
                                AddWithValue(cmd, "@SubType", string.IsNullOrEmpty(row["SubType"].ToString()) ? "" : row["SubType"].ToString());
3279
                                AddWithValue(cmd, "@HeadItemTag", string.IsNullOrEmpty(row["HeadItemTag"].ToString()) ? "" : row["HeadItemTag"].ToString());
3280
                                AddWithValue(cmd, "@TailItemTag", string.IsNullOrEmpty(row["TailItemTag"].ToString()) ? "" : row["TailItemTag"].ToString());
3281
                                AddWithValue(cmd, "@HeadItemSPID", string.IsNullOrEmpty(row["HeadItemSPID"].ToString()) ? "" : row["HeadItemSPID"].ToString());
3282
                                AddWithValue(cmd, "@TailItemSPID", string.IsNullOrEmpty(row["TailItemSPID"].ToString()) ? "" : row["TailItemSPID"].ToString());
3283
                                connection.ExecuteNonQuery(cmd, txn);
3284
                            }
3285

    
3286
                            // PSN
3287
                            query = $"DELETE FROM {PSN_PIPESYSTEMNETWORK} WHERE PSNRevisionNumber = '{string.Format("V{0:D4}", item.Revision)}'";
3288
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3289
                            foreach (DataRow row in item.PipeSystemNetwork.Rows)
3290
                            {
3291
                                query = $"INSERT INTO {PSN_PIPESYSTEMNETWORK} " +
3292
                                    $"(OID, Type, OrderNumber, Pipeline_OID, FROM_DATA, TO_DATA, TopologySet_OID_Key, PSNRevisionNumber, PBS, Drawings, IsValid, Status, IncludingVirtualData, PSNAccuracy, Pocket) VALUES " +
3293
                                    $"(@OID, @Type, @OrderNumber, @Pipeline_OID, @FROM_DATA, @TO_DATA, @TopologySet_OID_Key, @PSNRevisionNumber,  @PBS, @Drawings, @IsValid, @Status, @IncludingVirtualData, @PSNAccuracy, @Pocket)";
3294
                                var cmd = connection.GetSqlStringCommand(query);
3295
                                AddWithValue(cmd, "@OID", string.IsNullOrEmpty(row["OID"].ToString()) ? "" : row["OID"].ToString());
3296
                                AddWithValue(cmd, "@Type", string.IsNullOrEmpty(row["Type"].ToString()) ? "" : row["Type"].ToString());
3297
                                AddWithValue(cmd, "@OrderNumber", string.IsNullOrEmpty(row["OrderNumber"].ToString()) ? "" : row["OrderNumber"].ToString());
3298
                                AddWithValue(cmd, "@Pipeline_OID", string.IsNullOrEmpty(row["Pipeline_OID"].ToString()) ? "" : row["Pipeline_OID"].ToString());
3299
                                AddWithValue(cmd, "@FROM_DATA", string.IsNullOrEmpty(row["FROM_DATA"].ToString()) ? "" : row["FROM_DATA"].ToString());
3300
                                AddWithValue(cmd, "@TO_DATA", string.IsNullOrEmpty(row["TO_DATA"].ToString()) ? "" : row["TO_DATA"].ToString());
3301
                                AddWithValue(cmd, "@TopologySet_OID_Key", string.IsNullOrEmpty(row["TopologySet_OID_Key"].ToString()) ? "" : row["TopologySet_OID_Key"].ToString());
3302
                                AddWithValue(cmd, "@PSNRevisionNumber", string.IsNullOrEmpty(row["PSNRevisionNumber"].ToString()) ? "" : row["PSNRevisionNumber"].ToString());
3303

    
3304
                                int IsValid = 0;
3305
                                if (row["IsValid"].ToString() == string.Empty || row["IsValid"].ToString() == "OK")
3306
                                    IsValid = 0;
3307
                                else if (row["IsValid"].ToString() == "InValid")
3308
                                    IsValid = 1;
3309
                                else if (row["IsValid"].ToString() == "Error")
3310
                                    IsValid = -1;
3311

    
3312
                                AddWithValue(cmd, "@IsValid", IsValid);
3313
                                AddWithValue(cmd, "@Status", string.IsNullOrEmpty(row["Status"].ToString()) ? "" : row["Status"].ToString());
3314

    
3315
                                AddWithValue(cmd, "@PBS", string.IsNullOrEmpty(row["PBS"].ToString()) ? "" : row["PBS"].ToString());
3316
                                AddWithValue(cmd, "@Drawings", string.IsNullOrEmpty(row["Drawings"].ToString()) ? "" : row["Drawings"].ToString());
3317

    
3318
                                AddWithValue(cmd, "@IncludingVirtualData", string.IsNullOrEmpty(row["IncludingVirtualData"].ToString()) ? "" : row["IncludingVirtualData"].ToString());
3319
                                if (string.IsNullOrEmpty(row["PSNAccuracy"].ToString()))
3320
                                    AddWithValue(cmd, "@PSNAccuracy", DBNull.Value);
3321
                                else
3322
                                    AddWithValue(cmd, "@PSNAccuracy", row["PSNAccuracy"].ToString().Replace("%", ""));
3323

    
3324
                                AddWithValue(cmd, "@Pocket", string.IsNullOrEmpty(row["Pocket"].ToString()) ? "Yes" : row["Pocket"].ToString());
3325
                                connection.ExecuteNonQuery(cmd, txn);
3326
                            }
3327

    
3328
                            //Pipeline
3329
                            query = $"DELETE FROM {PSN_PIPELINE}";
3330
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3331
                            foreach (DataRow row in item.PipeLine.Rows)
3332
                            {
3333
                                query = $"INSERT INTO {PSN_PIPELINE} (OID, PipeSystem_OID, FLUID, PMC, SEQNUMBER, INSULATION, FROM_DATA, TO_DATA, Unit) VALUES (@OID, @PipeSystem_OID, @FLUID, @PMC, @SEQNUMBER, @INSULATION, @FROM_DATA, @TO_DATA, @Unit)";
3334
                                var cmd = connection.GetSqlStringCommand(query);
3335
                                AddWithValue(cmd, "@OID", row["OID"].ToString());
3336
                                AddWithValue(cmd, "@PipeSystem_OID", row["PipeSystem_OID"].ToString());
3337
                                AddWithValue(cmd, "@FLUID", row["FLUID"].ToString());
3338
                                AddWithValue(cmd, "@PMC", row["PMC"].ToString());
3339
                                AddWithValue(cmd, "@SEQNUMBER", row["SEQNUMBER"].ToString());
3340
                                AddWithValue(cmd, "@INSULATION", row["INSULATION"].ToString());
3341
                                AddWithValue(cmd, "@FROM_DATA", row["FROM_DATA"].ToString());
3342
                                AddWithValue(cmd, "@TO_DATA", row["TO_DATA"].ToString());
3343
                                AddWithValue(cmd, "@Unit", row["Unit"].ToString());
3344
                                connection.ExecuteNonQuery(cmd, txn);
3345
                            }
3346

    
3347
                            //PipeSystem
3348
                            query = $"DELETE FROM {PSN_PIPESYSTEM}";
3349
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3350
                            foreach (DataRow row in item.PipeSystem.Rows)
3351
                            {
3352
                                query = $"INSERT INTO {PSN_PIPESYSTEM} (OID, DESCRIPTION, FLUID, PMC, PipeLineQty, GroundLevel) VALUES (@OID, @DESCRIPTION, @FLUID, @PMC, @PipeLineQty, @GroundLevel)";
3353
                                var cmd = connection.GetSqlStringCommand(query);
3354
                                AddWithValue(cmd, "@OID", row["OID"].ToString());
3355
                                AddWithValue(cmd, "@DESCRIPTION", row["DESCRIPTION"].ToString());
3356
                                AddWithValue(cmd, "@FLUID", row["FLUID"].ToString());
3357
                                AddWithValue(cmd, "@PMC", row["PMC"].ToString());
3358
                                AddWithValue(cmd, "@PipeLineQty", row["PipeLineQty"].ToString());
3359
                                AddWithValue(cmd, "@GroundLevel", row["GroundLevel"].ToString());
3360
                                connection.ExecuteNonQuery(cmd, txn);
3361
                            }
3362

    
3363
                            //Header Setting
3364
                            query = $"DELETE FROM {PSN_HEADER_SETTING}";
3365
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3366

    
3367
                            foreach (HeaderInfo headerInfo in headerInfos)
3368
                            {
3369
                                foreach (HeaderItem itemheader in headerInfo.HeaderItems)
3370
                                {
3371
                                    query = $"INSERT INTO {PSN_HEADER_SETTING} (GROUP_ID, DESCRIPTION, [INDEX], NAME) VALUES (@GROUP_ID, @DESCRIPTION, @INDEX, @NAME)";
3372
                                    var cmd = connection.GetSqlStringCommand(query);
3373
                                    AddWithValue(cmd, "@GROUP_ID", headerInfo.UID);
3374
                                    AddWithValue(cmd, "@DESCRIPTION", headerInfo.Description);
3375
                                    AddWithValue(cmd, "@INDEX", itemheader.Index);
3376
                                    AddWithValue(cmd, "@NAME", itemheader.Name);
3377
                                    connection.ExecuteNonQuery(cmd, txn);
3378
                                }
3379
                            }
3380

    
3381
                            //Vent/Drain Setting
3382
                            query = $"DELETE FROM {PSN_VENTDRAIN_SETTING}";
3383
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3384

    
3385
                            foreach (VentDrainInfo ventDrainInfo in ventDrainInfos)
3386
                            {
3387
                                foreach (VentDrainItem itemventdrain in ventDrainInfo.VentDrainItems)
3388
                                {
3389
                                    query = $"INSERT INTO {PSN_VENTDRAIN_SETTING} (GROUP_ID, DESCRIPTION, [INDEX], NAME) VALUES (@GROUP_ID, @DESCRIPTION, @INDEX, @NAME)";
3390
                                    var cmd = connection.GetSqlStringCommand(query);
3391
                                    AddWithValue(cmd, "@GROUP_ID", ventDrainInfo.UID);
3392
                                    AddWithValue(cmd, "@DESCRIPTION", ventDrainInfo.Description);
3393
                                    AddWithValue(cmd, "@INDEX", itemventdrain.Index);
3394
                                    AddWithValue(cmd, "@NAME", itemventdrain.Name);
3395
                                    connection.ExecuteNonQuery(cmd, txn);
3396
                                }
3397
                            }
3398

    
3399
                            //Keyword Setting
3400
                            query = $"DELETE FROM {PSN_TRANSFORMKEYWORD_SETTING}";
3401
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3402

    
3403
                            foreach (KeywordItem itemKeyword in keywordItems)
3404
                            {
3405
                                query = $"INSERT INTO {PSN_TRANSFORMKEYWORD_SETTING} ([INDEX], NAME, KEYWORD) VALUES (@INDEX, @NAME, @KEYWORD)";
3406
                                var cmd = connection.GetSqlStringCommand(query);
3407
                                AddWithValue(cmd, "@INDEX", itemKeyword.Index);
3408
                                AddWithValue(cmd, "@NAME", itemKeyword.Name);
3409
                                AddWithValue(cmd, "@KEYWORD", itemKeyword.Keyword);
3410
                                connection.ExecuteNonQuery(cmd, txn);
3411
                            }
3412

    
3413
                            //FulidCode
3414
                            query = $"DELETE FROM {PSN_FLUIDCODE}";
3415
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3416

    
3417
                            foreach (DataRow row in dtFluidCode.Rows)
3418
                            {
3419
                                query = $"INSERT INTO {PSN_FLUIDCODE} (UID, Code, Description, Condition, Remarks, GroundLevel) VALUES (@UID, @Code, @Description, @Condition, @Remarks, @GroundLevel)";
3420
                                var cmd = connection.GetSqlStringCommand(query);
3421
                                cmd.Parameters.Clear();
3422

    
3423
                                {
3424
                                    var param = cmd.CreateParameter();
3425
                                    param.ParameterName = "@UID";
3426
                                    param.Value = row["UID"].ToString();
3427
                                    cmd.Parameters.Add(param);
3428
                                }
3429

    
3430
                                {
3431
                                    var param = cmd.CreateParameter();
3432
                                    param.ParameterName = "@Code";
3433
                                    param.Value = row["Code"].ToString();
3434
                                    cmd.Parameters.Add(param);
3435
                                }
3436

    
3437
                                {
3438
                                    var param = cmd.CreateParameter();
3439
                                    param.ParameterName = "@Description";
3440
                                    param.Value = row["Description"].ToString();
3441
                                    cmd.Parameters.Add(param);
3442
                                }
3443

    
3444
                                {
3445
                                    var param = cmd.CreateParameter();
3446
                                    param.ParameterName = "@Condition";
3447
                                    param.Value = row["Condition"].ToString();
3448
                                    cmd.Parameters.Add(param);
3449
                                }
3450

    
3451
                                {
3452
                                    var param = cmd.CreateParameter();
3453
                                    param.ParameterName = "@Remarks";
3454
                                    param.Value = row["Remarks"].ToString();
3455
                                    cmd.Parameters.Add(param);
3456
                                }
3457

    
3458
                                {
3459
                                    var param = cmd.CreateParameter();
3460
                                    param.ParameterName = "@GroundLevel";
3461
                                    param.Value = row["GroundLevel"].ToString();
3462
                                    cmd.Parameters.Add(param);
3463
                                }
3464

    
3465
                                connection.ExecuteNonQuery(cmd, txn);
3466
                            }
3467

    
3468
                            //PMC
3469
                            query = $"DELETE FROM {PSN_PIPINGMATLCLASS}";
3470
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3471

    
3472
                            foreach (DataRow row in dtPMC.Rows)
3473
                            {
3474
                                query = $"INSERT INTO {PSN_PIPINGMATLCLASS} ( UID, Priority, Code, Description, Condition, Remarks, GroundLevel) VALUES (@UID, @Priority, @Code, @Description, @Condition, @Remarks, @GroundLevel)";
3475
                                var cmd = connection.GetSqlStringCommand(query);
3476
                                cmd.Parameters.Clear();
3477

    
3478
                                {
3479
                                    var param = cmd.CreateParameter();
3480
                                    param.ParameterName = "@UID";
3481
                                    param.Value = row["UID"].ToString();
3482
                                    cmd.Parameters.Add(param);
3483
                                }
3484

    
3485
                                {
3486
                                    var param = cmd.CreateParameter();
3487
                                    param.ParameterName = "@Priority";
3488
                                    param.Value = row["Priority"].ToString();
3489
                                    cmd.Parameters.Add(param);
3490
                                }
3491

    
3492
                                {
3493
                                    var param = cmd.CreateParameter();
3494
                                    param.ParameterName = "@Code";
3495
                                    param.Value = row["Code"].ToString();
3496
                                    cmd.Parameters.Add(param);
3497
                                }
3498

    
3499
                                {
3500
                                    var param = cmd.CreateParameter();
3501
                                    param.ParameterName = "@Description";
3502
                                    param.Value = row["Description"].ToString();
3503
                                    cmd.Parameters.Add(param);
3504
                                }
3505

    
3506
                                {
3507
                                    var param = cmd.CreateParameter();
3508
                                    param.ParameterName = "@Condition";
3509
                                    param.Value = row["Condition"].ToString();
3510
                                    cmd.Parameters.Add(param);
3511
                                }
3512

    
3513
                                {
3514
                                    var param = cmd.CreateParameter();
3515
                                    param.ParameterName = "@Remarks";
3516
                                    param.Value = row["Remarks"].ToString();
3517
                                    cmd.Parameters.Add(param);
3518
                                }
3519

    
3520
                                {
3521
                                    var param = cmd.CreateParameter();
3522
                                    param.ParameterName = "@GroundLevel";
3523
                                    param.Value = row["GroundLevel"].ToString();
3524
                                    cmd.Parameters.Add(param);
3525
                                }
3526

    
3527
                                connection.ExecuteNonQuery(cmd, txn);
3528
                            }
3529

    
3530
                            //Insulation
3531
                            query = $"DELETE FROM {PSN_INSULATIONPURPOSE}";
3532
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3533

    
3534
                            foreach (DataRow row in dtInsulation.Rows)
3535
                            {
3536
                                query = $"INSERT INTO {PSN_INSULATIONPURPOSE} (UID, Code, Description, Remarks) VALUES (@UID, @Code, @Description, @Remarks)";
3537
                                var cmd = connection.GetSqlStringCommand(query);
3538
                                cmd.Parameters.Clear();
3539

    
3540
                                {
3541
                                    var param = cmd.CreateParameter();
3542
                                    param.ParameterName = "@UID";
3543
                                    param.Value = row["UID"].ToString();
3544
                                    cmd.Parameters.Add(param);
3545
                                }
3546

    
3547
                                {
3548
                                    var param = cmd.CreateParameter();
3549
                                    param.ParameterName = "@Code";
3550
                                    param.Value = row["Code"].ToString();
3551
                                    cmd.Parameters.Add(param);
3552
                                }
3553

    
3554
                                {
3555
                                    var param = cmd.CreateParameter();
3556
                                    param.ParameterName = "@Description";
3557
                                    param.Value = row["Description"].ToString();
3558
                                    cmd.Parameters.Add(param);
3559
                                }
3560

    
3561
                                {
3562
                                    var param = cmd.CreateParameter();
3563
                                    param.ParameterName = "@Remarks";
3564
                                    param.Value = row["Remarks"].ToString();
3565
                                    cmd.Parameters.Add(param);
3566
                                }
3567

    
3568
                                connection.ExecuteNonQuery(cmd, txn);
3569
                            }
3570

    
3571
                            //Topology Rule
3572
                            query = $"DELETE FROM {PSN_TOPOLOGY_RULE}";
3573
                            var cmdtopology = connection.GetSqlStringCommand(query);
3574
                            //connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3575
                            connection.ExecuteNonQuery(cmdtopology, txn);
3576

    
3577
                            foreach (DataRow row in dtTopologyRule.Rows)
3578
                            {
3579
                                query = $"INSERT INTO {PSN_TOPOLOGY_RULE} (UID) VALUES (@UID)";
3580
                                cmdtopology = connection.GetSqlStringCommand(query);
3581
                                AddWithValue(cmdtopology, "@UID", row["UID"].ToString());
3582
                                connection.ExecuteNonQuery(cmdtopology, txn);
3583
                            }
3584

    
3585
                            //valve grouping
3586
                            query = $"DELETE FROM {PSN_VALVEGROUP_SETTING}";
3587
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3588

    
3589
                            foreach (DataRow row in dtvalvegrouping.Rows)
3590
                            {
3591
                                query = $"INSERT INTO {PSN_VALVEGROUP_SETTING} (OID, GroupType, TagIdentifier, AttributeName, SppidSymbolName) " +
3592
                                    $"VALUES (@OID, @GroupType, @TagIdentifier, @AttributeName, @SppidSymbolName)";
3593
                                var cmd = connection.GetSqlStringCommand(query);
3594
                                AddWithValue(cmd, "@OID", row["OID"].ToString());
3595
                                AddWithValue(cmd, "@GroupType", row["GroupType"].ToString());
3596
                                AddWithValue(cmd, "@TagIdentifier", row["TagIdentifier"].ToString());
3597
                                AddWithValue(cmd, "@AttributeName", row["AttributeName"].ToString());
3598
                                AddWithValue(cmd, "@SppidSymbolName", row["SppidSymbolName"].ToString());
3599
                                connection.ExecuteNonQuery(cmd, txn);
3600
                            }
3601

    
3602
                            //no pocket Setting
3603
                            query = $"DELETE FROM {PSN_NOPOCKETSETTING}";
3604
                            connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3605

    
3606
                            foreach (DataRow row in dtnopocket.Rows)
3607
                            {
3608
                                query = $"INSERT INTO {PSN_NOPOCKETSETTING} ([INDEX], [TYPE], [NAME]) VALUES (@INDEX, @TYPE, @NAME)";
3609
                                var cmd = connection.GetSqlStringCommand(query);
3610
                                AddWithValue(cmd, "@INDEX", row["INDEX"].ToString());
3611
                                AddWithValue(cmd, "@TYPE", row["TYPE"].ToString());
3612
                                AddWithValue(cmd, "@NAME", row["NAME"].ToString());
3613
                                connection.ExecuteNonQuery(cmd, txn);
3614
                            }
3615

    
3616
                            txn.Commit();
3617
                        }
3618
                        catch (Exception ex)
3619
                        {
3620
                            txn.Rollback();
3621
                            result = false;
3622
                        }
3623
                    }
3624
                }
3625
                catch (Exception ex)
3626
                {
3627
                    System.Windows.Forms.MessageBox.Show(ex.Message);
3628
                    result = false;
3629
                }
3630
            }
3631

    
3632
            return result;
3633
        }
3634

    
3635
        public static bool CreatePSN_COMMON()
3636
        {
3637
            AnotherID2Info id2Info = AnotherID2Info.GetInstance();
3638

    
3639
            bool result = true;
3640
            using (IAbstractDatabase connection = id2Info.CreateConnection())
3641
            {
3642
                try
3643
                {
3644
                    using (var txn = connection.BeginTransaction())
3645
                    {
3646
                        try
3647
                        {
3648
                            
3649
                            var query = $"If(db_id(N'" + PSN_COMMON + "') IS NULL) CREATE DATABASE [" + PSN_COMMON + "]";
3650
                            if (id2Info.ID2DBType == AnotherID2DB_Type.MSSQL)
3651
                            {                                
3652
                                connection.ExecuteNonQuery(connection.GetSqlStringCommand(query), txn);
3653
                            }
3654

    
3655
                            txn.Commit();
3656
                        }
3657
                        catch (Exception ex)
3658
                        {
3659
                            txn.Rollback();
3660
                            result = false;
3661
                        }
3662
                    }
3663
                }
3664
                catch (Exception ex)
3665
                {
3666
                    System.Windows.Forms.MessageBox.Show(ex.Message);
3667
                    result = false;
3668
                }
3669
            }
3670

    
3671
            return result;
3672
        }
3673
    }
3674
}
3675

    
3676

    
클립보드 이미지 추가 (최대 크기: 500 MB)