diff --git a/PRS/Commands/CommandHelper.cs b/PRS/Commands/CommandHelper.cs index 4212127..526d8df 100644 --- a/PRS/Commands/CommandHelper.cs +++ b/PRS/Commands/CommandHelper.cs @@ -18,7 +18,7 @@ public static async Task GetConnectionStringAsync(IDisplay display, IFil } IFileReader reader = fileProvider.GetFileReader(Global.ConnectionStringFilePath); - string output = await reader.ReadLineAsync().ConfigureAwait(false); + string output = await reader.ReadLineAsync(); reader.Dispose(); return output; diff --git a/PRS/Commands/DumpDatabaseSchemaCommand.cs b/PRS/Commands/DumpDatabaseSchemaCommand.cs index 3fef881..cbcb1b5 100644 --- a/PRS/Commands/DumpDatabaseSchemaCommand.cs +++ b/PRS/Commands/DumpDatabaseSchemaCommand.cs @@ -36,7 +36,7 @@ public async Task RunAsync(string[] args) } // run database tool to get data - string connectionString = await CommandHelper.GetConnectionStringAsync(_display, _fileProvider).ConfigureAwait(false); + string connectionString = await CommandHelper.GetConnectionStringAsync(_display, _fileProvider); if (connectionString == null) { @@ -44,17 +44,19 @@ public async Task RunAsync(string[] args) return; } - IEnumerable tables = await _database.GetTableModelsAsync(connectionString).ConfigureAwait(false); - IEnumerable columns = await _database.GetColumnModelsAsync(connectionString).ConfigureAwait(false); - IEnumerable sps = await _database.GetStoredProcedureNamesAsync(connectionString).ConfigureAwait(false); + _display.ShowInfo("Starting to dump schema..."); + + IEnumerable tables = await _database.GetTableModelsAsync(connectionString); + IEnumerable columns = await _database.GetColumnModelsAsync(connectionString); + IEnumerable sps = await _database.GetStoredProcedureNamesAsync(connectionString); // insert connection string and all data to file IFileWriter writer = _fileProvider.GetFileWriter(Path.Combine(Global.SchemaFileDirectory, Global.SchemaFileName)); - await WriteConnectionStringAsync(writer, connectionString).ConfigureAwait(false); - await WriteTablesAsync(writer, tables).ConfigureAwait(false); - await WriteColumnsAsync(writer, columns).ConfigureAwait(false); - await WriteStoredProceduresAsync(writer, sps).ConfigureAwait(false); + await WriteConnectionStringAsync(writer, connectionString); + await WriteTablesAsync(writer, tables); + await WriteColumnsAsync(writer, columns); + await WriteStoredProceduresAsync(writer, sps); writer.Dispose(); @@ -63,39 +65,39 @@ public async Task RunAsync(string[] args) private async Task WriteConnectionStringAsync(IFileWriter writer, string connectionString) { - await writer.WriteLineAsync(Global.ConnectionStringSectionName).ConfigureAwait(false); - await writer.WriteLineAsync(connectionString).ConfigureAwait(false); + await writer.WriteLineAsync(Global.ConnectionStringSectionName); + await writer.WriteLineAsync(connectionString); } private async Task WriteTablesAsync(IFileWriter writer, IEnumerable tables) { - await writer.WriteLineAsync(Global.TableSectionName).ConfigureAwait(false); + await writer.WriteLineAsync(Global.TableSectionName); foreach (TableModel m in tables) { string s = $"{m.TableSchema},{m.TableName},{m.TableType}"; - await writer.WriteLineAsync(s).ConfigureAwait(false); + await writer.WriteLineAsync(s); } } private async Task WriteColumnsAsync(IFileWriter writer, IEnumerable columns) { - await writer.WriteLineAsync(Global.ColumnSectionName).ConfigureAwait(false); + await writer.WriteLineAsync(Global.ColumnSectionName); foreach (ColumnModel m in columns) { string s = $"{m.TableSchema},{m.TableName},{m.ColumnName},{m.OrdinalPosition},{m.ColumnDefault},{m.IsNullable},{m.DataType},{m.CharacterMaximumLength}"; - await writer.WriteLineAsync(s).ConfigureAwait(false); + await writer.WriteLineAsync(s); } } private async Task WriteStoredProceduresAsync(IFileWriter writer, IEnumerable sps) { - await writer.WriteLineAsync(Global.StoredProcedureSectionName).ConfigureAwait(false); + await writer.WriteLineAsync(Global.StoredProcedureSectionName); foreach (string m in sps) { - await writer.WriteLineAsync(m).ConfigureAwait(false); + await writer.WriteLineAsync(m); } } } diff --git a/PRS/Commands/FindColumnCommand.cs b/PRS/Commands/FindColumnCommand.cs index ef4d478..a4a3bfe 100644 --- a/PRS/Commands/FindColumnCommand.cs +++ b/PRS/Commands/FindColumnCommand.cs @@ -42,7 +42,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -68,7 +68,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -86,15 +86,17 @@ public async Task RunAsync(string[] args) if (splits[2]?.IndexOf(args[1], StringComparison.OrdinalIgnoreCase) >= 0) { - ColumnModel m = new(); - m.TableSchema = splits[0]; - m.TableName = splits[1]; - m.ColumnName = splits[2]; - m.OrdinalPosition = splits[3]; - m.ColumnDefault = splits[4]; - m.IsNullable = splits[5]; - m.DataType = splits[6]; - m.CharacterMaximumLength = splits[7]; + ColumnModel m = new() + { + TableSchema = splits[0], + TableName = splits[1], + ColumnName = splits[2], + OrdinalPosition = splits[3], + ColumnDefault = splits[4], + IsNullable = splits[5], + DataType = splits[6], + CharacterMaximumLength = splits[7] + }; models.Add(m); } } diff --git a/PRS/Commands/FindStoredProcedureCommand.cs b/PRS/Commands/FindStoredProcedureCommand.cs index 4ff874c..71ef974 100644 --- a/PRS/Commands/FindStoredProcedureCommand.cs +++ b/PRS/Commands/FindStoredProcedureCommand.cs @@ -41,7 +41,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -67,7 +67,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { diff --git a/PRS/Commands/FindTableColumnCommand.cs b/PRS/Commands/FindTableColumnCommand.cs index 8b2db78..03c0372 100644 --- a/PRS/Commands/FindTableColumnCommand.cs +++ b/PRS/Commands/FindTableColumnCommand.cs @@ -42,7 +42,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -68,7 +68,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -87,15 +87,17 @@ public async Task RunAsync(string[] args) if (splits[1]?.IndexOf(args[1], StringComparison.OrdinalIgnoreCase) >= 0 && splits[2]?.IndexOf(args[2], StringComparison.OrdinalIgnoreCase) >= 0) { - ColumnModel m = new(); - m.TableSchema = splits[0]; - m.TableName = splits[1]; - m.ColumnName = splits[2]; - m.OrdinalPosition = splits[3]; - m.ColumnDefault = splits[4]; - m.IsNullable = splits[5]; - m.DataType = splits[6]; - m.CharacterMaximumLength = splits[7]; + ColumnModel m = new() + { + TableSchema = splits[0], + TableName = splits[1], + ColumnName = splits[2], + OrdinalPosition = splits[3], + ColumnDefault = splits[4], + IsNullable = splits[5], + DataType = splits[6], + CharacterMaximumLength = splits[7] + }; models.Add(m); } } diff --git a/PRS/Commands/FindTableCommand.cs b/PRS/Commands/FindTableCommand.cs index 0b41255..bfaa3d6 100644 --- a/PRS/Commands/FindTableCommand.cs +++ b/PRS/Commands/FindTableCommand.cs @@ -42,7 +42,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -68,7 +68,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -86,10 +86,12 @@ public async Task RunAsync(string[] args) if (splits[1]?.IndexOf(args[1], StringComparison.OrdinalIgnoreCase) >= 0) { - TableModel m = new(); - m.TableSchema = splits[0]; - m.TableName = splits[1]; - m.TableType = splits[2]; + TableModel m = new() + { + TableSchema = splits[0], + TableName = splits[1], + TableType = splits[2] + }; models.Add(m); } } diff --git a/PRS/Commands/ShowAllColumnsCommand.cs b/PRS/Commands/ShowAllColumnsCommand.cs index a54b5e0..5d011b6 100644 --- a/PRS/Commands/ShowAllColumnsCommand.cs +++ b/PRS/Commands/ShowAllColumnsCommand.cs @@ -42,7 +42,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -68,7 +68,7 @@ public async Task RunAsync(string[] args) while (true) { - string line = await reader.ReadLineAsync().ConfigureAwait(false); + string line = await reader.ReadLineAsync(); if (line == null) { @@ -86,15 +86,17 @@ public async Task RunAsync(string[] args) if (string.Equals(splits[1], args[1], StringComparison.OrdinalIgnoreCase)) { - ColumnModel m = new(); - m.TableSchema = splits[0]; - m.TableName = splits[1]; - m.ColumnName = splits[2]; - m.OrdinalPosition = splits[3]; - m.ColumnDefault = splits[4]; - m.IsNullable = splits[5]; - m.DataType = splits[6]; - m.CharacterMaximumLength = splits[7]; + ColumnModel m = new() + { + TableSchema = splits[0], + TableName = splits[1], + ColumnName = splits[2], + OrdinalPosition = splits[3], + ColumnDefault = splits[4], + IsNullable = splits[5], + DataType = splits[6], + CharacterMaximumLength = splits[7] + }; models.Add(m); } } diff --git a/PRS/Commands/ShowConnectionStringCommand.cs b/PRS/Commands/ShowConnectionStringCommand.cs index 0a5ceaa..52c3c6d 100644 --- a/PRS/Commands/ShowConnectionStringCommand.cs +++ b/PRS/Commands/ShowConnectionStringCommand.cs @@ -18,7 +18,7 @@ public ShowConnectionStringCommand(IDisplay display, IFileProvider fileProvider) public async Task RunAsync(string[] args) { // verify schema file exists. if not, show no schema file error and ask to run dump command. - string output = await CommandHelper.GetConnectionStringAsync(_display, _fileProvider).ConfigureAwait(false); + string output = await CommandHelper.GetConnectionStringAsync(_display, _fileProvider); if (output == null) { diff --git a/PRS/Commands/WriteConnectionStringCommand.cs b/PRS/Commands/WriteConnectionStringCommand.cs index 9ef51fb..f30b840 100644 --- a/PRS/Commands/WriteConnectionStringCommand.cs +++ b/PRS/Commands/WriteConnectionStringCommand.cs @@ -41,7 +41,7 @@ public async Task RunAsync(string[] args) } IFileWriter writer = _fileProvider.GetFileWriter(Global.ConnectionStringFilePath); - await writer.WriteLineAsync(cs).ConfigureAwait(false); + await writer.WriteLineAsync(cs); writer.Dispose(); _display.ShowInfo("Connection string has been set."); diff --git a/PRS/Database/PrsDatabase.cs b/PRS/Database/PrsDatabase.cs index 71672ee..0743cd7 100644 --- a/PRS/Database/PrsDatabase.cs +++ b/PRS/Database/PrsDatabase.cs @@ -7,26 +7,36 @@ namespace PRS.Database; internal class PrsDatabase : IDatabase { - //private readonly string _connectionString; - public PrsDatabase() { - // _connectionString = connectionString; } public async Task> GetColumnModelsAsync(string connectionString) { using SqlConnection connection = new(); connection.ConnectionString = connectionString; - await connection.OpenAsync().ConfigureAwait(false); + await connection.OpenAsync(); using SqlCommand command = connection.CreateCommand(); - command.CommandText = "SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME"; + command.CommandText = """ + SELECT TABLE_SCHEMA, + TABLE_NAME, + COLUMN_NAME, + ORDINAL_POSITION, + COLUMN_DEFAULT, + IS_NULLABLE, + DATA_TYPE, + CHARACTER_MAXIMUM_LENGTH + FROM INFORMATION_SCHEMA.COLUMNS + ORDER BY TABLE_SCHEMA, + TABLE_NAME, + COLUMN_NAME + """; command.CommandType = CommandType.Text; - using SqlDataReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false); + using SqlDataReader reader = await command.ExecuteReaderAsync(); List columns = new(); - while (await reader.ReadAsync().ConfigureAwait(false)) + while (await reader.ReadAsync()) { ColumnModel m = new(); m.TableSchema = reader[0].ToString(); @@ -50,15 +60,15 @@ public async Task> GetStoredProcedureNamesAsync(string conne { using SqlConnection connection = new(); connection.ConnectionString = connectionString; - await connection.OpenAsync().ConfigureAwait(false); + await connection.OpenAsync(); using SqlCommand command = connection.CreateCommand(); command.CommandText = "SELECT Name FROM SYSOBJECTS WHERE type = 'P' AND category = 0 ORDER BY name"; command.CommandType = CommandType.Text; - using SqlDataReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false); + using SqlDataReader reader = await command.ExecuteReaderAsync(); List names = new(); - while (await reader.ReadAsync().ConfigureAwait(false)) + while (await reader.ReadAsync()) { names.Add(reader[0].ToString()); } @@ -73,20 +83,22 @@ public async Task> GetTableModelsAsync(string connection { using SqlConnection connection = new(); connection.ConnectionString = connectionString; - await connection.OpenAsync().ConfigureAwait(false); + await connection.OpenAsync(); using SqlCommand command = connection.CreateCommand(); command.CommandText = "SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME"; command.CommandType = CommandType.Text; - using SqlDataReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false); + using SqlDataReader reader = await command.ExecuteReaderAsync(); List tables = new(); - while (await reader.ReadAsync().ConfigureAwait(false)) + while (await reader.ReadAsync()) { - TableModel m = new(); - m.TableSchema = reader[0].ToString(); - m.TableName = reader[1].ToString(); - m.TableType = reader[2].ToString(); + TableModel m = new() + { + TableSchema = reader[0].ToString(), + TableName = reader[1].ToString(), + TableType = reader[2].ToString() + }; tables.Add(m); } diff --git a/PRS/FileHandle/IFileReader.cs b/PRS/FileHandle/IFileReader.cs index bd3b348..b89ce00 100644 --- a/PRS/FileHandle/IFileReader.cs +++ b/PRS/FileHandle/IFileReader.cs @@ -1,10 +1,9 @@ using System.Threading.Tasks; -namespace PRS.FileHandle +namespace PRS.FileHandle; + +public interface IFileReader { - public interface IFileReader - { - public Task ReadLineAsync(); - public void Dispose(); - } + public Task ReadLineAsync(); + public void Dispose(); } diff --git a/PRS/FileHandle/IFileWriter.cs b/PRS/FileHandle/IFileWriter.cs index df7ca25..e262688 100644 --- a/PRS/FileHandle/IFileWriter.cs +++ b/PRS/FileHandle/IFileWriter.cs @@ -1,10 +1,9 @@ using System.Threading.Tasks; -namespace PRS.FileHandle +namespace PRS.FileHandle; + +public interface IFileWriter { - public interface IFileWriter - { - public Task WriteLineAsync(string input); - public void Dispose(); - } + public Task WriteLineAsync(string input); + public void Dispose(); } diff --git a/PRS/FileHandle/SchemaFileReader.cs b/PRS/FileHandle/SchemaFileReader.cs index bcbdb51..0e5173b 100644 --- a/PRS/FileHandle/SchemaFileReader.cs +++ b/PRS/FileHandle/SchemaFileReader.cs @@ -24,6 +24,6 @@ public void Dispose() public async Task ReadLineAsync() { - return await _reader.ReadLineAsync().ConfigureAwait(false); + return await _reader.ReadLineAsync(); } } diff --git a/PRS/FileHandle/SchemaFileWriter.cs b/PRS/FileHandle/SchemaFileWriter.cs index f812abe..3d5d7bd 100644 --- a/PRS/FileHandle/SchemaFileWriter.cs +++ b/PRS/FileHandle/SchemaFileWriter.cs @@ -27,6 +27,6 @@ public void Dispose() public async Task WriteLineAsync(string input) { - await _writer.WriteLineAsync(input).ConfigureAwait(false); + await _writer.WriteLineAsync(input); } } diff --git a/PRS/PRS.csproj b/PRS/PRS.csproj index 84563ef..e79062c 100644 --- a/PRS/PRS.csproj +++ b/PRS/PRS.csproj @@ -1,21 +1,40 @@  + + A simple command-line tool to query database schema in Microsoft SQL Server + Bruce Lee + prs + en-US + false + MIT + https://github.com/wooly905/PRS + README.md + https://github.com/wooly905/PRS + git + 11.0 + enable + true + + Exe - net6.0 + net7.0 + true true prs ../nupkg + Major wooly905.prs - 1.0.1.2 + 7.0.0 Bruce Lee - A command line tool to query table schema information in Microsoft SQL server + prs - + + diff --git a/PRS/Program.cs b/PRS/Program.cs index b4fc23f..b4d2e49 100644 --- a/PRS/Program.cs +++ b/PRS/Program.cs @@ -28,7 +28,7 @@ static async Task Main(string[] args) file, out ICommand value)) { - await value.RunAsync(args).ConfigureAwait(false); + await value.RunAsync(args); } else {