Jak wczytać w C# dane zwrócone przez procedurę składowaną SQL?

Jak wczytać w C# dane zwrócone przez procedurę składowaną SQL?
  • Rejestracja: dni
  • Ostatnio: dni
0

Hej, jak w temacie. Chcę w sql managment studio napisać procedurę składowaną która zwróci mi 1 lub 0 w zależności od tego czy w tabeli Customers znajduje rekord o podanym w argumencie procedury kluczu, następnie chcę w c# wydobyć tą informację żeby wiedzieć czy mogę dodać rekord o takim kluczu głównym czy taki już się w bazie znajduje. tak wygląda moja procedura składowana:

Kopiuj
 USE [Northwind]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[SprawdzID]
	@ID nchar(5)
AS
BEGIN
	DECLARE @a AS integer;
	SET NOCOUNT ON;
	IF (SELECT COUNT(CustomerID) from dbo.Customers where CustomerID=@ID) > 0
	SET @a = 1;
	Else SET @a = 0;
	Return @a;
END

A to fragment kodu c# w którym staram się wyciągnąć to co zwróciła procedura:

Kopiuj
 
string command = "exec SprawdzID CustomerID";
SqlCommand cmd = new SqlCommand(command, connection);
object wynik = cmd.ExecuteScalar();

Nie znam prawidłowego sposobu jak to zrobić, to ExecuteScalar to jedna z moich prób. Z góry dziękuję za pomoc i pozdrawiam.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

Ale coś konkretnie nie działa?

  • Rejestracja: dni
  • Ostatnio: dni
0

No oczekiwałem że w polu wynik będę miał wartość 1 lub 2 ale jakbym tego nie wywołał to zawsze jest null.

1 lub 0, pomyłka.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

A już widzę. Nie wiem czemu na początku wydawało mi się to poprawne.

Po pierwsze cmd.CommandType trzeba ustawić na StoredProcedure.
Po drugie przydałoby się jakoś przekazać wartość parametru do tej procedury, czyli cmd.Parameters.Add("@NazwaParametru").Value = wartość;

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki Somekind, poradziłem sobie z tym, ale mam kolejny problem. Tym razem chcę wypisać w programie wszystkie rekordy z tabeli Customers. Jak to zrobić? Czy powinienem w podzapytaniu napisać instrukcje SELECT * ... czy też jakoś zwrócić dane? Nie wiem jak zwrócić wszystkie rekordy z tabeli.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

W zapytaniu piszesz SELECT * , na cmd wołasz ExecuteReader, a potem w pętli poruszasz się po otrzymanym z niej obiekcie SqlDataReader i wołasz Read.
Najlepiej zacząć od jakiegoś kursu, np.: http://csharp-station.com/Tutorial/AdoDotNet/Lesson04

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.