如何使用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();
}
}
我正在尝试将数据插入数据库 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();
}
}