Skip to content

Commit a6777c5

Browse files
committed
Initial database connectors code
1 parent 59f2253 commit a6777c5

File tree

7 files changed

+157
-0
lines changed

7 files changed

+157
-0
lines changed

DBAccess.csproj

+4
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@
66
<ImplicitUsings>enable</ImplicitUsings>
77
</PropertyGroup>
88

9+
<ItemGroup>
10+
<PackageReference Include="Npgsql" Version="6.0.6" />
11+
</ItemGroup>
12+
913
</Project>
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace DBAccess.DatabaseConnectors
2+
{
3+
public interface IDatabaseConnector
4+
{
5+
public string? GetDatabaseVersion(string? host, string databaseName, string databasePort);
6+
public string? ExecuteSQL(string SQLQuery);
7+
public string? GetTables();
8+
9+
}
10+
}
+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
using System.Data.Common;
2+
using Npgsql;
3+
4+
namespace DBAccess.DatabaseConnectors
5+
{
6+
public class PostgresConnector : IDatabaseConnector
7+
{
8+
private static string? dbUsername = Environment.GetEnvironmentVariable("DB_USERNAME");
9+
private static string? dbPassword = Environment.GetEnvironmentVariable("DB_PASSWORD");
10+
private NpgsqlConnection? connection;
11+
12+
public PostgresConnector(string? host, string? databaseName, string? databasePort)
13+
{
14+
host = (host == null) ? "localhost" : host;
15+
databaseName = (databaseName == null) ? "postgres" : databaseName;
16+
databasePort = (databasePort == null) ? "5432" : databasePort;
17+
18+
var connectionString = buildConnectionString(host, dbUsername, dbPassword, databaseName, databasePort);
19+
try
20+
{
21+
ConnectToDatabase(connectionString);
22+
}
23+
catch (Exception e)
24+
{
25+
Console.WriteLine(e.Message);
26+
}
27+
28+
}
29+
30+
public string GetTables()
31+
{
32+
var sqlQuerry = "select * from pg_catalog.pg_tables where schemaname != 'pg_catalog' and schemaname != 'information_schema';";
33+
return ExecuteSQL(sqlQuerry);
34+
}
35+
public static string? GetUsername()
36+
{
37+
return dbUsername;
38+
}
39+
40+
public string? GetDatabaseVersion(string? host, string databaseName, string databasePort)
41+
{
42+
43+
var sqlQuery = "SELECT version()";
44+
45+
return ExecuteSQL(sqlQuery);
46+
}
47+
48+
public string ExecuteSQL(string SQLQuery)
49+
{
50+
using var command = new NpgsqlCommand(SQLQuery, connection);
51+
string? queryResult = "";
52+
try
53+
{
54+
if (command.ExecuteScalar() != null &&
55+
connection != null)
56+
{
57+
queryResult = command.ExecuteScalar().ToString();
58+
}
59+
}
60+
catch (Exception e)
61+
{
62+
Console.WriteLine(e.Message);
63+
return e.Message;
64+
}
65+
66+
67+
return queryResult;
68+
}
69+
70+
private void ConnectToDatabase(string connectionString)
71+
{
72+
connection = new NpgsqlConnection(connectionString);
73+
connection.Open();
74+
}
75+
76+
private string buildConnectionString(string host, string? username, string? password, string databaseName, string databasePort)
77+
{
78+
string usernameConstruct =
79+
username == null ? "" : $"Username={username};";
80+
string passwordConstruct =
81+
password == null ? "" : $"Password={password};";
82+
return $"Host={host};{usernameConstruct}{passwordConstruct}Database={databaseName};Port={databasePort}";
83+
}
84+
85+
}
86+
}

Pages/Databases.razor

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
@page "/databases"
2+
3+
<PageTitle>Databases</PageTitle>
4+
5+
6+
<h1>Databases</h1>
7+
UserName: @username
8+
9+
<p>
10+
<label>Host</label><input type="text" name="host" @bind="host">
11+
</p>
12+
<p>
13+
<label>DB Name</label><input type="text" name="databaseName" @bind="databaseName">
14+
</p>
15+
<p>
16+
<label>DB Port</label><input type="text" name="databasePort" @bind="databasePort">
17+
</p>
18+
<p>
19+
<button @onclick="connectToDatabase"> Connect to database</button>
20+
</p>
21+
22+
<p>
23+
<label>Database Version: @dbVersion</label>
24+
</p>
25+
<p>
26+
<label>Tables: @tables</label>
27+
</p>
28+
29+
30+
31+
32+
33+
@code {
34+
private string host = "localhost";
35+
private string databaseName = "testdb";
36+
private string databasePort = "5000";
37+
private PostgresConnector connector;
38+
private string? dbVersion;
39+
private string? tables;
40+
private void connectToDatabase()
41+
{
42+
connector = new PostgresConnector(host, databaseName, databasePort);
43+
dbVersion = connector.GetDatabaseVersion(host, databaseName, databasePort);
44+
tables = connector.GetTables();
45+
}
46+
private string? username = PostgresConnector.GetUsername();
47+
48+
}
49+

Program.cs

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.AspNetCore.Components;
22
using Microsoft.AspNetCore.Components.Web;
33
using DBAccess.Data;
4+
using DBAccess.DatabaseConnectors;
45

56
var builder = WebApplication.CreateBuilder(args);
67

@@ -29,3 +30,4 @@
2930
app.MapFallbackToPage("/_Host");
3031

3132
app.Run();
33+

Shared/NavMenu.razor

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
2525
</NavLink>
2626
</div>
27+
<div class="nav-item px-3">
28+
<NavLink class="nav-link" href="databases">
29+
<span class="oi oi-list-rich" aria-hidden="true"></span> Databases
30+
</NavLink>
31+
</div>
2732
</nav>
2833
</div>
2934

_Imports.razor

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
@using Microsoft.JSInterop
99
@using DBAccess
1010
@using DBAccess.Shared
11+
@using DBAccess.DatabaseConnectors

0 commit comments

Comments
 (0)