Member 13765884 Ответов: 1

Вставка информации в базу данных из C#


Я пытаюсь написать код так, чтобы, если orderID совпадает с orderID в базе данных, программное обеспечение выбирает этот набор данных и изменяет "статус" этой строки данных на "в процессе". Это немного сбивает с толку, но может ли кто - нибудь помочь? Я новичок в C'#


if (result == DialogResult.Yes)
{
    OleDbDataAdapter da = new OleDbDataAdapter("Select * from [Customer Orders] Where [Order ID] = '" + PrdtID.Text + "'", MAcon);
    DataTable dtbl = new DataTable();
    da.Fill(dtbl);

    if (dtbl.Rows.Count == 1)
    {
        OleDbCommand cmd = new OleDbCommand("INSERT * into [Customer Orders]  ([Order Status])  VALUES (@[Order Status])", MAcon);
        cmd.Parameters.AddWithValue("@[Order Status]", Location.Text);

    MAcon.Open();
    cmd.ExecuteNonQuery();
    MAcon.Close();

    }


Что я уже пробовал:

if (result == DialogResult.Yes)
{
    OleDbDataAdapter da = new OleDbDataAdapter("Select * from [Customer Orders] Where [Order ID] = '" + PrdtID.Text + "'", MAcon);
    DataTable dtbl = new DataTable();
    da.Fill(dtbl);

    if (dtbl.Rows.Count == 1)
    {
        OleDbCommand cmd = new OleDbCommand("INSERT * into [Customer Orders]  ([Order Status])  VALUES (@[Order Status])", MAcon);
        cmd.Parameters.AddWithValue("@[Order Status]", Location.Text);

    MAcon.Open();
    cmd.ExecuteNonQuery();
    MAcon.Close();

    }

1 Ответов

Рейтинг:
0

Wendelius

Одна из проблем заключается в том, что вы объединяете данные из текстового поля в SQL-запрос. Это оставляет вас открытым для SQL-инъекций и проблем преобразования. Для получения дополнительной информации см. SQL-инъекция - Википедия[^]

Вы использовали параметры в своем INSERT оператор таким образом, вы должны сделать то же самое с select.

Еще одна проблема заключается в том, что INSERT синтаксис не содержит звездочки. Так что это просто

INSERT INTO TableName (column, column, ...) VALUES (value, value, ...).

Для получения дополнительных примеров взгляните на Правильное выполнение операций с базой данных[^]
Несмотря на то, что примеры используют SqlClient, идея та же самая с OleDb... классами.


Member 13765884

когда вы говорите: "еще одна проблема заключается в том, что синтаксис вставки не содержит звездочки. Так что это просто " вы имеете в виду, что у него есть звездочка? потому что он есть.

Wendelius

Если вы сравните инструкцию INSERT в своем коде и пример, который я написал, Вы заметите разницу.

Другими словами пока у вас есть

...new OleDbCommand("вставить * в [...

Так и должно быть

...new OleDbCommand("вставить в [...