C# zawieszone połączenie z bazą danych

0

Witam,

Może mi ktoś powiedzieć co jest z tą metodą nie tak ? Przy wykonywaniu kodu zawiesza się w linijce: conn.Open(); i już dalej nie idzie. Debugerem sprawdzałem i wychodzi na to, że łączenie jest z prawidłowym serwerem oraz bazą danych. Poniżej kod:

public void NowyDokument()
        {
            SqlConnection conn = new SqlConnection(@"Server= xxx.xxx.x.x\\nazwa_serwera; Database = '" + Umowy._cs + "'; User ID=xyz;Password=xyz;Connection Timeout=12000");

            SqlCommand cmd = conn.CreateCommand();

            conn.Open();

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@DATA_OD_PO_ZM", dataOd.EditValue)); 
            cmd.Parameters.Add(new SqlParameter("@DATA_DO_PO_ZM", dataDo.EditValue));
            cmd.Parameters.Add(new SqlParameter("@NR_TYPU", txtTypDok.Text.ToString())); 
            cmd.Parameters.Add(new SqlParameter("@NUMER_DOKUMENTU", txtNrDokumentu.Text.ToString())); 
            cmd.Parameters.Add(new SqlParameter("@DATA_WYSTAWIENIA", dataWystDok.EditValue));

            cmd.Parameters.Add(new SqlParameter("@IDENTY", "test")); 

            cmd.CommandText = "NAZWA_PROCEDURY";

            cmd.ExecuteNonQuery();

            conn.Close();
        }
2

1 Masz bardzo długi timeout. Myślę, że po upływie tego czasu leci jakiś wyjatek, i on zawiera wskazówkę
Pełne zawieszenie w C# w zasadzie nie istnieje

  1. Adres serwera mi się nie podoba. Po backslashach jest instancja a nie "nazwa serwera"
4

Ciężko jest rozwiązać twój problem, gdyż występuje on wręcz na pierwszej linijce kodu i mocno sugerują że coś z samym conn stringiem lub faktyczną bazką jest nie tak

Na pewno zacząłbym od zaprzestania lepienia stringów do bazki jak pierogów, a zamiast tego użyć dedykowanego API, aby wyeliminować potencjalny problem z conn stringiem

var builder = new SqlConnectionStringBuilder()
{
    DataSource = "ServerName",
    InitialCatalog = "DatabaseName",
    UserID = "UserName",
    Password = "UserPassword"
};

var conn = new SqlConnection(builder.ConnectionString);

edit. chociaż problem z conn str pewnie od razu rzuciłby wyjątek, więc pozostaje server/adres servera.

0

Hej

a aplikacja jak daleko ma ta baze danych ? jest na tym samym serwerze co aplikacja ? baza jest na inny serwerze w tej samej serwerowni ? czy może baza jest gdzie w chmurze a aplikacja lokalnie ?

0

Spróbuj sprawdzić połączenie takim kodem.

try
       {
           using (SqlConnection connection = new SqlConnection(..ConnectionStrings...))
           {
               connection.Open();
               String sql = "SELECT 1;";
               using (SqlCommand command = new SqlCommand(sql, connection))
               {
                   using (SqlDataReader reader = command.ExecuteReader())
                   {
                       while (reader.Read()) { }
                   }
               }
               connection.Close();
           }
       }
       catch (SqlException e)
{
............
}
2
  1. Ta baza danych ma apostrofy w nazwie? Bo jeśli nie, to raczej nie trzeba ich podawać.
  2. No i tak w sumie, to czemu aż 20 200 minut timeoutu na połączenie? Jakby tak ustawić 30 sekund, to po chwili byłoby wiadome, co jest nie tak.
0

Dziękuję WeiXiao działa poprawnie.

2

@pawelus222: zadania na poczatek
EnrityFramework, EF CodeFirst i DatabaseFirst.
Jak masz już bazę to EF moze Ci wygenerować klasy dla tabel na potrzeby operowania z baza w Linq.
Linq obowiazkowo.
Jakiś solidny kurs czy film bo na razie to rozwiazujesz problemy, które normalnie nie istnieją.

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