Co muszę wpisać, żeby połączyć się z bazą sql w aplikacji konsolowej c#?

0

Czy ciąg w builder.DataSource jest poprawny? Mam zainstalowany sql server 2019 express oraz visual studio 2019 community. Co muszę wpisać zamiast sqlexpress, zeby to wszystko przeszło poprawnie? Aha, dodam, że robię to wszystko w console application?

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "sqlexpress.database.windows.net";
                builder.UserID = "user1";
                builder.Password = "";
                builder.InitialCatalog = "MojaBaza";

1

Spróbuj (localdb)\mssqllocaldb. Ale Twoja instancja może się nazywać inaczej.

0

Adres serwera. Skoro jest to instancja sql sexpress to np. .\SqlExpressInstancja.

Dodatkowo zwróć uwagę czy korzystasz z SqlLogin czy z domenowych poświadczeń.

2

Adres serwera w postaci host\nazwa_instancji.
W przypadku gdy serwer stoi na tej samej maszynie na której uruchamiasz program zapis można skrócić (tak jak to pokazał kobi55) do: .\nazwa_instancji (czyli . zamiast nazwy hosta),

Nawę instancji możesz sprawdzić m.in. na liście usług (domyślnie jest to SQLEXPRESS)
screenshot-20210127143731.png

0

Ja wlaśnie daję domyślnie sqlexpress, ale niestety dodaję taki error:
"Cannot open server 'sqlexpress' requested by the login. Client with IP address 'adresIP' is not allowed to access the server. To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range. It may take up to five minutes for this change to take effect."
Jakiś pomysł? Bo pierwszy raz mi się cos takiego dzieje.

try
            {

                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "sqlexpress.database.windows.net";
                
                builder.UserID = "DESKTOP-HHM64OC\user1";
                builder.Password = "";
                builder.InitialCatalog = "dbo.NazwaBazy";
                
                using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
                {
                    Console.WriteLine("\nQuery data example:");
                    Console.WriteLine("=========================================\n");

                    String sql = "SELECT Name FROM dbo.NazwaTabeli";

                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        connection.Open();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine("{0} ", reader.GetString(0));
                            }
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.ReadLine();
0

@finito: builder.DataSource = "sqlexpress.database.windows.net"; zmień to na instancję serwera.

https://www.connectionstrings.com/sql-server/

0

Okej, erroru już nie ma, jednak nie wyświetla mi kolumny w tabeli. Czemu? Jest tylko napis: "Query data example:
========================================="

0

Pewnie zapytanie nic nie zwraca...

0

@finito: Pewnie tak jak kolega wyżej napisał.

SELECT Name FROM dbo.NazwaTabeli

Masz w bazie taką tabelę? NazwaTabeli :D?

0

Uruchomiłem debugowanie i mam informację, że connection jest nullem. Powiedzcie co robię źle.

try
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "Server=SQLEXPRESS;";
                
                builder.UserID = "Tu mam nazwe poprawno";
                builder.Password = "";
                builder.InitialCatalog = "Tutaj też";
                builder.IntegratedSecurity = true;

                using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
                {
                    Console.WriteLine("\nQuery data example:");
                    Console.WriteLine("=========================================\n");
                    
                    String sql = "SELECT tu też jest poprawnie FROM dbo.Products";

                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        connection.Open();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine("{0} ", reader.GetString(0));
                            }
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.ReadLine();

0

Połącz się SSMS albo jakimś innym klientem i zobacz co dosatejsz z tego selekta.

0

@UglyMan: W MM Studio wyświetla wszystko okej. W tym właśnie rzecz. Moim zdaniem tu jest cały czas jakiś problem z tym connection. Mówię. Jak debuguje to widzę nulla.

0

builder.DataSource = "Server=SQLEXPRESS;"; - to jest źle - nadal nie korzystasz z tego co Ci napisaliśmy.

0

Teraz dałem tak, ale chyba też jest źle, bo cały czas connectionn jest nullem.

try
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();

                builder.DataSource = "SQLEXPRESS";
                builder.UserID = "Nazwa";
                builder.Password = "";
                builder.InitialCatalog = "dbo.NazwaBazy";
                builder.IntegratedSecurity = true;

                using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
                {
                    Console.WriteLine("\nQuery data example:");
                    Console.WriteLine("=========================================\n");
                    
                    String sql = "SELECT NazwaKolumnyi FROM dbo.NazwaTabeli";

                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        connection.Open();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine("{0} ", reader.GetString(0));
                            }
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.ReadLine();

0

A po co ci to DBO przy nazwie bazy? Schematy są w bazie, a nie bazy w schematach. Jak masz

builder.IntegratedSecurity = true;

to możesz olać użytkownika i hasło

0

@finito: nadal nie wpisałeś adresu bazy danych tak jak Ci mówiliśmy. W tym momencie aplikacja będzie szukała w Twoim otoczeniu sieciowym serwera/komputera nazywającego się SQLEXPRESS.

1
builder.DataSource = "YOURPC/SQLEXPRESS";
builder.InitialCatalog = "NazwaBazy";
builder.IntegratedSecurity = true;
0

Poczekajcie chwilę. Muszę to wszystko dokładnie przedebugować, bo powolutku mam wrażenie, że dostałem sukinsyna.

0

Wrzuć pełny kod (bez wstawek "tu mam dobrze").

0

Słuchacie, "gość" zatrzymuje się na (sory) "connection.Open()".

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;

namespace ConnectionProject
{
    class Program
    {
        //static string connectionString = "SERVER = DESKTOP-HHM64OC\barto; DATABASE = dbo.ShopDB; USER ID = DESKTOP-HHM64OC\barto ";
        static void Main(string[] args)
        {
            try
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                
                builder.DataSource = "DESKTOP-HHM64OC/SQLEXPRESS";
                builder.InitialCatalog = "Poprawna nazwa";
                builder.IntegratedSecurity = true;

                using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
                {
                    Console.WriteLine("\nQuery data example:");
                    Console.WriteLine("=========================================\n");
                    
                    String sql = "SELECT NazwaKolumny FROM NazwaTabeli";

                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        connection.Open();
                        using (SqlDataReader reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine("{0} ", reader.GetString(0));
                            }
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }
            Console.ReadLine();
        }
    }
}

I nie przechodzi dalej do using ...

0

To znaczy, że wisi podczas próby otwarcia połączenia. Pewnie przeszukuje sieć lokalną.

0

No okej, ale co zrobić, żeby to jednak działało.;-)))

1

@finito: Podejrzewam, że przydałoby się podać poprawną nazwę serwera i instancji sql.
Zmień slasha na backslasha... DESKTOP-HHM64OC/SQLEXPRESS

0

Ufffffffffffffffffffffffffffff;-))) Działa;-)))))))) Musiałem tylko podać dodatkowo UserID. Dziękuję wam !!!

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