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 ???
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 ???
Błąd wyskakuje w linijce z kodem:
var data = _db.Database.SqlQuery<AneksListaModel>(sql, new object[] { }).ToList();
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.
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();
}
}
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")
{
}
}
}
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.
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 + "'";
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
.
Nie ma TABELA1 w bazie. O czym tu jeszcze pisać?
Tabela jest w bazie. Zapytanie testowałem w SQL studio i działa prawidłowo.
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;
}
Czym jest ank
w zapytaniu? Masz linię:
"FROM TABELA1 ank " +
A jednak jej nie ma. Sprawdź pod debugerem db.Database do jakiej bazy się to łączy i co jest w _cs.
Cs to tylko nazwa bazy danych czy cały connectionstring? Spory bałagan.
cs to nazwa bazy danych
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
Lipa. Może sprawdź uprawnienia.
Wpisz prostego SQL Select * from tabela1 przez db.Database.SqlQuery...
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.
logowanie do bazy danych jest poprzez konto "sa", więc uprawnienia odpadają
A zmienna cs
co zawiera w debugu?
cs to nazwa bazy danych
Zmiennna cs
w debugu ma nazwę bazy danych
Spróbuj w ConnectionString ustawić tylko IP serwera bez nazwy. Druga sprawa wyrzuć initial catalog i w zapytaniu zmień "FROM baza.dbo.TABELA1"
Zrobiłem UserControl i wypełniłem Form, pomogło, temat do zamknięcia.
:) 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.