Как вставить данные в таблицу из модели MVC? - PullRequest
0 голосов
/ 02 апреля 2010

У меня есть данные, поступающие в мою модель, как мне настроить вставку данных в таблицу?

    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }

    public Info()
    {
        using (SqlConnection connect = new SqlConnection(connections))
        {
            string query = "Insert Into Personnel_Data (Name, StreetAddress, City, State, Zip, HomePhone, WorkPhone)" +
                "Values('" + Name + "','" + Address + "','" + City + "','" + State + "','" + Zip + "','" + ContactHPhone + "','" + ContactWPhone + "')";

            SqlCommand command = new SqlCommand(query, connect);
            connect.Open();
            command.ExecuteNonQuery();
        }
    }

Имя, адрес, город и т. Д. Не заданы при выполнении запроса. Как мне это настроить?

Ответы [ 4 ]

2 голосов
/ 02 апреля 2010

Добавьте параметры в ваш конструктор или выполните вставку из неконструктивного метода после вызова конструктора и установки свойств.

Код, который вы предоставили, уязвим для внедрения SQL-кода, поэтому вам также необходимо это исправить.

Кроме того, с точки зрения терминологии вызов вставки в запрос вводит в заблуждение. Запрос - это выбор, а это не то, что вы делаете.

Вам не нужна хранимая процедура или ORM, поэтому вы можете использовать ADO.NET, так как вы его используете. Вы можете обнаружить, что использование ORM уменьшает количество повторяющихся кодов, подверженных ошибкам, которые вы должны писать и обслуживать, но есть и недостатки использования ORM.

1 голос
/ 02 апреля 2010

Вам нужно инициализировать ваши свойства в конструкторе, прежде чем использовать его:

public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string ContactHPhone { get;set; }
public string ContactWPhone { get;set; }

public Info(string name, string address, string city, string state, string zip, string contactHPhone, string contactWPhone)
{
    Name = name;
    Address = address;
    City = city;
    State = state;
    Zip = zip;
    ContactHPhone = contactHPhone;
    ContactWPhone = contactWPhone;
    using (SqlConnection connect = new SqlConnection(connections))
    {
        string query = "Insert Into Personnel_Data (Name, StreetAddress, City, State, Zip, HomePhone, WorkPhone)" +
            "Values('" + Name + "','" + Address + "','" + City + "','" + State + "','" + Zip + "','" + ContactHPhone + "','" + ContactWPhone + "')";

        SqlCommand command = new SqlCommand(query, connect);
        connect.Open();
        command.ExecuteNonQuery();
    }
}

Отредактировано:

Лучший способ - использовать параметры в строке SQL:

using (SqlConnection connect = new SqlConnection(connections))
{
    string query = "Insert Into Personnel_Data (Name, StreetAddress, City, State, Zip, HomePhone, WorkPhone) Values(@name, @address, @city, @state, @zip, @contactHPhone, @contactWPhone)";

    SqlCommand command = new SqlCommand(query, connect);
    command.Parameters.AddWithValue("name", Name);
    command.Parameters.AddWithValue("address", Address);
    command.Parameters.AddWithValue("city", City);
    command.Parameters.AddWithValue("state", State);
    command.Parameters.AddWithValue("zip", Zip);
    command.Parameters.AddWithValue("contactHPhone", ContactHPhone);
    command.Parameters.AddWithValue("contactWPhone", ContactWPhone);
    connect.Open();
    command.ExecuteNonQuery();
}
0 голосов
/ 02 апреля 2010

Это похоже на код объекта, который вы пытаетесь сохранить (ваша Модель). Код для получения обновления и фиксации записи будет идти в вашем контроллере.Пожалуйста, отправьте код с вашего контроллера.

Кроме того, я настоятельно рекомендую вам рассмотреть ORM, такой как LINQ to SQL или LINQ to Entities.По крайней мере, создайте хранимую процедуру - не отправляйте необработанный SQL в базу данных.

0 голосов
/ 02 апреля 2010

Прежде всего используйте параметризованные запросы , если вы собираетесь придерживаться своего нынешнего подхода

Я предлагаю выбрать ORM , как NHibernate , который значительно облегчит вам жизнь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...