Saya memiliki tugas di ASP.NET MVC dan saya mencoba menulis operasi mentah tanpa Entity Framework, tetapi kodenya tidak berfungsi dengan benar.

Ini kode saya:

List<bookModel> books = new List<bookModel>();

SqlConnection con = new SqlConnection("Data Source=DESKTOP-VKO8311;Initial Catalog=BookStore;Integrated Security=True");

string query = "SELECT * FROM books";

SqlCommand command = new SqlCommand(query, con);

try
{
    con.Open();

    SqlDataReader reader = command.ExecuteReader();

    while (reader.Read())
    {
        books.Add(new bookModel
                      {
                          Title  = reader["Title of book"].ToString(),
                          Author = reader["Author"].ToString(),
                          Price  = reader["Price"].ToString()
                      });
        con.Close();
    }
}
catch (Exception ex)
{
    con.Close();
}

return View(books);

[HttpGet]
public ActionResult NewBook()
{
    ViewBag.Title = "Add New Book";
    return View();
}

[HttpPost]
public ActionResult NewBook(bookModel model)
{
    SqlConnection con = new SqlConnection("Data Source=DESKTOP-VKO8311;Initial Catalog=BookStore;Integrated Security=True");

    string query = "insert into books values(@Ti, @au, @pr)";

    SqlCommand command = new SqlCommand(query, con);

    command.Parameters.Add("@Ti", System.Data.SqlDbType.VarChar);
    command.Parameters["@Ti"].Value = model.Title;
    command.Parameters.Add("@au", System.Data.SqlDbType.VarChar);
    command.Parameters["@au"].Value = model.author;
    command.Parameters.Add("@pr", System.Data.SqlDbType.VarChar);
    command.Parameters["@pr"].Value = model.Price; 

    try
    {
        con.Open();
        command.ExecuteNonQuery();
        MessageBox.Show("insert was successful");
        return RedirectToAction("books");
    }
    catch (Exception ex)
    {
        con.Close();
    }

    return View();
}

books.cshtml tidak menampilkan hasil dari database dan newbook.cshtml juga tidak mengarahkan hasil pembuatan di database.

Mohon bantuannya?

0
constantinos georgiou 11 April 2020, 13:04

1 menjawab

Jawaban Terbaik

Kode Anda perlu refactoring, tetapi masalah terbesar adalah di mana Anda menutup koneksi Anda. Anda tidak melakukannya saat Anda mengulangi pembaca data. Juga, tutup koneksi dari penangan pengecualian Anda. Anda lebih baik melampirkannya di blok using.

while (reader.Read())
{
    books.Add(new bookModel
    {
        Title  = reader["Title of book"].ToString(),
        Author = reader["Author"].ToString(),
        Price  = reader["Price"].ToString()
    });

}
0
Charles Owen 12 April 2020, 04:25