public string BuildConnectionString(string dbType, string dsnName, string auth_type, string server, string port, string database, string loginName, string loginpassword, string userDefinedDriverName, UseDriver useDriverType) { string ret = string.Empty; this.Server = server; if (dsnName != string.Empty) { // I wish to connect through named DSN, ODBC only useDriverType = UseDriver.ODBC; } if (useDriverType == UseDriver.DEFAULT || useDriverType == UseDriver.ORACLE) { // built in native support for oracle and teradata if (dbType == "oracle") { if (string.IsNullOrEmpty(port)) { port = "1521"; } this.MyDriver = DBExecutor.UseDriver.ORACLE; this.ConnectString = String.Format("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={4})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={3})));User Id = {1}; Password = {2}; ", server, loginName, loginpassword, database, port); return(this.ConnectString); } } if (useDriverType == UseDriver.DEFAULT || useDriverType == UseDriver.TERADATA) { // teradata - we have own driver if (dbType == "teradata") { this.MyDriver = DBExecutor.UseDriver.TERADATA; TdConnectionStringBuilder builder = new TdConnectionStringBuilder(); builder.SessionCharacterSet = "UTF8"; builder.DataSource = server; builder.UserId = loginName; builder.Password = loginpassword; this.ConnectString = builder.ToString(); return(this.ConnectString); } } // the only solution is find an ODBC driver if (string.IsNullOrEmpty(dsnName)) { // I wish to go through driver string driverName = string.Empty; if (userDefinedDriverName == string.Empty) { List <string> drivers = ODBCUtils.GetSystemDriverList(); switch (dbType) { case "oracle": driverName = drivers.Where(x => x.IndexOf("Oracle") >= 0).FirstOrDefault(); break; case "mssql": default: driverName = drivers.Where(x => x.IndexOf("SQL Server") >= 0).FirstOrDefault(); break; } } else { driverName = userDefinedDriverName; } if (string.IsNullOrEmpty(driverName)) { throw new Exception("No ODBC driver found, please install and try again"); } else { ret += "Driver={" + driverName + "};"; } if (string.IsNullOrEmpty(port)) { ret += "Server=" + server + ";"; } else { ret += "Server=" + server + ":" + port + ";"; } if (!string.IsNullOrEmpty(database)) { ret += "Database=" + database + ";"; } } else { // I wish to go through named DSN ret = "DSN=" + dsnName + ";"; } // add properties both for DSN or driver switch (auth_type) { case "win_auth": ret += "Authentication=Windows Authentication;"; break; case "sql_auth": ret += "UID=" + loginName + ";"; ret += "PWD=" + loginpassword + ";"; break; case "dsn_auth": default: break; } this.MyDriver = DBExecutor.UseDriver.ODBC; this.ConnectString = ret; return(ret); }
public string BuildConnectionString(Arguments args, UseDriver useDriverType) { Logger.Log("Creating connection string for " + args.dbType); string ret = string.Empty; this.Server = args.server; if (args.dsnName != string.Empty) { // I wish to connect through named DSN, ODBC only useDriverType = UseDriver.ODBC; } if (useDriverType == UseDriver.DEFAULT || useDriverType == UseDriver.ORACLE) { // built in native support for oracle and teradata if (args.dbType == "oracle") { if (string.IsNullOrEmpty(args.port)) { args.port = "1521"; } this.MyDriver = DBExecutor.UseDriver.ORACLE; this.ConnectString = String.Format("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={4})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={3})));User Id = {1}; Password = {2}; ", args.server, args.loginName, args.loginpassword, args.database, args.port); return(this.ConnectString); } } if (useDriverType == UseDriver.DEFAULT || useDriverType == UseDriver.TERADATA) { // teradata - we have own driver if (args.dbType == "teradata") { this.MyDriver = DBExecutor.UseDriver.TERADATA; TdConnectionStringBuilder builder = new TdConnectionStringBuilder(); builder.SessionCharacterSet = "UTF8"; builder.DataSource = args.server; builder.UserId = args.loginName; builder.Password = args.loginpassword; this.ConnectString = builder.ToString(); return(this.ConnectString); } } if (useDriverType == UseDriver.DEFAULT || useDriverType == UseDriver.POSTGRESQL) { // greenplum, redhift - we have own driver if (args.dbType == "greenplum" || args.dbType == "redshift" || args.dbType == "postgres") { this.MyDriver = DBExecutor.UseDriver.POSTGRESQL; NpgsqlConnectionStringBuilder builder = new NpgsqlConnectionStringBuilder(); builder.Host = args.server; builder.Encoding = "UTF8"; if (!string.IsNullOrEmpty(args.database)) { builder.Database = args.database; } if (!string.IsNullOrEmpty(args.port)) { if (int.TryParse(args.port, out int portNum) == false) { throw new ArgumentException("Could not parse port number"); } else { builder.Port = portNum; } } switch (args.auth_type) { case "win_auth": builder.IntegratedSecurity = true; builder.Username = args.loginName; Logger.Log("Using Integrated Security: username may be required."); Logger.Log("Connection string: " + builder.ToString()); break; case "sql_auth": // logging builder.Username = "******"; builder.Password = "******"; Logger.Log("Using passw"); Logger.Log("Connection string: " + builder.ToString()); builder.Password = args.loginpassword; builder.Username = args.loginName; break; case "dsn_auth": default: break; } this.ConnectString = builder.ToString(); return(this.ConnectString); } } if (useDriverType == UseDriver.DEFAULT || useDriverType == UseDriver.SNOWFLAKE) { // snowflake - we have own driver if (args.dbType == "snowflake") { this.MyDriver = DBExecutor.UseDriver.SNOWFLAKE; if (String.IsNullOrEmpty(args.loginName) || String.IsNullOrEmpty(args.loginpassword) || String.IsNullOrEmpty(args.account)) { throw new ArgumentException("Login, password and client has to be filled in!"); } ConnectString = String.Format("account={0};user={1};password={2}", args.account, args.loginName, args.loginpassword); ConnectString += !String.IsNullOrEmpty(args.database) ? String.Format(";db={0}", args.database) : ""; ConnectString += !String.IsNullOrEmpty(args.server) ? String.Format(";host={0}", args.server) : ""; ConnectString += !String.IsNullOrEmpty(args.role) ? String.Format(";role={0}", args.role) : ""; ConnectString += !String.IsNullOrEmpty(args.warehouse) ? String.Format(";warehouse={0}", args.warehouse) : ""; Regex rgx = new Regex("password=[^;]*"); Logger.Log(String.Format("Connection string: {0}", rgx.Replace(ConnectString, "password=*****"))); return(this.ConnectString); } } // the only solution is find an ODBC driver if (string.IsNullOrEmpty(args.dsnName)) { // I wish to go through driver string driverName = string.Empty; if (args.driverName == string.Empty) { List <string> drivers = ODBCUtils.GetSystemDriverList(); switch (args.dbType) { case "oracle": driverName = drivers.Where(x => x.IndexOf("Oracle") >= 0).FirstOrDefault(); break; case "mssql": default: driverName = drivers.Where(x => x.IndexOf("SQL Server") >= 0).FirstOrDefault(); break; } } else { driverName = args.driverName; } if (string.IsNullOrEmpty(driverName)) { throw new Exception("No ODBC driver found, please install and try again"); } else { ret += "Driver={" + driverName + "};"; } if (string.IsNullOrEmpty(args.port)) { ret += "Server=" + args.server + ";"; } else { ret += "Server=" + args.server + "," + args.port + ";"; } if (!string.IsNullOrEmpty(args.database)) { ret += "Database=" + args.database + ";"; } } else { // I wish to go through named DSN ret = "DSN=" + args.dsnName + ";"; } // add properties both for DSN or driver switch (args.auth_type) { case "win_auth": ret += "Authentication=Windows Authentication;"; break; case "sql_auth": ret += "UID=" + args.loginName + ";"; ret += "PWD=" + args.loginpassword + ";"; break; case "dsn_auth": default: break; } this.MyDriver = DBExecutor.UseDriver.ODBC; this.ConnectString = ret; return(ret); }