如何使用formcollection向数据库中插入数据

How to insert data into database using formcollection

我正在尝试将数据插入数据库 table。不幸的是,数据没有被插入到数据库中。

控制器:

public class UserController : Controller
{
    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(FormCollection collection)
    {
        try
        {
            using (SqlConnection sqlCon = new SqlConnection(connectionstring))
            {
                sqlCon.Open();
                string query = "INSERT INTO Member (@ID, @Name, @City, @Address) " + 
                               "VALUES (ID, Name, City, Address)";

                SqlCommand sqlcmd = new SqlCommand(query, sqlCon);

                //model get,set method does not access
                sqlcmd.ExecuteNonQuery();
            }

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
}

存储库:

public class UserMasterRepository : IUserMasterRepository
{
    private List<UserMaster> users = new List<UserMaster>();
    private int _nextId = 1;

    public UserMaster Add(UserMaster item)
    {
        if (item == null)
        {
            throw new ArgumentNullException("item");
        }

        item.ID = _nextId++;
        users.Add(item);

        return item;
    }
}

IUserMasterRepository:

public interface IUserMasterRepository
{
    IEnumerable<UserMaster> GetAll();
    UserMaster Get(int id);
    UserMaster Add(UserMaster item);
    bool Update(UserMaster item);
    bool Delete(int id);
}

我该如何解决这个问题?

我相信 SQL 服务器 ,你的 INSERT 声明是错误的 - 试试这个:

string query = "INSERT INTO Member (ID, Name, City, Address) " + 
               "VALUES (@ID, @Name, @City, @Address)";

INSERT INTO 之后的列列表必须列出数据库 table 中定义的 列名称 - 这些是 没有 前导 @

另一方面,VALUES (...) 部分中的参数占位符只是 - 参数 - 并且 它们必须 前导 @名字.

然后必须定义这些参数,并且必须为每个参数提供一个值 .ExecuteNonQuery() 调用之前:

//model get,set method does not access
sqlcmd.Parameters.Add("@ID", SqlDbType.Int).Value = 42;
sqlcmd.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = "Miller";
sqlcmd.Parameters.Add("@City", SqlDbType.VarChar, 100).Value = "London";
sqlcmd.Parameters.Add("@Address", SqlDbType.VarChar, 100).Value = "123 Earl's Court";

sqlcmd.ExecuteNonQuery();

根据@marc_s 的建议,您需要更改内联查询以进行插入,并且在插入值之前您需要从 FormCollection 中获取记录。

我假设您有这样的视图模型。

public class VM
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string City{ get; set; }
    public string Adderess{ get; set; }
}

在操作方法中从 FormCollection 对象中检索输入值:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    try
    {
        using (SqlConnection sqlCon = new SqlConnection(connectionstring))
        {
            sqlCon.Open();
            //model get,set method does not access
            sqlcmd.Parameters.Add("@ID", SqlDbType.Int).Value = collection["ID"];
            sqlcmd.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = collection["Name"];
            sqlcmd.Parameters.Add("@City", SqlDbType.VarChar, 100).Value = collection["City"];
            sqlcmd.Parameters.Add("@Address", SqlDbType.VarChar, 100).Value =collection["Address"];
            ///continue
        }

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}