Консольное приложение не пишет для отладки.writeline и не заполняющие свойства в моем классе
У меня есть библиотека методов и методов расширения, которые я добавляю в проекты в течение последних 10 месяцев, так как я действительно изучаю C#, написав его. Но на этот раз я добавил его в проект консольного приложения.
Последние два дня я борюсь с исследованием того, почему либо (1) отлаживается.WriteLine не выводит ни одного из моих отчетов об ошибках и отладочного кода на экран вывода, когда все, что я читаю, говорит, что это должно быть или (2) мой код не выполняется в моем внешнем классе, и поэтому Отладочному коду нечего писать.
Не получая ничего от своих часов или от регистрации ошибок на выходном экране, я лечу вслепую.
Я не знаю, отличаются ли консольные приложения от, скажем, windows forms или это одна из новых конструкций, которые я пытаюсь использовать в C#, но я читал и перечитывал разделы о классах в моей книге C# 7 в двух словах и, наверное, был ошеломлен.
Может ли кто-нибудь предложить мне что-нибудь почитать или исследовать?
Я не знаю, какой код опубликовать, потому что я не знаю, что имеет отношение к этому, но вот какой-то код, который определенно не работает так, как ожидалось:
Примечание: Я уверен, что мой код ужасный для большинства из вас! Любые предложения приветствуются.
Это часть класса, который устанавливает мое соединение с базой данных OleDb:
public class RBDataOleDb { private string nl = Environment.NewLine; public string DbPassword { get; } public string DbUser { get; } public string DbType { get; } public string DbServer { get; } public string DbName { get; } public string DbDataSource { get; } public string DbPath { get; } /// <summary> /// Connect to SQLServer or Oracle with windows auth /// NOTE: Add User and Password via overloaded constructors below /// </summary> /// <param name="dbserver">Server EX: @"(localdb)\MSSQLLocalDB"</param> /// <param name="dbname">Database name</param> public RBDataOleDb ( string server , string database) { DbType = "MDF"; DbServer = server; DbName = database; DbDataSource = database; } /// <summary> /// Connect to SQLServer or Oracle with password /// NOTE: Add User and Password seperately /// </summary> /// <param name="dbserver">Server name in @"(localdb)\MSSQLLocalDB" format or null</param> /// <param name="dbname">Database name</param> public RBDataOleDb ( string server , string database, string username, string password ) { DbType = "MDF"; DbServer = server; DbName = database; DbUser = username; DbPassword = password; DbDataSource = database; } /// <summary> /// Use this for connections to files, such as MS ACCESS, EXCEL, etc. /// </summary> /// <param name="file_path">Path to Database</param> public RBDataOleDb ( string file_path ) { DbType = System.IO.Path.GetExtension ( file_path ).Replace ( "." , "" ).ToUpper ( ); DbPath = file_path; DbDataSource = file_path; } /// <summary> /// Use this for connections to files, such as MS ACCESS, EXCEL, etc. /// </summary> /// <param name="file_path">Path to Database</param> public RBDataOleDb ( string file_path, string username, string password) { DbType = System.IO.Path.GetExtension( file_path ).Replace(".","").ToUpper ( ); DbPath = file_path; DbUser = username; DbPassword = password; DbDataSource = file_path; } public string GetProvider ( ) { string result = ""; switch ( DbType ) { case "MDF": result = "SQLNCLI11"; break; case "MDB": case "ACCDB": case "XLSX": case "XLS": case "DBF": result = "Microsoft.ACE.OLEDB.12.0"; break; default: result = "!!UNABLE TO DETERMINE PROVIDER!!"; throw new ArgumentException ( $"DbType has a value of {DbType}, which is not valid. RBDataOleDb clould not determine what database provider to use when connecting to database" ); } return result; } /// <summary> /// NOTE: Provider: "Microsoft.ACE.OLEDB.12.0" is the 2010 Office System Driver, which has both 32 bit and 64 bit versions that let your app connect /// to Access, Excel and Text file in a 64bit environment. /// </summary> /// <returns></returns> public string GetConnString ( ) { string conn = ""; if ( DbServer != null ) { conn = $"Provider=SQLNCLI11;Data Source={DbServer};Initial Catalog=[{DbName}];"; if ( !string.IsNullOrEmpty ( DbPassword ) ) conn += $"User ID={DbUser};Password={DbPassword};"; else conn += $"Integrated Security=SSPI;"; } else if ( DbType == "MDB" || DbType == "ACCDB" ) { conn = $"Provider=Microsoft.ACE.OLEDB.12.0;data source=[{DbPath}];"; if ( !string.IsNullOrEmpty ( DbPassword ) ) conn += $"Jet OLEDB:Database Password={DbPassword};"; } else if ( DbType == "MDB" ) { conn = $@"Provider=Microsoft.Jet.OLEDB.4.0;data source=""{DbPath}"";"; if ( !string.IsNullOrEmpty ( DbPassword ) ) conn += $"User Id={DbUser};Jet OLEDB:Database Password={DbPassword};"; } else if ( DbType == "XLSX" ) { conn = $@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[{DbPath}];Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; } else if ( DbType == "XLS" ) { conn = $@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[{DbPath}];Extended Properties='Excel 8.0;HDR=YES'"; } else { conn = "* * * NO DbType WAS SET SO RBDataOleDb.getConnString() UNABLE TO CREATE CONNECTION STRING * * *"; } return conn; } }
Вот как я создаю экземпляры и возвращаю значения из некоторых его свойств и методов:
RBDataOleDb ole = new RBDataOleDb ( Globals.dbpath ); string provider = ole.GetProvider(); string ds = ole.DbDataSource; string constring = ole.GetConnString(); Globals.Log ( ds ); Globals.Log ( provider ); Globals.Log ( constring );
Это мои глобалы.Метод журнала, который был отредактирован для записи в консоль.
public static void Log ( string message ) { string output = Environment.NewLine + message + Environment.NewLine; Console.WriteLine ( output ); }
Что я уже пробовал:
Я переписал некоторые из моих отладочных журналов в своем локальном проекте, чтобы я мог писать в консоль вместо отладки, но я не могу сделать это из классов в моей библиотеке, иначе это повлияет на другие мои проекты, которые его используют.
Что касается получения значений обратно из моего класса, я пробовал использовать методы, различные способы использования геттеров и сеттеров и несколько раз менял модификаторы доступа. То, что вы видите, если результат этих итеративных усилий.