Я пытаюсь вставить данные в таблицу базы данных. К сожалению, данные не вставляются в базу данных.
Контроллер:
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 должны быть указаны имена столбцов, как определено в таблице базы данных, и это без ведущий @.
С другой стороны, заполнители параметров в разделе 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();
}
}
я изменил код, но все еще получаю ту же проблему, могу ли я изменить что-либо в классе репозитория
вам не нужно ничего менять в шаблоне, просто введите значение жесткого кода в свой параметр и проверьте, вставлено ли оно или нет?
так вы лучше поймете, в чем именно заключается проблема
я отладил код Контроллер работает нормально, но не запускает классы репозитория, как я могу решить эту проблему, а также записывать, а также не вставлять в базу данных
я изменил код, но почему он не вставляет запись в базу данных.