Błąd składowy SQL w C#

0

Cześć
Piszę program w c#, z wykorzystaniem bazy w .accbd. Wyskakuje mi błąd, kiedy chce usunąć wiersz. Błąd to : Błąd składowy brak operatora w wyrażeniu kwerendy 'users WHERE(Identyfikator = '7')'.

string sql = "Delete users WHERE Identyfikator = ' " + tbident.Text + " ' ";

Proszę o pomoc

0
Delete from users WHERE Identyfikator = '7'
0

Zrobiłem coś takiego, ale dalej jest błąd:
"Delete users WHERE Identyfikator = tbident.Text"

0

@przonak007:
brakuje Ci from
składnia jest następująca

delete from table where .....
0

Teraz wyskakuje "Nie dpowiedni typ danych w wyrażeniu kryterium"
a zrobiłem string sql = "DELETE FROM users WHERE Identyfikator = ' " + tbident.Text + " ' ";

0

zrób porządek z apostrofam w komendzie
a najlepiej podaj co siedzi w stringu "sql"

EDT
masz apostrof zamykający stringa a brakuje tego otwierającego

0

To jest mój kod

 string sql = "DELETE FROM users where Identyfikator = '" + tbident.Text + "' ";
 OleDbConnection con = new OleDbConnection(connectingstring);
            OleDbCommand cmd = new OleDbCommand(sql, con);
            OleDbDataReader myreader;
            try
            {
                con.Open();
                myreader = cmd.ExecuteReader();
                MessageBox.Show("usunięto");

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
0

zauważ że w pierwszej linii brakuje apostrofu przed tbident.text
wyrzuć sobie w messagebox stringa sql, wtedy zobaczysz że po znaku = brak apostrofu

0

jak brakuje, przecież tbident.Text jest między dwoma apostrofami i dwoma cudzysłowami

0

rzeczywiście
odpal program krokowo pod debugerem i zobacz co siedzi w zmiennej sql

EDT
chyba domyślam się
jakiego typu jest pole Identyfikator ??
w klauzuli where przyrównujesz je do stringa a może trzeba by do int'a
niektóre bazy radzą sobie z taką komendą

0

Przechwytywanie.PNG
to jest komunikat z messagebox .show
wygląda dobrze

0

Przechwytywanie.PNG

kolego, opanuj środowisko w którym pracujesz
pytałem o to co masz w zmiennej sql

0

Typ danych to autonumerowanie

0

czyli INT, a w warunku masz stringa

DELETE FROM users WHERE Identyfikator = 7
0

czyli cały string sql = "DELETE FROM users where Identyfikator = '" + tbident.Text + "' "; mam przerobić na int?

0

Musisz tak zmienić kod aby w kwerendzie, po znaku =, była liczba bez apostrofów .
Podałem gotowy przykład.
Wywal niepotrzebne apostrofy i powinno zadziałać.
Problemem może być sytuacja kiedy w tbident.Text będzie string nie będący znakową reprezantacją wartości typu int

0

Zrobiłem:
string s = tbident.Text;
int ident = int.Parse(s);

          string sql = "DELETE FROM users where Identyfikator = '"+ident+"'";

Dalej jest ten sam problem

0

nie znam C#
napisz co masz z zmiennej sql, jej WARTOŚĆ, a nie instrukcję przypisania

1

Powineneś przekazywać dane przez parametr, a nie tak jak teraz robisz czyli coś takiego

using (var sc = new SqlConnection(ConnectionString))
using (var cmd = sc.CreateCommand())
{
    sc.Open();
    cmd.CommandText = "DELETE FROM excludes WHERE word = @word";
    cmd.Parameters.AddWithValue("@word", word);  
    cmd.ExecuteNonQuery();
}
0

@Kubuś Puchatek:
użycie parametrów bywa lepszym rozwiązaniem, szczególnie w sytuacji wielokrotnego użycia tej samej kwerendy, ale z różną wartością parametru. Tutaj autor wątku chce dynamicznie budować kwerendę

0

Dziękuję za pomoc, już wszystko działa

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