2016-12-10 2 views
1

Wenn ich meinen Code ausführen, erhalte ich keine Fehler und der Code scheint ordnungsgemäß zu laufen, aber die Daten aus der Datenbank nicht auf meiner ListView angezeigt.Daten von lokalen .mdf nicht in ListView angezeigt

Hier ist meine Designer Form Code:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Configuration; 
using System.Data.SqlClient; 

namespace Cookbook 
{ 
    public partial class frmMain : Form 
    { 
     SqlConnection connection; 
     string connectionString; 

     public frmMain() 
     { 
      InitializeComponent(); 
      connectionString = ConfigurationManager.ConnectionStrings["Cookbook.Properties.Settings.CookbookConnectionString"].ConnectionString; 
     } 

     public void frmMain_Load(object sender, EventArgs e) 
     { 
      PopulateRecipes(); 

     } 

     public void PopulateRecipes() 
     { 
      using (connection = new SqlConnection(connectionString)) 
      using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Recipe", connection)) 
      { 
       DataTable recipeTable = new DataTable(); 
       adapter.Fill(recipeTable); 

       lstRecipes.DisplayMember = "Name"; 
       lstRecipes.ValueMember = "Id"; 
       lstRecipes.DataSource = recipeTable; 
      }  
     } 


     public void PopulateIngrediants() 
     { 
      string query = "SELECT a.Name FROM Ingrediants a" + 
      "INNER JOIN RecipeIngrediant b ON a.Id = b.IngrediantId" + 
      "WHERE b.RecipeId = @RecipeId"; 

      using (connection = new SqlConnection(connectionString)) 
      using (SqlCommand command = new SqlCommand(query, connection)) 
      using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection)) 
      { 
       command.Parameters.AddWithValue("@RecipeId", lstRecipes.SelectedValue); 
       DataTable ingrediantsTable = new DataTable(); 
       adapter.Fill(ingrediantsTable); 

       lstIngrediants.DisplayMember = "Name"; 
       lstIngrediants.ValueMember = "Id"; 
       lstIngrediants.DataSource = ingrediantsTable; 
      } 
     } 

     public void lstRecipes_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      PopulateIngrediants(); 
     } 

     private void lblRecipes_Click(object sender, EventArgs e) 
     { 

     } 

     private void frmMain_Load_1(object sender, EventArgs e) 
     { 

     } 
    } 
} 

Meine app config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    </configSections> 
    <connectionStrings> 
     <add name="Cookbook.Properties.Settings.CookbookConnectionString" 
      connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Cookbook.mdf;Integrated Security=True" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
</configuration> 

Das ist die Struktur meines Codes und die Ansichten sind leer, wenn ich laufen: enter image description here

Hinweis: Ich verwende Visual Studio Community 2015 Update 3 und ich bin neu in VS und C#.

+0

Lassen Sie mich wissen, wenn mehr Informationen benötigt werden. – Inconnu

Antwort

0

Sie haben mehrere Probleme in Ihrem Code.

  • Sie vergessen Verbindung zu öffnen (und schließen Sie es besser)
  • Ihre Anfrage nicht Platz haben, wenn Sie
  • Sie concat vergessen id auszuwählen und verwenden Sie id in Valuemember
  • Sie Befehlsparameter verwenden und Sie verwenden Dataadapter ohne Link

nicht meinen Code behoben Arbeit sur aber dieses

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Configuration; 
using System.Data.SqlClient; 

namespace Cookbook 
{ 
    public partial class frmMain : Form 
    { 
     SqlConnection connection; 
     string connectionString; 

     public frmMain() 
     { 
      InitializeComponent(); 
      connectionString = ConfigurationManager.ConnectionStrings["Cookbook.Properties.Settings.CookbookConnectionString"].ConnectionString; 
     } 

     public void frmMain_Load(object sender, EventArgs e) 
     { 
      PopulateRecipes(); 

     } 

     public void PopulateRecipes() 
     { 
      using (connection = new SqlConnection(connectionString)) 
      using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Recipe", connection)) 
       { 
       connection.Open(); //Open connexion 
       DataSet ds = new DataSet(); 
       adapter.Fill(ds); 

       lstRecipes.DisplayMember = "Name"; 
       lstRecipes.ValueMember = "Id"; 
       lstRecipes.DataSource = ds.Tables[0]; 
       connection.Close(); //close connexion 
       } 


     } 


     public void PopulateIngrediants() 
     { 
      //Donc forget space in your query when you concat string for create query, add column a.id if you want use in valuemember 
      string query = "SELECT a.Name, a.Id FROM Ingrediants a " + 
      "INNER JOIN RecipeIngrediant b ON a.Id = b.IngrediantId " + 
      "WHERE b.RecipeId = @RecipeId"; 

      //Remove your command 
      using (connection = new SqlConnection(connectionString)) 
      using (SqlDataAdapter adapter = new SqlDataAdapter(query, connection)) 
      { 
       connection.Open() //open connexion 
       adapter.SelectCommand.Parameters.AddWithValue("@RecipeId", lstRecipes.SelectedValue);//modify parameter of select command to dataadapter (verify selectvalue) 
       DataSet ds = new DataSet(); 
       adapter.Fill(ds); 

       lstIngrediants.DisplayMember = "Name"; 
       lstIngrediants.ValueMember = "Id"; 
       lstIngrediants.DataSource = ds.Tables[0]; 
       connection.Close() //close connexion 
      } 
     } 

     public void lstRecipes_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      PopulateIngrediants(); 
     } 

     private void lblRecipes_Click(object sender, EventArgs e) 
     { 

     } 

     private void frmMain_Load_1(object sender, EventArgs e) 
     { 

     } 
    } 
} 
versuchen
+0

Versucht dies, aber hat nicht funktioniert und zeigt keine Fehler. – Inconnu

+0

Ich habe meinen Code für die Verwendung Datensatz stattdessen datatable ändern, versuchen Sie es – Esperento57

+0

Es ist immer noch das gleiche :( – Inconnu

Verwandte Themen