2013-10-29 37 views
10

zastosowałem SQL Server Data Tools patch do Visual Studio 2012 (Premium) i stworzył SQL Server CLR projektu funkcji zdefiniowanej przez użytkownika w języku C#:SSDT SQL Server debugowanie nie Hit CLR Breakpoints

public partial class UserDefinedFunctions 
{ 
    [Microsoft.SqlServer.Server.SqlFunction] 
    public static SqlInt32 Add42(SqlInt32 in_param) 
    { 
     SqlInt32 retval = in_param + 42; // Set break point here. 
     return retval; 
    } 
} 

w obiekcie SQL Server Okienko Eksploratora, klikam prawym przyciskiem myszy na nowo opublikowanym UDF i wybieram "Execute Function ...". Zostałem poproszony o podanie przykładowej wartości wejściowej, a Visual Studio następnie opublikuje funkcję (ponownie) do mojego lokalnego SQL Server 2012 i wygeneruje skrypt, który wygląda następująco:

DECLARE @return_value Int 

EXEC @return_value = [dbo].[Add42] @in_param = 5 

SELECT @return_value as 'Return Value' 

GO 

... i wykonuje go, zwracając oczekiwany wynik 47.

Jeśli teraz wstawię punkt przerwania do pliku wykonywalnego w moim CLR kod C++ UDF, kliknij prawym przyciskiem myszy funkcję UDF w Eksploratorze obiektów programu SQL Server, a tym razem wybierz " Funkcja debugowania ... ", ląduję w debugerze dla wygenerowanego skryptu testowego SQL. Potrafię przejść przez instrukcje SQL na końcu skryptu, który zwraca poprawny wynik, ale punkt przerwania w moim kodzie C# nigdy nie został osiągnięty w debugerze C#.

Terminologia dla tej funkcji wydaje się myląca. Dla każdego programisty "debugowanie" funkcji oznacza przechodzenie przez linie wykonywalne w kodzie samej funkcji. Po prostu wygenerowanie wiązki testowej SQL, która wywołuje moją skompilowaną funkcję i zwraca wynik, to "testowanie" tej funkcji. Co najwyżej jedyną rzeczą "debugowania" jest sam test generowany przez narzędzie, ponieważ nie można "wkroczyć" w kod CLR. Jedyną opcją jest "Step Over" to.

Więc jak mogę Visual Studio faktycznie debugowania i uderzyć przerwania w moim UDF kod C#?

+0

Czy próbowałeś/aś przejść przez kroki [tego dokumentu MSDN] (http://technet.microsoft.com/en-us/library/ms131096.aspx), aby sprawdzić, czy pominąłeś krok? –

+0

@Scott - Próbowałem, ale po powiedzeniu ci, jak utworzyć funkcję SQL CLR lub sproc - co oczywiście już zrobiłem - cały artykuł daje ci debugowanie Visual Studio 101. Wiesz: "kliknij prawym przyciskiem myszy linię i wybierz "" przełącz punkt przerwania "", itd. Następnie, mówi "Dodaj skrypt, który testuje typ.": "W eksploratorze rozwiązań rozwiń katalog TestScripts i kliknij dwukrotnie Test.sql" Nie widzę "TestScripts" katalogu w Eksploratorze rozwiązań w 2012 lub 2010 roku, więc nie mam pojęcia, o czym mówią. – Buggieboy

Odpowiedz

7

OK, w końcu to wymyśliłem. Do debugowania kodu SQL CLR w VS 2012:

  1. Utwórz testowy skrypt SQL, który wywołuje UDF, sproc lub innego obiektu CLR. (Można to zrobić za pomocą lub opcji „Execute” Funkcja Funkcja „Debug” w Eksploratorze obiektów Server, jak opisano w pytaniu.)

  2. Zapisz wygenerowanego skryptu. (Będzie to domyślnie nazywane coś w stylu "SQLQuery1.sql" . Możesz chcieć nadać mu bardziej znaczącą nazwę: .)

  3. W oknie Solution Explorer kliknij prawym przyciskiem myszy projekt UDF (lub inny typ CLR) i wybierz "Właściwości".

  4. Zostanie otwarta karta właściwości projektu. Po lewej stronie wybierz kategorię "Debugowanie" .

  5. W podkategorii "Rozpocznij działanie" panelu Debugowanie, wybierz przycisk radiowy "Skrypt uruchamiania": . Umożliwi to związane rozwijaną tak że można określić .sql skrypt utworzony w kroku 1.

  6. Zapisz wszystko, przełącz punkt przerwania na linii wykonywalnego Twojej C# lub inny język .NET kodu , a następnie naciśnij przycisk debugowania.

UWAGAZapora systemu Windows zablokował niektóre cechy tego programu” Możesz teraz uzyskać dialogowe informujące, że Sprawdziłem pola, aby umożliwić dostęp do domen i sieci prywatnych.

Kontynuowanie teraz powinno spowodować osiągnięcie punktu przerwania.

+5

UWAGA: Ważne jest również, aby w panelu Eksploratora obiektów SQL Server kliknąć prawym przyciskiem myszy na serwerze i wybrać "Zezwalaj na debugowanie SQL/CLR"! – Buggieboy

+1

TAKŻE INFORMACJA: Jak wspomniano poniżej, powinieneś uruchomić Visual Studio w trybie Administratora. – Buggieboy

+0

Śledzono wszystko. Brak opcji Zezwalaj na debugowanie SQL/CLR w dowolnym miejscu we właściwościach projektu bazy danych lub w panelu połączeń eksploratora serwerów. – jwize

2

ja nie wiem, czy SSDT zmienia, ale w VS2008 debugować UDF .net następująco:

  • wdrożyć go do mojego lokalnego serwera SQL,
  • potem dołączyć do SQL VS Proces serwera (Menu Debug/Attach to process/sqlserver.exe, jeśli SQL Server działa jako usługa, wymaga, aby VS został uruchomiony jako administrator).
  • Następnie wykonaj kod SQL wywołujący UDF, np. sol. w Management Studio. Może to zadziała z SSDT w VS 2012.
+0

Frank, jawnie załączanie nie jest konieczne w VS 2012. Zobacz moją odpowiedź powyżej – Buggieboy

1

Zastosowana łatka może instalować elementy VS, które nie są aktualne w aktualizacji kwartalnej programu Visual Studio. Zalecam teraz zastosować najnowszy Visual Studio Quarterly Update dla VS 2012.

+0

To była dobra sugestia, a ja poszedłem za nią i zastosowałem aktualizację kwartalną na górze mojej poprawki SSDT, ale nie zmieniło to zachowania debugowania ani struktury katalogu Solution Explorer – Buggieboy

+1

@Buggieboy Pracowałem nad aplikacją Windows phone i zainstalowałem dodatek Azure. Nie pojawią się, ponieważ Azure instalował komponenty w VS, które były poprzednimi bieżącymi poprawkami.Cieszę się, że udało ci się to rozwiązać. – OmegaMan

5

Dla Visual Studio 2015 + Update 2:

W SQL Server Object okienku Explorer, kliknij prawym przyciskiem na serwerze i wybierz "Zezwól SQL/CLR debugowanie":

enter image description here

W Server Explorer, kliknij prawym przyciskiem myszy na funkcję, którą chcesz debugować, i wybierz: Execute:

enter image description here

Generuje kod dla ciebie. Wybierz Execute with Debugger:

enter image description here

Następnie można umieścić punkt przerwania w kodzie C#, a będzie to hit.

Zostanie wyświetlony monit o otwarcie portu w zaporze sieciowej, który poprosi o dołączenie do SQL Server.

+0

Oto poprawne kroki. Nadal dostaję błąd podczas debugowania. Wskazówka polega na uruchomieniu VS 2015 w trybie podwyższonym (tj. Uruchomieniu go jako administrator), co rozwiązuje mój problem (moje obecne środowisko to Windows 10 Pro + VS 2015 Update 3) – jyao