Wywołanie procedury MSSQL z C#

0

Witam,
chce wywyołac procedure z C#, która zmienia zmienne które są zadeklarowane przed wywołaniem procedury;

mam cos takiego:

string st = " declare tmp1 int, tmp2 int exec tmp1= procedura tmp2";
            SqlCommand com = new SqlCommand(st, connection);
            com.ExecuteNonQuery();  //to działa 
            string st2 = " SELECT tmp1, tmp2";
            com = new SqlCommand(st2, connection);
            DataTable table =  com.ExecuteReader(); // tu wyskakuje blad ze nie zadeklarowano zmiennej tmp1
            DataRow row = table.Rows[0];
            int tmp1 = row[0];
            int tmp2 = row[1];
 

chce wyswietlic zmienne tmp1 i tmp2 pobrane z sql, ale nie wiem jak to zrobic

1

Nie wydaje mi się żeby pierwsze polecenie wywołało się bez błędów - odpalałeś to w Management Studio? Zmienne deklaruje się z "@" (@tmp1, @tmp2).

Druga sprawa to po wykonaniu pierwszego zapytania zmienne już nie istnieją, zadeklarowałeś je w pierwszym skrypcie i tam możesz ich używać. Możesz skleić oba zapytania (tzn w jednym wywołaniu wykonać procedurę i od razu pobrać zmienne wynikowe). Jak chcesz przechować zmienne dłużej to musiałbyś chyba użyć tabel tymczasowych.

0

Udało mi się wywołać procedurę, ale teraz mam problem z wyciągnięciem wartości jaką zwraca :/ czy może ktoś wie jak to można zrobić?
Ja próbowałem przez executescalar ale nic mi tam nie zwrociło

0

Ale Ty chcesz dane z bazy pobrać? Bo jeśli tak, to nie ma sensu używanie ExecuteScalar.

0

mam procedure w bazie ktora zwraca 1 albo 0 w zaleznosci od tego czy sie wykonała i w programie C# wykonuje odpowiednio nastepne kroki

1

Jak rozumiem procedura pobiera 1 parametr, na jego podstawie oblicza/pobiera wartość(1) zwracaną, np:

CREATE PROCEDURE [PROCEDURA] 
	-- Add the parameters for the stored procedure here
	@Parametr1 int
AS
BEGIN
	DECLARE @PARAMETR2 int
	SET @PARAMETR2 = @Parametr1 + 1
	
	RETURN @Parametr1
END
GO
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
            command.CommandText = "PROCEDURA";
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("Parametr1", 1);
            System.Data.SqlClient.SqlParameter returnValue = new System.Data.SqlClient.SqlParameter();
            returnValue.ParameterName = "PARAMETR2";
            returnValue.Direction = ParameterDirection.ReturnValue;

            command.ExecuteNonQuery(); 
0

no i walnąłem się w sql. Ma być

RETURN @PARAMETR2

0

a wartość zwrócona jest w

int wartosc = (int)returnValue.Value 

Czy moderator działu mógłby to posklejać w jeden post? Jestem ostatnio jakiś rozkojarzony.

1 użytkowników online, w tym zalogowanych: 0, gości: 1