C# System.Data.SqlClient.SqlException: „Nieprawidłowa nazwa obiektu TABELA1"

0

Witam,

Pojawia mi się komunikat z błędem jak w temacie. Zapytanie jest w kodzie aplikacji C#. Zapytanie testowane w SQL Studio Management i oczywiście działa poprawnie, zaś w aplikacji jest błąd.

Podpowie ktoś czym to może być spowodowane ???

0

Błąd wyskakuje w linijce z kodem:

var data = _db.Database.SqlQuery<AneksListaModel>(sql, new object[] { }).ToList();
0

Bez kodu zapytania można wróżyć. Być może nie podałeś odpowiedniej ścieżki do obiektu bazodanowego (tabeli) albo masz błąd w ConnectionStringu i łączysz się nie tam gdzie trzeba.

0
public void OdswiezListeAneksow()
        {            
            
            {
                 var sql = $"tu jest zapytanie do bazy danych"
                 var data = _db.Database.SqlQuery<AneksListaModel>(sql, new object[] { }).ToList();
                data.ForEach(x => _listaAneksy.Add(x));
                myGridView4.RefreshData();
            }

        }
0

Poniżej kod klasy do połączenia z bazą:

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

namespace Test.Daq
{
    public partial class Db : DbContext
    {
        public Db(string cs)
             //: base(cs)
         :base($"data source=111.111.1.1\\NAZWA_SERWERA;initial catalog = {cs}; User ID = xyz; Password=xyz")
        
        {

        }

    }
}

0

Nadal brak SQLa. Jak wyżej, jesteś pewien, że łączysz się do dobrej bazy i masz dobre ścieżki [schema].[table] w zapytaniu? Bo w kontekście Twojego zapytania TABELA1 nie jest widoczna.

0
var sql = "SELECT ank.NUMER as Numer, FORMAT(ank.DATA_AN, 'yyyy-MM-dd') AS DataAn, " +
                   "ank.NR_REJ_PO_ZM as NrRej, ank.CZ_WYR_PO_ZM as CzeNal, FORMAT(ank.DATA_OD_PO_ZM, 'yyyy-MM-dd') AS DataOd, " +
                   "FORMAT(ank.DATA_DO_PO_ZM, 'yyyy-MM-dd') AS DataDo, format(ank.WARTOSC_CZ_PO_ZM, '#,000.00') AS WysCz " +
                   "FROM TABELA1 ank " +
                   "INNER JOIN N_UMOWY AS umn " +
                   "ON ank.ID_UM = umn.ID_UM " +
                   "INNER JOIN N_CHARAKTERYSTYKA AS chp " +
                   "ON umn.ID_CHARAKTERYSTYKI = chp.ID_CHARAKTERYSTYKI " +
                   $"WHERE umn.NUMER_UM = '" + txtNrUm.Text + "'";

1

System.Data.SqlClient.SqlException: „Nieprawidłowa nazwa obiektu TABELA1"

Wywalało mi to jak przy użyciu ORM, np EF Core, w DbContext źle nazwałem tabelę, np public DbSet<TabelaModel> Tabela { get; set; } zamiast public DbSet<TabelaModel> Tabela1 { get; set; }

Więc jest spora szansa na to, że w bazie nie masz obiektu TABELA1.

1

Nie ma TABELA1 w bazie. O czym tu jeszcze pisać?

0

Tabela jest w bazie. Zapytanie testowałem w SQL studio i działa prawidłowo.

0

Może, gdzieś w tym kodzie jest błąd ?

public List<AneksListaModel> _SelectedList = new List<AneksListaModel>();

        private List<AneksListaModel> _InputList = new List<AneksListaModel>();

        BindingList<AneksListaModel> _listaAneksy = new BindingList<AneksListaModel>();        

        string _cs = "";
        Db _db;
        public frmListaAneksowNajmow(string cs)
        {
            _cs = cs;

            InitializeComponent();
            InitializeComponents();
        }

        private void InitializeComponents()
        {
            _db = new Db(_cs);

            myGridView4.SelectionChanged += Chnge;
            myGridControl4.DataSource = _listaAneksy;
        }
0

Czym jest ank w zapytaniu? Masz linię:
"FROM TABELA1 ank " +

0

A jednak jej nie ma. Sprawdź pod debugerem db.Database do jakiej bazy się to łączy i co jest w _cs.

0

Cs to tylko nazwa bazy danych czy cały connectionstring? Spory bałagan.

0

cs to nazwa bazy danych

0

debugerem sprawdziłem i wychodzi, że łączenie jest z prawidłową bazą, ale nie wiem czemu z tą tabelą jest błąd, ponieważ ona jest w tej bazie

0

screenshot-20210619171349.png
screenshot-20210619171450.png

0

Lipa. Może sprawdź uprawnienia.
Wpisz prostego SQL Select * from tabela1 przez db.Database.SqlQuery...

0

Napisałem prosty SELECT z TABELA1 i dalej jest ten sam błąd. Co ciekawe spróbowałem też prostego SELECT z innej tabeli w tej bazie i jak się okazuje także jest ten sam błąd.

0

logowanie do bazy danych jest poprzez konto "sa", więc uprawnienia odpadają

0

A zmienna cs co zawiera w debugu?

0

cs to nazwa bazy danych

0

Zmiennna cs w debugu ma nazwę bazy danych

0

Spróbuj w ConnectionString ustawić tylko IP serwera bez nazwy. Druga sprawa wyrzuć initial catalog i w zapytaniu zmień "FROM baza.dbo.TABELA1"

0

Zrobiłem UserControl i wypełniłem Form, pomogło, temat do zamknięcia.

0

:) zrobienie UserControl poprawiło błąd? :)

Edit, OT
Nie pisz kodu DB w UserControl.
Jak składasz zapytania to używaj parametrów, szczególnie jak używasz zmiennej wpisanej w TextBox bez zadnej kontroli. Bardzo brzydkie rzeczy można wtedy zrobić.
Nie ma sensu tak kombinować z przekazywaniem nazwy DB o wklejać ConnectionStringa.

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