Хорошо, я на самом деле не предоставил ответ - еще несколько советов, которые, надеюсь, подтолкнут вас не только в этом проекте, но и в целом как программист.
На небольшом дополнительном примечании, прежде чем я продолжу, теги «множественный» и «логика» являются особым выбором для вашего вопроса
Относительно BrowseIngredients_Load:
Здесь вы используете SqlConnection, который реализует IDisposable интерфейс.Лучшая практика (и это очень рекомендуется) - всегда использовать Использование шаблона блока при работе с объектами, реализующими IDispoable (по крайней мере, где это возможно).
using (con = New SqlConnection(connectionString)){
' use the connection within these bracers
}
' because you used this pattern, the object is disposed correctly, memory deallocated, etc
Следующий битСовет мог бы взглянуть на Linq to SQL (для краткости L2S).L2S является объектно-реляционным картографом .Звучит сложно, но в основном означает, что он отвечает за сопоставление ваших объектов базы данных (таблиц, представлений и т. Д.) С вашей моделью предметной области (классы, Strucutres и т. Д.).Возможно, это звучит немного сложнее, но, поверьте мне, ознакомьтесь с этими простыми уроками, и вам понравится:
Статья CodeProject, включая исходный код
Часть 1 блога / учебных пособий Скотта Гу
доброе старое MSDN Введение в L2S
Примечание: доступно множество ORM, и сама Microsoftпредоставляет Entity Framework, но L2S должен быть легким в освоении и вооружить вас достаточными знаниями, чтобы в будущем сделать осознанный выбор в пользу альтернатив ORM
Если вы пойдете с L2S (который когда-то вы провели паруЧерез несколько часов вы обнаружите, что будете использовать переписывание T-SQL в своем коде каждый раз. Это решает пару других проблем, таких как введение SQL-инъекция , которую Linq сделаетсправиться за вас.
Это также решит вашу общую проблему или почти.С Linq to SQL отображение данных Recipes было бы простым, потому что они были бы просто свойствами класса.
txtIngredients.Text = myAutoGeneratedLinqRecipe.Ingredients;
Я надеюсь, что это поможет вам продвинуться вперед, я уверен, что кто-то еще дасткод для выполнения упражнения без введения новых шаблонов кода и технологий ^^
РЕДАКТИРОВАТЬ: быстрый пример использования блока, чтобы вы поняли:
Private void BrowseIngredients_Load(object sender, EventArgs e)
{
string connStr = "Data Source=.....etc";
using (con = New SqlConnection(connStr))
{
con.Open
' get your data here - if you were losing Linq, you wouldnt have to worry
' about connections or Sql at all ;-)
con.Close
} ' this ensures that the connection is disposed correctly, even if for example
' you throw an exception inside the block which isn't caught
}