2011-11-18 12 views
5

mam zdefiniowanej przez użytkownika funkcji SQL, że jestem w stanie połączyć się z Management Studio przy użyciu składni dbo.Function(arg)serwer SQL - wykonanie funkcji skalarnej bez specifing nazwę db

Teraz, kiedy mam do wywołania tej funkcji z C# jeśli I don 't określ **dbname**.dbo.Function(arg) Występuje błąd, że serwer SQL nie znajdzie tej zdefiniowanej przez użytkownika funkcji. Jak mogę rozwiązać ten problem bez określania nazwy_bd? I już połączyć się z serwerem przy użyciu połączenia ciąg, który określa "initial catalog = dbname"


Wydaje się, że nie mogę odtworzyć zachowanie wymienionych w tym punkcie :-) (przy użyciu serwera SQL 2005 lub 2008) muszę umieścić ten pytanie zawieszone

+1

Czy mógłbyś pokazać kod C# i dokładny wyjątek? –

+2

Może być konieczne nadanie uprawnieniom "EXEC" funkcji do logowania używanego przez aplikację. –

+0

@MartinSmith Korzystam z Windows Authetication w obu studiach zarządzania (gdzie to działa) i kod C#. Jak już powiedziałem, jeśli dodam w kodzie również dbname (np. SELECT \t DATEPART (ROK, Activitylogs.Datastamp) AS YEAR_VALUE, dbname.dbo.ISOweek (Activitylogs.Datastamp) ... działa – Ghita

Odpowiedz

2

Twój ciąg połączenia musi określić bazę do korzystania początkowo może to wyglądać mniej więcej tak:.

var cn = new SqlConnection(
    "SERVER=SomeServer;DATABASE=SomeDb;Integrated Security=SSPI;" 
); 

Bez tego, jesteś prawdopodobnie dumpingu w bazie danych, którą master s dlaczego musisz w pełni zakwalifikować nazwę funkcji.