2008-08-04 19 views

Antwort

30

@Goyuix - dass etwas aus dem Gedächtnis geschrieben ausgezeichnet ist. hat es hier getestet - gefunden, die Verbindung wurde nicht geöffnet. Sonst sehr nett.

using System.Data.OleDb; 
... 

using (OleDbConnection conn = new OleDbConnection()) 
{ 
    conn.ConnectionString = "Provider=sqloledb;Data Source=yourServername\\yourInstance;Initial Catalog=databaseName;Integrated Security=SSPI;"; 

    using (OleDbCommand cmd = new OleDbCommand()) 
    { 
     conn.Open(); 
     cmd.Connection = conn; 
     cmd.CommandText = "Select * from yourTable"; 

     using (OleDbDataReader dr = cmd.ExecuteReader()) 
     { 
      while (dr.Read()) 
      { 
       Console.WriteLine(dr["columnName"]); 
      } 
     } 
    } 
} 
16

Sehr grob und aus dem Gedächtnis, da ich Code nicht auf diesem Laptop:

using (OleDBConnection conn = new OleDbConnection()) 
{ 
    conn.ConnectionString = "Whatever connection string"; 

    using (OleDbCommand cmd = new OleDbCommand()) 
    { 
    cmd.Connection = conn; 
    cmd.CommandText = "Select * from CoolTable"; 

    using (OleDbDataReader dr = cmd.ExecuteReader()) 
    { 
     while (dr.Read()) 
     { 
     // do something like Console.WriteLine(dr["column name"] as String); 
     } 
    } 
    } 
} 
10

Das ist definitiv ein guter Weg, es zu tun. Aber wenn Sie eine Datenbank verwenden, die LINQ to SQL unterstützt, kann es viel mehr Spaß machen. Es kann wie folgt aussehen:

MyDB db = new MyDB("Data Source=..."); 
var q = from db.MyTable 
     select c; 
foreach (var c in q) 
    Console.WriteLine(c.MyField.ToString()); 
7

Dies ist eine alternative Art und Weise (Datareader ist schneller als diese):

string s = ""; 
SqlConnection conn = new SqlConnection("Server=192.168.1.1;Database=master;Connect Timeout=30;User ID=foobar;Password=raboof;"); 
SqlDataAdapter da = new SqlDataAdapter("SELECT TOP 5 name, dbid FROM sysdatabases", conn); 
DataTable dt = new DataTable(); 

da.Fill(dt); 

for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    s += dt.Rows[i]["name"].ToString() + " -- " + dt.Rows[i]["dbid"].ToString() + "\n"; 
} 

MessageBox.Show(s); 
3

Wenn Sie eine SQL Server-Datenbank abfragen Sie (Version 7 und höher) sollte die OleDb-Klassen durch entsprechende Klassen im Namespace System.Data.SqlClient (SqlConnection, und SqlDataReader) ersetzen, da diese Klassen für die Arbeit mit SQL Server optimiert wurden.

Eine andere Sache zu beachten ist, dass Sie "nie" alle auswählen sollten, da dies später zu unerwarteten Ergebnissen führen kann, wenn Sie Spalten zu dieser Tabelle hinzufügen oder entfernen.

4

Wenn Sie eine große Anzahl von Spalten oder Datensätzen lesen möchten, sollten Sie auch die Ordinalzahlen zwischenspeichern und auf die stark typisierten Methoden zugreifen, z.

using (DbDataReader dr = cmd.ExecuteReader()) { 
    if (dr.Read()) { 
    int idxColumnName = dr.GetOrdinal("columnName"); 
    int idxSomethingElse = dr.GetOrdinal("somethingElse"); 

    do { 
     Console.WriteLine(dr.GetString(idxColumnName)); 
     Console.WriteLine(dr.GetInt32(idxSomethingElse)); 
    } while (dr.Read()); 
    } 
} 
1

Ich denke, Sie können Entity Framework versuchen.

using (SchoolDBEntities ctx = new SchoolDBEntities()) 
{ 
    IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>(); 
    //do something with courselist here 
}