2016-04-18 5 views
0

Ich versuche, ich habe einen Blick BisherSeach Box einen Tisch ado.net

ein Suchfeld Funktion durch ADO.NET zu ziehen:

@using (Html.BeginForm()) 
{ 
    <p> 
     Find Pokemon: @Html.TextBox("searchKey") 
     <input type="submit" value="Search" /> 


    </p> 
} 


@foreach (var item in Model){... 

, das funktioniert. Dann habe ich den Controller:

public ActionResult NoEF(string searchKey) 
    { 
     Pokemon poke = new Pokemon(); 

      poke.Search(searchKey); 
     //poke.Search(poke.Poke_Name, poke.Poke_Color); 

     return View(poke); 

    } 

, die angeblich auf die Pokemon.cs Datei zu umleiten. Es hat eine Klasse, die angenommen hat, mit der Datenbank verbinden, eine Abfrage durchführt und dann die Informationen über das ist eingegeben in das Suchfeld wie so basierend anzuzeigen:

public List<Pokemon> Search(string searchKey) 
     { 
      List<Pokemon> pokemons = new List<Pokemon>(); 


      SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename = 'C:\Users\Pokedatabase.mdf'; Integrated Security = True"); 

      //Default order by name 
      string query = "SELECT  Pokemon.*, Poketype.* FROM Pokemon INNER JOIN" + 
          " Poketype ON Pokemon.P_Type = Poketype.Type_Id" + 
          " Where Pokemon.Poke_Name = '"+ searchKey + "' || Poke_Color = '"+ searchKey + "' order by Poke_Name"; 

      //Opens up a connection to the database 
      con.Open(); 

Mein Problem ist, dass nach dem Öffnen eine Verbindung, ich bin Ich bin mir nicht sicher, was ich da hineinlegen soll. Ich habe überall gegoogelt. Und bisher bin ich mit einem YOLO-Code, der offensichtlich nicht funktioniert:

using (SqlCommand cmd = new SqlCommand(query, con)) 
    { 
     //Creates a data reader object and supplies it with data 
     SqlDataReader dr = cmd.ExecuteReader(); 

     try 
     { 
      con.Open(); 
      while (dr.Read()) 
      { 
       dr = dr(dr.GetValue(0) + " - " + dr.GetValue(1) + " - " + dr.GetValue(2)); 
      } 
      dr.Close(); 
      cmd.Dispose(); 
      con.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Can not open connection ! "); 
     } 

    } 

    return pokemons; 
} 

Irgendwelche Vorschläge zu Verbesserungen auf das? Ich bin total verloren.

+0

Was Sieht Ihre 'Pokemon' Klasse aus? Welche Eigenschaften möchten Sie in Ihrer Datenbank festlegen? – Tim

+0

'öffentliche Teilklasse Pokemon { public int Poke_Id {get; einstellen; } öffentliche Zeichenfolge Poke_Name {get; einstellen; } öffentliche Zeichenfolge Poke_Color {get; einstellen; } public int Poke_Hp {bekommen; einstellen; } public int P_Typ {erhalten; einstellen; } öffentlicher virtueller Poketype Poketype {get; einstellen; } ' – Rinn

+0

Mit ADO.NET müssen Sie alle Ihre Eigenschaften aus dem' SqlDataReader' selbst setzen. 'Poke_Name = dr [" Poke_Name "];' und so weiter. – Tim

Antwort

0

eine Klasse von Pokemon erstellen wie:

public class Pokemon 
    { 
     public string Name{get;set;} 
     public string Type{get;set;} 
    } 

Sie Eigenschaften hinzufügen können Sie wie in Ihren Daten mögen, nahm ich nur zwei von ihnen als um Hilfe. als in Ihrer Suchfunktion tun wie dieser nach:

 con.open(); 

     sqlDs = new DataSet(); 
     conOpen(); 
     var sqlComm = new SqlCommand(); 
     sqlComm.Connection = con; 
     sqlComm.CommandType = CommandType.Text; 
     sqlComm.CommandText = query; 
     sqlDa = new SqlDataAdapter(sqlComm); 
     sqlDa.Fill(sqlDs); 
     conClose(); 
     var dt = new DataTable(); 
     dt = sqlDs.Tables[0]; 

Jetzt, nachdem diese die Liste der Pokemon Art füllen, wie:

 var list = (from a in dt 
        select new Pokemon 
        { 
         Name = a.Name, 
         Type = a.Type 
        }).ToList(); 

      return list; 

Rückkehr diese Liste an die Steuerung in Suchfunktion

+0

@Rinn ist seine Lösung für Sie gearbeitet ?. – sumngh