W jaki sposób powinienem połączyć się z tą bazą PostgreSQL?

0

Cześć,
dopiero uczę się Asp.net więc proszę o wyrozumiałość. Mam zainstalowane VS 2017 Community. Utworzyłem nowy projekt MVC i utworzyłem parę rzeczy. Chwilowo wszystko działa lokalnie.
Chciałbym teraz połączyć się z bazą danych Postgresql, którą zainstalowałem również lokalnie na komputerze i utworzyłem nową bazę danych.
W jaki sposób powinienem połączyć się z tą bazą danych?
Na EF nie jestem jeszcze gotowy, chciałbym zacząć od ADO.NET, ale półki co to nawet nie mogę zlokalizować gdzie w tym nowym VS jest connectionString etc... :(
Proszę o pomoc i naprowadzenie mnie - może być jakiś artykuł etc. ale w miarę aktualny, bo zdaje się asp.net dość szybko ewoluuje...
Z góry dziękuję za pomoc.

1

ConnectionString jest tam gdzie go umieścisz ;-)

Zasadniczo takie dane, które są a) wrażliwe, b) nie powinny być przechowywane w kontroli wersji, trzyma się w tzw. user secrets: https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.1&tabs=windows

Poza tym do połączenia możesz użyć IDbConnection, które dostarczy ci Npgsql (https://www.nuget.org/packages/Npgsql/), który jest dostępny bez problemu dla .NET Standard 2.0 (którego przypadkiem .NET Core 2.0 implementuje).

using System.Data.SqlClient;
// ... tutaj reszta

using (IDbConnection dbConnection = new NpgsqlConnection(connectionString))
{
    dbConnection.Open();
    // dbConnection.Execute(query, data); // czy cokolwiek potrzebujesz
}
0

Okey, dziękuję za wyjaśnienie. Już chyba zaczynam rozumieć jak to działa :)
Do tej pory miałem jedynie do czynienia z PHP i mySQLi to w takim domowym zakresie. ASP.NET to dla mnie nowość :)
Zaraz będę próbować się połączyć z bazą :)

0

Na wstępie chciałem się pochwalić, że udało mi się połączyć z bazą i wydobyć pierwsze dane :-))
Mam jednak w związku z tym kilka pytań:

  1. Jeśli zrobię już całą stronę i będę chciał ją przerzucić na jakiś inny serwer, gdzie również jest Postgresql to czy ConnectionString będzie wyglądać tak samo? Obecnie wygląda on u mnie tak:
string cs = "User Id=postgres;Password=haslo;Server=localhost;Port=5432;Database=BazaTestowa;Integrated Security=true; Pooling=true;";
  1. Czy w CS (w kodzie produkcyjnym) należy uzupełnić zmienną "Data Source"? Jaką ona powinna mieć wartość, jeśli baza jest zainstalowana lokalnie?

  2. Czy z poziomu PGSql da się jakoś wygenerować CS?

  3. Jak w Postgresql będę miał utworzonych kilka serwerów i na każdym z nich tak samo nazwane bazy danych to skąd ADO.NET będzie wiedział z której bazy chcę pobierać dane? Zdaje się, że w CS nie określa się nazwy serwera SQL(?).

  4. Chciałem się również zapytać, jeśli mam "model" tj. jakąś klasę, która przechowuje analogiczne dane jak w bazie danych to czy jest jakiś ładny sposób, żeby wczytać dane z bazy danych bezpośrednio do takiego obiektu, czy może jedyny sposób to czytanie każdego rekordu funkcją Read() i manualnie przypisywać dane wydobyte z bazy do właściwości obiektu?

  5. Rozważam zrobić w klasie Modelu funkcję typu:

public void UsupelnijDane(NpgsqlDataReader reader)
{
wlasciwosc1 = reader["wlasciwosc1"]; //coś w tym stylu
//...
}

I w klasie zaimplementować przypisywanie do właściwości dane z bazy. Co o tym myślicie?

  1. W bazie mam różnego typu dane m.in. integer. Czy jak chcę taką wydobytą z bazy zmienną przypisać do właściwości modelu to powinienem to rzutować (int) czy convertować Convert.ToInt32? Z tego co widzę to działają obie opcje, ale to nie oznacza, że obie wersje są prawidłowe...

Z góry dziękuję za waszą pomoc!

1
  1. ConnectionString ma w sobie nazwę użytkownika, hasło, adres serwera, numer portu, nazwę bazy danych i każda z tych informacji może być inna jak się łączysz do innego serwera;
  2. AFAIR Data Source to to samo co Database dla niektórych baz danych, możliwe, że i dla Postgresa;
  3. Określa się przecież adres hosta i port - na jednym hoście i porcie nie postawisz kilku serwerów;
    5,6,7. Proponuję zainteresować się Dapperem, który to zrobi za ciebie: https://github.com/StackExchange/Dapper
0

@Ktos, dziękuję za informację.
Gdybym jednak chwilowo nie chciał korzystać z Droppera to chciałem się jeszcze tylko upewnić odnośnie punktu 7:
W bazie danych przeważnie mamy znacznie więcej możliwych do zastosowania typów niż w C#. Jak wydobywam dane z bazy danych przy pomocy NpgsqlDataReader to czy ja te dane powinienem rzutować/konwertować czy może parsować czy jeszcze jakoś inaczej? W jaki sposób zamienić jeden typ danych na inny, żeby było bezpiecznie? Głównie chodzi o liczby/daty tzn. jak mamy w bazie int/double/datetime/bool/itd. to robimy (int) czy może UInt32.Parse() czy jeszcze inaczej?

1 użytkowników online, w tym zalogowanych: 0, gości: 1