2011-01-03 5 views
2

I-Code haben, der mich aus einer Datenbank eine Zeile zurückgibt,C#, ASP.NET - Das Sammeln von Daten aus einer Datenbank

  con = new System.Data.SqlClient.SqlConnection(); 
      dsl = new DataSet(); 
      con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\tbl.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; 

      con.Open(); 

      string sql = "SELECT * From tbl_fb"; 
      da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
      da.Fill(dsl, "fb"); 
      DataRow dRow = dsl.Tables["fb"].Rows[0]; 
      ViewData["a"] = dRow.ItemArray.GetValue(1).ToString(); 

      ViewData["b"] = "afagjma"; 
      con.Close(); 

Gibt es eine Möglichkeit, dass ich eine Schleife verwenden, könnten alle Zeilen zu erhalten aus der Tabelle. Die Anzahl der Zeilen ist unbekannt. Ich weiß, dass ich es mit einer Schleife machen kann, indem ich die Variable (i) anstelle von Zahlen verwende. Aber dann müsste ich das ViewData Array verwenden, was für mich ein Problem ist.

Beispiel: ViewData ["a"] [i];

Antwort

3

Sie sollten eine Klasse einrichten, die definiert, welche Daten von Ihrer Datenbank zurückgegeben werden.

Zum Beispiel:

public class Customer 
{ 
    public int Id { get; set;} 
    public string Name { get; set;} 
} 

Und dann würden Sie eine List<Customer>(), und setzen Sie diese als Modell für Ihre MVC Seite erstellen.

Zum Beispiel:

var data = new new List<Customer>();  
ViewData.Model = data; 

Und Ihre Daten in Ihre Liste laden:

foreach(var row in dsl.Tables["fb"].Rows) 
{ 
    var customer = new Customer(); 
    customer.Id = row.Field<int?>("Id"); 
    customer.Name = row.Field<string>("Name"); 
    data.Add(customer); 
} 

Und dann, auf dem MVC-Seite, stellen Sie die <%@ Page %> Header wie so das Inherits Attribut haben:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Customer>>" %> 

Jetzt endlich können Sie direkt an das Modell innerhalb der Seite binden:

+0

Danke Mann. Ich habe zuerst angefangen Ich habe deinen Code ausprobiert, also bin ich auf ein Problem gestoßen. Das Programm unterstreicht mich.Feld <...>() Ich habe system.data enthalten. Irgendeine Info, warum es diesen Fehler zurückbringt? – Sebastjan

+0

Sie müssen auf System.Data.DatasetExtensions verweisen (nahm mich ein wenig, um das zu finden, heh) –

1

Sie müssen dsl durchlaufen, da dies der Datensatz ist. Das ist Ihr Problem:

DataRow dRow = dsl.Tables["fb"].Rows[0]; 

Sie sind eine einzige DataRow bekommen Rows[0], wo Sie durch dsl Schleife müssen , jedenDataRow

1

Warum nicht ein DataReader stattdessen zu bekommen? Es würde in einer Schleife arbeiten, die jeweils eine Zeile liest. Sie können es verwenden, um eine DataTable aufzufüllen und bei Bedarf an eine DataSet weiterzuleiten.

2

Die einfachste Art und Weise durch jede DataRow in Ihrem „fb“ Tisch zu gehen:

foreach (DataRow dr in dsl.Tables["fb"].Rows) { 
    // do something with each row 
} 

Diese durch alle Reihen der Tabelle ausgeführt wird.

Um einen Wert einer bestimmten Spalte in der DataRow-Objekt zurück, tun Sie etwas wie folgt aus:

string firstName = (string)dr["FirstName"]; 
string lastName = (string)dr["LastName"]; 
int age = (int)dr["Age"]; 

Auf diese Weise Sie sagen, „Geben Sie mir den Wert aus der Spalte und cast‚Vorname‘ Es als Zeichenfolge, wirf den Wert aus der "Age" -Spalte als Integer und so weiter. Allerdings musst du den Typ für jede Spalte überprüfen und deine Umwandlungen entsprechend anpassen.

Verwandte Themen