C# i SQL

0

Siema,
mam taki problem że chce połączyć SQL 2014 z aplikacją
C# w visualstudio 2017.Mam problem z connection:

głoszony wyjątek: „System.ArgumentException” w System.Data.dll
Wystąpił nieobsługiwany wyjątek typu „System.ArgumentException” w System.Data.dll
Nieobsługiwane słowo kluczowe: 'initial
catalog'.

„ConsoleApp1.exe” (CLR v4.0.30319: ConsoleApp1.exe): załadowano „C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\common7\ide\PrivateAssemblies\Runtime\Microsoft.VisualStudio.Debugger.Runtime.dll”. Pominięto ładowanie symboli. Moduł jest zoptymalizowany i włączono opcję debugera „Tylko mój kod”.
Program „[8952] ConsoleApp1.exe” zakończył działanie z kodem -1073741510 (0xc000013a).

Kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data.Common;
using System.Configuration;

namespace Produkcja
{
    class Program
    {
        static void Main(string[] args)
        {

            string provider = ConfigurationManager.AppSettings
                ["provider"];

            string connectionString = 
                ConfigurationManager.AppSettings["connectionString"];

            DbProviderFactory factory =
                DbProviderFactories.GetFactory(provider);

            using (DbConnection connection =
                factory.CreateConnection())
            {
                if (connection == null)
                {
                    Console.WriteLine("Connection Error");
                    Console.ReadLine();
                    return;
                }

                connection.ConnectionString = connectionString;

                connection.Open();

                DbCommand command = factory.CreateCommand();

                if (command == null)
                {
                    Console.WriteLine("Command Error");
                    Console.ReadLine();
                    return;
                }

                command.Connection = connection;

                command.CommandText = "Select * From Produkcja";

                using (DbDataReader dataReader =
                    command.ExecuteReader())
                {
                    while (dataReader.Read())
                    {
                        Console.WriteLine($"{dataReader["Nr_p"]}" + $"{dataReader["Index_1"]}");
                    }
                }

                Console.ReadLine();
            }
        }
    }
}

Program się uruchamia lecz zacina się w tym miejscu ( i wtedy pojawia się ten błąd co podałem na górze ):

 connection.ConnectionString = connectionString;

 connection.Open();
0

Jak coś jestem zielony w tych sprawach, dopiero się uczę. Podany kod robiłem z poradnika
https://www.youtube.com/watch?v=OdDkFPO_nto

Jest to poradnik co prawda do visual 2016 a ja pracuje na 2017 natomiast sql 2014.

0
WuckeM napisał(a):

Jest to poradnik co prawda do visual 2016 a ja pracuje na 2017 natomiast sql 2014.

Coś pomieszałeś z wersjami. VS 2016 nie ma. Poradnik jest na 2017 a sql 2016

0

Yyy chodziło mi ze SQL 2016 a ja pracuje na 2014
trochę pomieszałem

2

Pokaż connectionString, który się kryje pod tym ConfigurationManager.AppSettings["connectionString"];

0

Nie bardzo rozumiem o co ci dokładnie chodzi,
gdyż tak jak już napisałem dopiero się uczę.
chciałem przepisać ten kod sprawdzić czy zadziała i dopiero wtedy się w niego zagłębić
co i jak dokładnie działa. A więc jak byś mógł rozszerzyć to o co prosisz.
:D

1

Masz plik App.config? Wklej tutaj całą zawartość tego pliku

1

Jak chcesz się połączyć z bazą to musisz powiedzieć w programie o jaką bazę chodzi, bo niestety kod nie ma szklanej kuli. W tym celu zazwyczaj się używa connectionString, który Twoja aplikacja pobiera ze wspomnianego wyżej App.config. Także żeby ta linijka działała to musisz w App.config podać gdzie program znajdzie bazę i jak się do niej dostanie (login-hasło albo np. domenowo)

0
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="provider" value="System.Data.SqlClient"/>

    <add key="connectionString" value="Data Source=LT061405\SQLEXPRESS;Initial 
         Catalog=Plan_Produkcyjny_Blacha_Płaska_BPX;Persist Security Info=True;User 
         ID=sa;Password=***********;Pooling=False"/>
  </appSettings>
  
  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>

1

Problem leży w nieobsługiwanych znakach jakie robi Enter = \n\r. Jeśli zamienisz to co jest poniżej

<add key="connectionString" value="Data Source=LT061405\SQLEXPRESS;Initial 
         Catalog=Plan_Produkcyjny_Blacha_Płaska_BPX;Persist Security Info=True;User 
         ID=sa;Password=***********;Pooling=False"/>

na to, w jednej linii

<add key="connectionString" value="Data Source=LT061405\SQLEXPRESS;Initial Catalog=Plan_Produkcyjny_Blacha_Płaska_BPX;Persist Security Info=True;User ID=sa;Password=***********;Pooling=False"/>
0

Rzeczywiście to zadziałało, lecz pojawiłm się nowy problem :D

connection.Open();

System.Data.SqlClient.SqlException: „Połączenie z serwerem zostało pomyślnie ustanowione, ale wystąpił błąd podczas procesu logowania. (provider: Shared Memory Provider, error: 0 - Na drugim końcu potoku nie ma żadnego procesu.)”
Win32Exception: Na drugim końcu potoku nie ma żadnego procesu

3

Pamiętasz, że zamiast * ma być normalnie wpisane hasło?

0

Słuszna uwaga :D
Wielkie dzięki za pomoc i za poświęcony czas, już działa!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.