Синтаксична грешка в Insert Into Statement C# OleDb

Създавам формуляр за поръчка с помощта на C# OleDb и имам проблем с опита да поставя стойността на размера от комбинирано поле във формуляра за поръчка в базата данни. Кодът, който причинява проблема, е по-долу.

 private void btn_Save_Click(object sender, EventArgs e)
    {
        try
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "insert into OrderForm(Size) values ('" + sizeBox.Text + "')";
            command.ExecuteNonQuery();
            MessageBox.Show("Order Inserted into Database");
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error " + ex);
        }
    }

Това е единствената част от кода, която ми създава проблем, и аз го сравних с другите си редове от код на commandText, които съм коментирал, за да се уверя, че синтаксисът е правилен и ми изглежда добре. Също така проверих, за да се уверя, че името на полето, посочено в кода на commandText, и полето в действителната база данни са правилни и е така. Всяка помощ по този въпрос ще бъде високо оценена. наздраве

Редактиране: Синтактична грешка, която кодът ми дава Синтактична грешка


person user3158314    schedule 19.07.2015    source източник
comment
Възможно ли е размерът да е от числов тип (напр. цяло число)? Ако е така - нямате нужда от единични кавички в заявката си   -  person dotnetom    schedule 19.07.2015
comment
Какъв е типът данни на Size и каква е стойността на sizeBox.Text?   -  person Patrick Hofman    schedule 19.07.2015
comment
Също така НИКОГА не свързвайте заявка, както току-що направихте, защото сте уязвими към атака с инжектиране на SQL   -  person dotnetom    schedule 19.07.2015
comment
Какво е съобщението за изключение? Какво е command.CommandText?   -  person CodeCaster    schedule 19.07.2015
comment
Прочетох го 3 пъти, но не мога да разбера какъв проблем причинява? Просто казваш, че ми създава проблем. Както и да е, може да е дубликат на stackoverflow.com/questions/10941284/?   -  person Erki M.    schedule 19.07.2015
comment
типът данни на полето за размер във формуляра е комбинирано поле, докато типът данни за размер в базата данни е текст.   -  person user3158314    schedule 19.07.2015
comment
Освен това имайте предвид, че ако вашият ExecuteNonQuery хвърли изключение, връзката ви ще остане отворена. Помислете за преместването му в finally блок или използвайте оператора using   -  person Erki M.    schedule 19.07.2015
comment
@Erki M. Току-що редактирах кода, за да затворя връзката, ако бъде уловено изключение. Наздраве :)   -  person user3158314    schedule 19.07.2015


Отговори (1)


РАЗМЕР е запазена дума. Не можете да го използвате като име на поле, освен ако не го затворите в квадратни скоби, така че вашият код трябва да бъде написан като

private void btn_Save_Click(object sender, EventArgs e)
{
    try
    {
        string sqlText = "insert into OrderForm([Size]) values (?)";
        using(OleDbConnection connection = new OleDbConnection(.....))
        using(OleDbCommand command = new OleDbCommand(sqlText, connection))
        {
            connection.Open();
            command.Parameters.Add("@p1", OleDbType.VarWChar).Value = sizeBox.Text;
            int rowsAdded = command.ExecuteNonQuery();
            if(rowsAdded > 0) 
                MessageBox.Show("Order Inserted into Database");
            else
                MessageBox.Show("No Order added to the Database");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error " + ex.Message);
    }
}

Част от затварянето на РАЗМЕРА в квадратни скоби Промених няколко неща.

Първо всеки път, когато стигнете до база данни, използвате израза за използване около връзката и друг обект за еднократна употреба. Това избягва изтичане на памет и скъпо използване на ресурси, когато не са необходими.

Второ заявката е параметризирана, по този начин е много по-ясно какво правите, избягвайте sql инжекции и проблеми с правилното анализиране на стойностите.

person Steve    schedule 19.07.2015