Как вставить данные в базу данных с помощью formcollection - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь вставить данные в таблицу базы данных.К сожалению, данные не вставляются в базу данных.

Контроллер:

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

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

В соответствии с предложением @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();
    }
}
0 голосов
/ 21 мая 2019

Я считаю, что для 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();
...