@@ -196,7 +196,7 @@ public string CreateConnectionString()
196196 }
197197
198198 case eDBTypes . DB2 :
199-
199+
200200 Database . ConnectionString = $ "Server={ TNSCalculated } ;Database={ Database . Name } ;UID={{USER}};PWD={{PASS}}";
201201 //Database.ConnectionString = $"Server={TNSCalculated};Database={Database.Name};UID={{USER}};PWD={{PASS}}";
202202 break ;
@@ -272,16 +272,17 @@ public string CreateConnectionString()
272272 //}
273273
274274 case eDBTypes . MSSQL :
275+ var builder = new SqlConnectionStringBuilder
275276 {
276- var builder = new SqlConnectionStringBuilder ( ) ;
277- builder . DataSource = TNSCalculated ;
278- if ( ! string . IsNullOrEmpty ( Database . Name ) ) builder . InitialCatalog = Database . Name ;
279- builder . IntegratedSecurity = false ;
280- builder . UserID = "{USER}" ;
281- builder . Password = "{PASS}" ;
282- Database . ConnectionString = builder . ConnectionString ;
283- break ;
284- }
277+ DataSource = TNSCalculated
278+ } ;
279+
280+ if ( ! string . IsNullOrEmpty ( Database . Name ) ) builder . InitialCatalog = Database . Name ;
281+ builder . IntegratedSecurity = false ;
282+ builder . UserID = UserCalculated ;
283+ builder . Password = EncryptionHandler . DecryptwithKey ( PassCalculated ) ;
284+ Database . ConnectionString = builder . ConnectionString ;
285+ break ;
285286
286287 default :
287288 throw new NotImplementedException ( "Unhandled database type: " + Database . DBType ) ;
@@ -344,22 +345,13 @@ public Boolean Connect(bool displayErrorPopup = false)
344345 switch ( Database . DBType )
345346 {
346347 case eDBTypes . MSSQL :
347- var builder = new SqlConnectionStringBuilder ( ) ;
348- builder . DataSource = TNSCalculated ;
349- if ( ! string . IsNullOrEmpty ( Database . Name ) ) builder . InitialCatalog = Database . Name ;
350- builder . IntegratedSecurity = false ;
351- builder . UserID = "{USER}" ;
352- builder . Password = "{PASS}" ;
353- Database . ConnectionString = builder . ConnectionString ;
354- var sqlConnectionStringBuilder = new SqlConnectionStringBuilder
355- {
356- ConnectionString = GetConnectionString ( )
357- } ;
348+ // If a full connection string is provided use it (after resolving placeholders and decrypting password),
349+ // otherwise build from TNS/User/Pass as before.
350+ string connectionString = string . Empty ;
351+ var mailBuilder = GetMSSQLConnectionStringBuilder ( ) ;
352+
353+ oConn = new SqlConnection ( mailBuilder . ConnectionString ) ;
358354
359- oConn = new SqlConnection
360- {
361- ConnectionString = sqlConnectionStringBuilder . ConnectionString
362- } ;
363355 oConn . Open ( ) ;
364356 break ;
365357
@@ -437,18 +429,13 @@ public Boolean Connect(bool displayErrorPopup = false)
437429 {
438430 Host = postgreSQLHost ,
439431 Database = Database . Name ?? string . Empty ,
440- Username = "{USER}" ,
441- Password = "{PASS}"
432+ Username = UserCalculated ,
433+ Password = EncryptionHandler . DecryptwithKey ( PassCalculated )
442434 } ;
443435 if ( port . HasValue ) pg . Port = port . Value ;
444436 Database . ConnectionString = pg . ConnectionString ;
445437
446- var npgsqlconnectionStringBuilder = new Npgsql . NpgsqlConnectionStringBuilder
447- {
448- ConnectionString = GetConnectionString ( )
449- } ;
450-
451- oConn = new NpgsqlConnection ( npgsqlconnectionStringBuilder . ConnectionString ) ;
438+ oConn = new NpgsqlConnection ( pg . ConnectionString ) ;
452439 oConn . Open ( ) ;
453440 break ;
454441
@@ -465,7 +452,7 @@ public Boolean Connect(bool displayErrorPopup = false)
465452 {
466453 return false ;
467454 }
468-
455+
469456 case eDBTypes . Couchbase :
470457 GingerCouchbase CouchbaseDriver = new GingerCouchbase ( Database ) ;
471458 bool isConnectionCB ;
@@ -496,20 +483,15 @@ public Boolean Connect(bool displayErrorPopup = false)
496483 {
497484 Server = mySQLHost ,
498485 Database = Database . Name ?? string . Empty ,
499- UserID = "{USER}" ,
500- Password = "{PASS}"
486+ UserID = UserCalculated ,
487+ Password = EncryptionHandler . DecryptwithKey ( PassCalculated )
501488 } ;
502489 if ( port1 . HasValue ) my . Port = port1 . Value ;
503490 Database . ConnectionString = my . ConnectionString ;
504491
505- var mySqlconnectionStringBuilder = new MySqlConnectionStringBuilder
506- {
507- ConnectionString = GetConnectionString ( )
508- } ;
509-
510492 oConn = new MySqlConnection
511493 {
512- ConnectionString = mySqlconnectionStringBuilder . ConnectionString
494+ ConnectionString = my . ConnectionString
513495 } ;
514496 oConn . Open ( ) ;
515497 break ;
@@ -526,8 +508,8 @@ public Boolean Connect(bool displayErrorPopup = false)
526508 {
527509 return false ;
528510 }
529-
530- case eDBTypes . CosmosDb :
511+
512+ case eDBTypes . CosmosDb :
531513 Database . ConnectionString = GetConnectionString ( ) ;
532514 GingerCosmos objGingerCosmos = new GingerCosmos
533515 {
@@ -584,6 +566,32 @@ public Boolean Connect(bool displayErrorPopup = false)
584566
585567 return false ;
586568 }
569+
570+ private SqlConnectionStringBuilder GetMSSQLConnectionStringBuilder ( )
571+ {
572+ //if (string.IsNullOrEmpty(Database.ConnectionString))
573+ {
574+ var builder = new SqlConnectionStringBuilder ( ) ;
575+ builder . DataSource = TNSCalculated ;
576+ if ( ! string . IsNullOrEmpty ( Database . Name ) ) builder . InitialCatalog = Database . Name ;
577+ builder . IntegratedSecurity = false ;
578+ builder . UserID = UserCalculated ;
579+ builder . Password = EncryptionHandler . DecryptwithKey ( PassCalculated ) ;
580+ return builder ;
581+ }
582+ //else
583+ //{
584+ // // GetConnectionString will replace {USER} and {PASS} placeholders and decrypt the password
585+ // string connStr = ConnectionStringCalculated;
586+ // connStr = connStr.Replace("{USER}", UserCalculated);
587+ // connStr = ReplacePasswordInConnectionString(connStr);
588+
589+ // // Parse and normalise the connection string using SqlConnectionStringBuilder
590+ // var parsedBuilder = new SqlConnectionStringBuilder(connStr);
591+ // return parsedBuilder;
592+ //}
593+ }
594+
587595 public static string HidePasswordFromString ( string dataString )
588596 {
589597 string passwordValue = dataString . Replace ( " " , "" ) ; //remove spaces
0 commit comments