如何使用表单集合将数据插入数据库



我正在尝试将数据插入数据库表。遗憾的是,数据不会插入到数据库中。

控制器:

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

如何解决此问题?

按照@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; }
}

在操作方法中从表单集合对象检索输入值:

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

我相信对于SQL Server,您的INSERT语句是错误的 - 试试这个:

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

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

另一方面,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();

最新更新