Procedury skladowane

0

napisałem w c# procedury składowane do SQL (SQL Server)
Łącze się przez Data.SqlClient, problem mój polega na tym ze tylko jedna z tych procedur łączy się z BaząDanych i działa poprawnie (w skrócie na podstawie id wypisuje wszystkie informacje), technicznie:

 DataTable tab;
            SqlCommand com = new SqlCommand("exec dbo.usp_Search '" + index + "';", _upShow);
            _upShowread = com.ExecuteReader();

            tab = new DataTable("temp");
            tab.Load(_upShowread);

Wiec, to działa ale mam tez kolejna procedurę która odpowiada za dodawanie nowych pozycji do tabeli w bazie danych (procedura jest na pewno poprawna bo czysto na SQL Server działa dobrze)
Byc może robię jakiś bład przy wywołaniu:

 string index = "aaa";
            SqlCommand com = new SqlCommand("exec dbo.usp_test '" + index + "';", connect);
            com.CommandType = CommandType.StoredProcedure;
            com.ExecuteReader();

[Pokazuje wywołanie do uproszczonej wersji dodającej tylko do jednego wiersza, bo daje takie same komunikaty jak pełna funkcja]

takie wywołanie rzuca mi wyjątek:
Could not find stored procedure 'exec dbo.usp_test 'aaa''.

Nie za bardzo wiem oco chodzi i dlaczego pierwsza procedura działa a następne nie (różnią się tym ze 1 zwraca tablice wynikowa a te następne tylko wysyłają do bazy)
Bardzo proszę o nakierowanie gdzie robię bład

0

W drugim przypadku ustawiasz:

 
com.CommandType = CommandType.StoredProcedure;

czego nie robisz w pierwszym. Przy takim CommandType podajesz tylko nazwę procedury, nie całe polecenie, które je wywołuje.

0

jesli dobrze zrozumiałem to chodzi o:

 
SqlCommand com = new SqlCommand("dbo.usp_test '" + index + "';",connect);
com.CommandType = CommandType.StoredProcedure;

lub

 
SqlCommand com = new SqlCommand("exec dbo.usp_test '" + index + "';", connect);

Niestety jeśli tak to obydwa nie działaja wracając dokładnie ten sam komunikat

0

hmm, to może jeszcze kwestia zamiany ExecuteReader na ExecuteNonQuery

0

testowałem i to; totalnie niezmienia sie komunikat
i gdyby nie to ze wiem ze wcześniej została wywołana metoda inicjująca f składowe oraz to ze jedna taka działa to sądził bym ze się ona w ogolę nie utworzyła...

0

Dla jasnosci feralna procedura:

 
private void proceduratest()
        {
            SqlCommand command2 = new SqlCommand("if OBJECT_ID('dbo.usp_test') IS NOT NULL" +
                                                    "DROP PROC dbo.usp_test;" +
                                                "GO" +
                                                "CREATE PROC dbo.usp_test" +
                                                    "@CustomerID varchar(5)," +
                                                 
                                                "AS" +
                                                "BEGIN" +
                                                    "INSERT INTO dbo.Customers(CustomerID)" +
                                                    "VALUES (@CustomerID)" +
                                                "END" +
                                                "GO", connect);
            command2.CommandType = CommandType.StoredProcedure;
        }

Wiem ze ten drop jest bez sensu, i go usunę ale dopiero jak wszystko będzie działać :)
connection jest otwarte i zamkniete bardziej globalnie w metodzie obsługującej cały pakiet tworzenia f

// Błąd był rzeczywiście stricte z komunikatu, a wiec nie chodziło o wywołanie (w kazdym razie w tym wyjątku) tylko nie tworzyło procedur (ta pierwsza działała ponieważ została zapisana na SQL Server w trakcie jej pierwszego testowania)

// Podepnę 2 pytanie: w jaki sposób wysyłać złozone zapytania do serwera takie jak ww?

// Pytanie nie aktualne, temat do zamknięcia
Dzięki Hrypa za pomoc :)

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