.NET i takie tam

dbo.Clients

leave a comment »

Ostatnio zostałem poproszony o pomoc przy rozwiązaniu problemu – kod który powinien działać – wbrew logice działać nie chciał (brzmi znajomo, prawda?). Otóż w pliku *.sdf (Sql Server Compact) była tabla:

Jeśli odwołać się do tej tabeli poprzez, np:

SELECT * FROM Clients
SELECT * FROM dbo.Clients
SELECT * FROM [dbo].[Clients]

Otrzymamy błąd mówiący, że tabela Clients nie istnieje. Na pierwszy rzut oka może się wydawać dziwne – zapytania są poprawne, więc co jest źle? Otóż, jesteśmy przyzwyczajeni do skryptów generowanych przez Sql Server i składnia [dbo].[nazwa_tabeli] jest jak najbardziej naturalna. Jednak należy pamiętać, że Sql Compact rządzi się trochę innymi prawami i nie posiada mechanizmów do obsługi uprawnień. W tym przypadku nasza tabela nie nazywa się Clients tylko dokładnie dbo.Clients. Aby odwołać się do tej tabeli musimy jej nazwę ująć w nawiasy kwadratowe:

SELECT * FROM [dbo.Clients]

Trochę jednak dziwi mnie, że zapytanie:

SELECT * FROM dbo.Clients

również nie działa i generuje wyjątek.

Inną sprawą jest również jak można było utworzyć taką nazwę tabeli, gdyż nawet jeśli najpierw stworzymy sobie strukturę bazy na Sql Serverze wygenerujemy skrypt i wykonamy go na bazie *.sdf – Visual Studio poinformuje nas o błędnej nazwie tabeli. Pozostaje wiec nam, chyba, tylko wklepanie tej nazwy ręcznie – cóż za nieuwagę się płaci.

Written by sakowicz

Maj 13, 2007 @ 9:48 am

Napisane w .NET CF

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: