如何从我的 PostgreSQL 数据库中检索数据? WPF/C#
How can I retrieve data from my PostgreSQL database? WPF/C#
作为参考,我是 C#/WPF/PostgreSQL 的新手,我正在尝试创建一个项目进行练习,但是我遇到了一些障碍。我早些时候发现了这个并尝试使用我自己的代码跟随答案(我知道它不是一对一):Retrieving data from database in WPF Desktop application 但它在我的情况下不起作用。
我正在创建一个简单的食谱应用程序,用户可以在其中创建食谱(例如,输入标题、步骤、他们需要的东西等)并且在主屏幕上,他们可以看到 link 保存到已保存的食谱中,单击后会将它们带到要显示的食谱屏幕。我正在为我的数据库使用 PostgreSQL,在用户提交所有必要信息后,我确实看到了正确的信息,我只需要检索它并将其放入数据网格可能吗?除非有比数据网格更好的方法。
无论如何,我计划将它显示为仅包含食谱标题的列表,用户可以在其中单击它并加载页面,但如果是的话,我可以下次再解决这个问题超出我的问题范围。
这是我要实现的目标的直观想法:
这是我在创建屏幕中找到的提交按钮的代码(如果有帮助的话),但是我不知道如何实际检索该数据然后将其显示在我的主屏幕上。
private static NpgsqlConnection GetConnection()
{
return new NpgsqlConnection(@"Server=localhost;Port=5432;User Id=postgres;Password=123;Database=RecipeProj;");
}
private void SubmitButton_Click(object sender, RoutedEventArgs e)
{
Recipe recipe = new Recipe();
recipe.Title = TitleBox.Text;
recipe.Step1 = StepBox1.Text;
recipe.Step2 = StepBox2.Text;
recipe.Step3 = StepBox3.Text;
recipe.Step4 = StepBox4.Text;
recipe.Step5 = StepBox5.Text;
recipe.Step6 = StepBox6.Text;
recipe.Ingredients = IngredientBox.Text;
recipe.Tools = ToolBox.Text;
recipe.Notes = NoteBox.Text;
void InsertRecord()
{
using (NpgsqlConnection con = GetConnection())
{
string query = @"insert into public.Recipes(Title, Ingredients, Tools, Notes, StepOne, StepTwo, StepThree, StepFour, StepFive, StepSix)
values(@Title, @Ingredients, @Tools, @Notes, @StepOne, @StepTwo, @StepThree, @StepFour, @StepFive, @StepSix)";
NpgsqlCommand cmd = new NpgsqlCommand(query, con);
cmd.Parameters.AddWithValue("@Title", recipe.Title);
cmd.Parameters.AddWithValue("@Ingredients", recipe.Ingredients);
cmd.Parameters.AddWithValue("@Tools", recipe.Tools);
cmd.Parameters.AddWithValue("@Notes", recipe.Notes);
cmd.Parameters.AddWithValue("@StepOne", recipe.Step1);
cmd.Parameters.AddWithValue("@StepTwo", recipe.Step2);
cmd.Parameters.AddWithValue("@StepThree", recipe.Step3);
cmd.Parameters.AddWithValue("@StepFour", recipe.Step4);
cmd.Parameters.AddWithValue("@StepFive", recipe.Step5);
cmd.Parameters.AddWithValue("@StepSix", recipe.Step6);
con.Open();
int n = cmd.ExecuteNonQuery();
if (n == 1)
{
MessageBox.Show("Record Inserted");
TitleBox.Text = IngredientBox.Text = ToolBox.Text = NoteBox.Text = StepBox1.Text = StepBox2.Text = StepBox3.Text = StepBox4.Text = StepBox5.Text = StepBox6.Text = null;
}
con.Close();
}
}
InsertRecord();
}
string query = @"select * from Recipes";
NpgsqlCommand cmd = new NpgsqlCommand(query, con);
con.Open();
var reader = cmd.ExecuteReader();
var recipes = new List<Recipe>();
while(reader.Read()){
//Recipe is just a POCO that represents an entire
//row inside your Recipes table.
var recipe = new Recipe(){
Title = reader.GetString(reader.GetOrdinal("Title")),
//So on and so forth.
//...
};
recipes.Add(recipe);
}
con.Close();
您可以使用完全相同的查询来填写 List
标题和 DataGrid
显示食谱的所有内容。
作为参考,我是 C#/WPF/PostgreSQL 的新手,我正在尝试创建一个项目进行练习,但是我遇到了一些障碍。我早些时候发现了这个并尝试使用我自己的代码跟随答案(我知道它不是一对一):Retrieving data from database in WPF Desktop application 但它在我的情况下不起作用。
我正在创建一个简单的食谱应用程序,用户可以在其中创建食谱(例如,输入标题、步骤、他们需要的东西等)并且在主屏幕上,他们可以看到 link 保存到已保存的食谱中,单击后会将它们带到要显示的食谱屏幕。我正在为我的数据库使用 PostgreSQL,在用户提交所有必要信息后,我确实看到了正确的信息,我只需要检索它并将其放入数据网格可能吗?除非有比数据网格更好的方法。
无论如何,我计划将它显示为仅包含食谱标题的列表,用户可以在其中单击它并加载页面,但如果是的话,我可以下次再解决这个问题超出我的问题范围。
这是我要实现的目标的直观想法:
这是我在创建屏幕中找到的提交按钮的代码(如果有帮助的话),但是我不知道如何实际检索该数据然后将其显示在我的主屏幕上。
private static NpgsqlConnection GetConnection()
{
return new NpgsqlConnection(@"Server=localhost;Port=5432;User Id=postgres;Password=123;Database=RecipeProj;");
}
private void SubmitButton_Click(object sender, RoutedEventArgs e)
{
Recipe recipe = new Recipe();
recipe.Title = TitleBox.Text;
recipe.Step1 = StepBox1.Text;
recipe.Step2 = StepBox2.Text;
recipe.Step3 = StepBox3.Text;
recipe.Step4 = StepBox4.Text;
recipe.Step5 = StepBox5.Text;
recipe.Step6 = StepBox6.Text;
recipe.Ingredients = IngredientBox.Text;
recipe.Tools = ToolBox.Text;
recipe.Notes = NoteBox.Text;
void InsertRecord()
{
using (NpgsqlConnection con = GetConnection())
{
string query = @"insert into public.Recipes(Title, Ingredients, Tools, Notes, StepOne, StepTwo, StepThree, StepFour, StepFive, StepSix)
values(@Title, @Ingredients, @Tools, @Notes, @StepOne, @StepTwo, @StepThree, @StepFour, @StepFive, @StepSix)";
NpgsqlCommand cmd = new NpgsqlCommand(query, con);
cmd.Parameters.AddWithValue("@Title", recipe.Title);
cmd.Parameters.AddWithValue("@Ingredients", recipe.Ingredients);
cmd.Parameters.AddWithValue("@Tools", recipe.Tools);
cmd.Parameters.AddWithValue("@Notes", recipe.Notes);
cmd.Parameters.AddWithValue("@StepOne", recipe.Step1);
cmd.Parameters.AddWithValue("@StepTwo", recipe.Step2);
cmd.Parameters.AddWithValue("@StepThree", recipe.Step3);
cmd.Parameters.AddWithValue("@StepFour", recipe.Step4);
cmd.Parameters.AddWithValue("@StepFive", recipe.Step5);
cmd.Parameters.AddWithValue("@StepSix", recipe.Step6);
con.Open();
int n = cmd.ExecuteNonQuery();
if (n == 1)
{
MessageBox.Show("Record Inserted");
TitleBox.Text = IngredientBox.Text = ToolBox.Text = NoteBox.Text = StepBox1.Text = StepBox2.Text = StepBox3.Text = StepBox4.Text = StepBox5.Text = StepBox6.Text = null;
}
con.Close();
}
}
InsertRecord();
}
string query = @"select * from Recipes";
NpgsqlCommand cmd = new NpgsqlCommand(query, con);
con.Open();
var reader = cmd.ExecuteReader();
var recipes = new List<Recipe>();
while(reader.Read()){
//Recipe is just a POCO that represents an entire
//row inside your Recipes table.
var recipe = new Recipe(){
Title = reader.GetString(reader.GetOrdinal("Title")),
//So on and so forth.
//...
};
recipes.Add(recipe);
}
con.Close();
您可以使用完全相同的查询来填写 List
标题和 DataGrid
显示食谱的所有内容。