如何在表格中插入数据来自模型MVC?

时间:2010-04-01 20:27:22

标签: c# .net asp.net-mvc

我有数据进入我的模型,如何设置将数据插入表格?

    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();
        }
    }

运行查询时,Name,Address,City等为null。我该如何设置?

4 个答案:

答案 0 :(得分:2)

在构造函数被调用并设置属性后,向构造函数中添加参数或从非构造函数方法执行Insert。

您提供的代码容易受到SQL注入攻击,因此您也需要修复它。

另外,从术语的角度来看,调用插入查询会让人感到困惑。查询是一个选择,这不是你正在做的。

您不需要存储过程或ORM,使用ADO.NET就可以了。您可能会发现使用ORM可以减少必须编写和维护的重复,容易出错的代码量,但使用ORM会有缺点。

答案 1 :(得分:1)

在使用它之前,需要在构造函数中初始化属性:

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();
}

答案 2 :(得分:0)

如果您要坚持现有的方法,首先使用parametrized queries

我的建议是选择ORM NHibernate,这样可以为您轻松解决问题

答案 3 :(得分:0)

这看起来像是您要保留的对象的代码(您的模型。)接收更新并提交记录的代码将进入您的Controller。请从您的控制器发布代码。

另外,我强烈建议您考虑使用LINQ to SQL或LINQ to Entities等ORM。至少创建一个存储过程 - 不要将原始SQL发送到数据库。