Metoda z Parametrami. Deklaracja zmiennej

0

Must declare the table variable "@Tabela"
Wyskakuje mi ten exception. Próbowałem ze zmienna globalną i this. ale nadal to samo.
Działało mi już bez parametrów. Proszę o podpowiedź.





 private void Delete(DataGridView dgv,String tabela,string nazwakolumny)
        {
            

            try
            {
                sqlcon.Open();
                dgv.Rows.RemoveAt(dgv.CurrentRow.Index);
                int i = dataZlecenia.CurrentRow.Index;
                MessageBox.Show(tabela, nazwakolumny);
                SqlCommand delcmd = sqlcon.CreateCommand();
                delcmd.CommandType = CommandType.Text;
                delcmd.CommandText = "DELETE FROM @Tabela    WHERE @NazwaKolumny = @NazwaFirmy";
                SqlParameter inparam2 = new SqlParameter("@NazwaFirmy", SqlDbType.VarChar);
                inparam2.Direction = ParameterDirection.Input;
                inparam2.Value = ((dgv.Rows[i].Cells[0]).Value).ToString();
                delcmd.Parameters.Add(inparam2);
            SqlParameter tabela1 = new SqlParameter("@Tabela", SqlDbType.VarChar);
            tabela1.Value = tabela;
            delcmd.Parameters.Add(tabela1);
            //delcmd.Parameters.Add("@Tabela", SqlDbType.NVarChar).Value=tabela;
                delcmd.Parameters.Add("@NazwaKolumny", SqlDbType.NVarChar).Value = nazwakolumny;
                delcmd.ExecuteNonQuery();
                MessageBox.Show("Poprawnie usunięto", "Potwierdzenie");
                sqlcon.Close();
        }
            catch(System.Data.SqlClient.SqlException exc)
            {
                MessageBox.Show(exc.Message,"Coś nie gra");
            }


}

Wiem że nie powinienem usuwać po nazwie ale nie mogę wyciągnąć ID_Zlecenia.

0

Użyj Dappera, chyba że jesteś masochistą i lubisz się biczować czystym ADO.

0

Jeszcze dwa dni temu katowałem się łączeniem stringów więc i tak jest progres.
Chciałbym jednak ADO najpierw ogarnąć, żeby nie mieć takich problemów.
A Drapperem zajmę się jak już skończę apke. Na razie to jest priorytetem.

Jak zamienie w
delcmd.CommandText = "DELETE FROM @Tabela WHERE @NazwaKolumny = @NazwaFirmy";
@Tabela na nazwę encji, to działa.
A tak samo dodałem @NazwaKolumny.
Więc naprawdę nie wiem o co chodzi...

0

Spróbuj opakować tą zmienną w notację nazw tabel (zakładam, że korzystasz z MS SQL), czyli zmienna będzie: [@Tabela], jeżeli korzystasz z innej bazy użyj znaku ` zamiast nawiasów.

0

jak opakuje w [] to chyba jako nazwę tabeli traktuje bo wyskakuje. Invalid object name @Tabela

2

Nie można parametryzować nazw tabel, procedur, triggerów i innych obiektów bazy danych. Tylko kolumny i zmienne mogą być parametryzowane.

0

To jest jakiś inny sposób aby nie przekopiowywać i zmieniać danych dla każdego grida osobno?
Można by by if wrzucić z prostymi warunkami zależnymi od nazwy kolumny i przypisującym nazwę encji.Ale czy to ma sens?

A i wiesz to z książki, dokumentacji? bo Exception informacji takiej nie podał...
Nie żebym to podważał, zależy mi na źródle.

0
Newbee napisał(a):

To jest jakiś inny sposób aby nie przekopiowywać i zmieniać danych dla każdego grida osobno?

Po prostu skleić treść zapytania. Treść - nie parametry.

Można by by if wrzucić z prostymi warunkami zależnymi od nazwy kolumny i przypisującym nazwę encji.Ale czy to ma sens?

Nie sądzę.

A i wiesz to z książki, dokumentacji? bo Exception informacji takiej nie podał...
Nie żebym to podważał, zależy mi na źródle.

https://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.110).aspx

0

dziękuje bardzo

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