2008-08-04 8 views

Répondre

30

@Goyuix - qui est excellent pour quelque chose d'écrit de la mémoire. testé ici - trouvé la connexion n'a pas été ouverte. Sinon très bien.

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

Très peu près et de la mémoire puisque je n'ai pas le code sur ce portable:

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

C'est certainement un bon moyen de le faire. Mais si vous utilisez une base de données qui supporte LINQ to SQL, cela peut être beaucoup plus amusant. Il peut ressembler à ceci:

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

Ceci est une autre façon (DataReader est plus rapide que celui-ci):

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

Si vous interrogez une base de données SQL Server (version 7 et plus) vous doit remplacer les classes OleDb par des classes correspondantes dans l'espace de noms System.Data.SqlClient (SqlConnection, SqlCommand et SqlDataReader) car ces classes ont été optimisées pour fonctionner avec SQL Server.

Une autre chose à noter est que vous ne devriez jamais sélectionner tout cela car cela pourrait conduire à des résultats inattendus plus tard si vous ajoutez ou supprimez des colonnes à cette table.

4

Si vous avez l'intention de lire un grand nombre de colonnes ou d'enregistrements, cela vaut également la peine de mettre en cache les ordinaux et d'accéder aux méthodes fortement typées, par exemple.

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

Je suppose que vous pouvez essayer framework d'entité.

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