error CS0726 lub OleDbException: Implicit conversion from data type sql_vairant to nvarchar is not allowed. Use the CONVERT function to run query.

0

Nie programuję zawodowo, bardziej hobbystycznie tworze narzędzia do swojej codziennej pracy.
Zapytania dostaje gotowce od "bazodanowcow" (tylko SELECT'y) z resztą "walczę sam".
Z "ConnectionStringa" kórego używam do tej bazydanych, bezproblemowo pobieram dane dla takiego zapytania:


            string zapytanie_ZwracaWgraneProgramyWgZapisow =
                    $@"SELECT
                           Data as PROGRAM
                    FROM
                            iBaza.dbo.GeneralData GD WITH(NOLOCK)
                    INNER JOIN
                            iBaza.dbo.LogData LD WITH(NOLOCK) ON LD.ID = GD.ID
                    WHERE
                            GD.DataRemoved = 0
                        AND
                            LD.DataRemoved = 0
                        AND
                            GD.UID = {UID}
                        AND
                            LD.EventID IN(32, 33, 88, 89, 78, 79, 52, 496)";

Obecnie mam takie dwa zapytania, poniżej będę się do nich odnosił skrótowo jako "te krótkie" i "te długie".
Podejrzewam ze błąd i wyjątek mogą mieć wspólne źródło, ale nie wiem tego, prosiłbym o podpowiedzi.
I nakierowanie czy problem leży po tylko po stronie SQL (tak wynika z tego co odnajduje w internecie)? Czy mogę go rozwiązać po stronie C#?

string zapytanie_ZwracaUIDyZZapisanyumidoNichProgramami =
                        $@"SELECT
                        UID,
                        iBaza.dbo.SumStrSep(LD.Data, ',') AS PROGRAM
                        FROM
                        iBaza.dbo.GeneralData GD WITH(NOLOCK)
                        INNER JOIN
                        iBaza.dbo.LogData LD WITH(NOLOCK) ON LD.ID = GD.ID
                        WHERE
                        GD.DataRemoved = 0
                        AND
                        LD.DataRemoved = 0
                        AND
                        GD.ProductionNo = '{nrzlecenia}'
                        AND
                        LD.EventID IN (32, 33, 88, 89, 78, 79, 52, 496)
                        GROUP BY UID";

            string zapytanie_zwracaUIDy =
                $@"SELECT
                UID
                FROM
                iBaza.dbo.GeneralData WITH(NOLOCK)
                WHERE
                ProductionNo = '{nrzlecenia}'
                AND
                DataRemoved = 0";

pobieram dane tak: (breakpointa stawiam w linii 12 i tam podglądam co jest zwracane w "OleDbDataReader")

List<string> listaOdczytanych = new List<string>();
            OleDbDataReader reader;

            using (OleDbConnection connection = new OleDbConnection(connectionString_iPlanista))
            {
                OleDbCommand command = new OleDbCommand(zapytanie_ZwracaUIDyZZapisanyumidoNichProgramami);
                command.Connection = connection;

                try
                {
                    connection.Open();
                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        listaOdczytanych.Add(((IDataRecord)reader)[0].ToString());
                    }


                }
                catch (Exception ex)
                {
                    throw new Exception($"Coś poszło nie tak z odczytywaniem z bazy danych {connectionString_iPlanista}" + Environment.NewLine +
                        $", w metodzie: {nameof(PlanistaReader.ZwrocNazwyProgramowZZapisow)}", ex);
                }
            }

W przypadku "krótkiego" zapytania "OleDbCommand" wykonuje się a w linii 16 podglądając zawartość "OleDbDataReader" mam coś jak niżej:
nie rozumiem co się dzieje od linii [30] co oznacza bład CS0726 - prosiłbym o podpowiedzi i nakierowanie.
obraz_2021-12-11_074639.png

W przypadku "dłuższego" zapytania "OleDbCommand" nie wykonuje się tylko rzuca wyjątek jak niżej:
Również nie wiem co to oznacza - prosiłbym o podpowiedzi i nakierowanie. Oraz czy oba te problemy mają wspólne źródło.
obraz_2021-12-11_074848.png

0

Ja bym zaczął od wykonania zapytania samemu na bazie za pomocą jakiegoś clienta. i zobaczył co zwraca

0

Co to za baza danych?

Dlaczego Ole do bazy danych ?

Masz narzut dodatkowych warstw, z których tylko zbędna komplikacja - i +500% trudności w analizie błędów

0
Varran napisał(a):

Oraz czy oba te problemy mają wspólne źródło.

Tak - gościa, który tą sytuację "zaprojektował" ... pewnie już nie pracuje?

0
            string zapytanie_zwracaUIDy =
                $@"SELECT
                UID
                FROM
                iBaza.dbo.GeneralData WITH(NOLOCK)
                WHERE
                ProductionNo = '{nrzlecenia}'
                AND
                DataRemoved = 0";

w tym zapytaniu spodziewam się listy wyników UID - gdzie każdy UID to dziesięciocyfrowa liczba (zawsze dziesięciocyfrowa) w innym miejscu systemu firmowego widzę ze tam są faktycznie takie numery, wiec co może być przyczyna ze od polowy zwróconych wyników wychodzi błąd:

Błąd: element DataTip jest niedostępny. error CS0726 ":" nie jest prawidłowym specyfikatorem formatu.

czy tam w wynikach tych liczb zaczęło być cos zwracane ciągiem, gdzie kolejne ciągi cyfr zaczęły być odseparowywane dwukropkami?

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