Вставки всей формы в базе данных MySQL


Пожалуйста, ознакомьтесь с этим.

public int InsertQuery(string Query)
{
    int LastInsertedID = -1;
    MySqlCommand MySqlCmd = new MySqlCommand(Query, this.sqlConn);
    try
    {
        MySqlCmd.ExecuteNonQuery();
        LastInsertedID = int.Parse(MySqlCmd.LastInsertedId.ToString());
    }
    catch (Exception excp)
    {
        Exception myExcp = new Exception("Could not execute INSERT Query.<br />" + Query + "<br /> Error: <br />" + excp.Message, excp);
        throw (myExcp);
    }
    return LastInsertedID;
}

public int AddChannel(NameValueCollection FormValues)
{
    string Keys = string.Join(",",FormValues.AllKeys);

    string Values = string.Join(",", FormValues.AllKeys.Select(key => String.Format("\"{0}\"", HttpContext.Current.Server.HtmlEncode(FormValues[key]))));
    return InsertQuery("INSERT INTO channels (" + Keys + ") VALUES (" + Values + ");");
}


1020
3
задан 6 августа 2011 в 09:08 Источник Поделиться
Комментарии
2 ответа

Не принимайте ярлыки. Построить правильную Insert с помощью параметризованного запроса и проверки каждой из форм ввода, что они также соответствующего типа (т. е. не посылает строку в целочисленное поле).

Делаем это для сохранения целостности ваших данных, как от неправильной типов и от вредоносных (или даже непредвиденные атаки).

Увидеть этот и другие вопросы о поэтому для построения правильного параметризованные запросы с MySQL.

Более того, вы не хотите, чтобы ваш класс, предложения с данными вставками также взаимодействовать с пользовательским интерфейсом. Эти проблемы должны быть разделены. Отделить код пользовательского интерфейса от бизнес-логики кода из кода доступа к данным. Не позволяйте эти вещи смешиваются, потому что пользовательский интерфейс может измениться, ваша логика может измениться, и твоя стратегия данные могут меняться, и они могут самостоятельно менять.

6
ответ дан 6 августа 2011 в 11:08 Источник Поделиться

Как говорит Энтони, построить правильный уровень доступа к данным.
Никогда не построить SQL путем конкатенации строк.

Если вы уверены, что не хотите heavinesss, как правило, ассоциируется с использованием или картографа, такие как Entity Framework или NHibernate на, взгляните на щеголеватого микро ОРМ. Это просто один файл, который будет добавлен в проект, - это невероятно быстро и просто. Смотрите здесь о том, как вставить данные.

С помощью класса, а не namevaluecollection, которыйвы также сделать ваши запросы безопаснее.

1
ответ дан 8 августа 2011 в 01:08 Источник Поделиться