Comment puis-je me connecter à une base de données et boucle sur un jeu d'enregistrements en C #?

voix
36

Quelle est la façon la plus simple de se connecter et d'interroger une base de données pour un ensemble d'enregistrements en C #?

Créé 04/08/2008 à 01:47
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
30

@Goyuix - c'est excellent pour quelque chose d'écrit de la mémoire. testé ici - a trouvé la connexion n'a pas été ouvert. Sinon, très agréable.

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"]);
            }
        }
    }
}
Créé 04/08/2008 à 02:31
source utilisateur

voix
16

Très gros et de la mémoire puisque je n'ai pas de code sur cet ordinateur 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);
      }
    }
  }
}
Créé 04/08/2008 à 02:07
source utilisateur

voix
11

C'est certainement une bonne façon de le faire. Mais si vous arrive d'utiliser une base de données qui prend en charge LINQ to SQL, il 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());
Créé 04/08/2008 à 05:45
source utilisateur

voix
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);
Créé 05/08/2008 à 15:17
source utilisateur

voix
4

Si vous avez l'intention à la lecture d'un grand nombre de colonnes ou d'enregistrements, il est également intéressant de mettre en cache les ordinaux et 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());
  }
}
Créé 15/09/2008 à 20:07
source utilisateur

voix
3

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

Une autre chose à noter est que vous devez « jamais » tout sélectionner, car cela pourrait conduire à des résultats inattendus plus tard si vous ajoutez ou supprimez des colonnes à ce tableau.

Créé 21/08/2008 à 15:19
source utilisateur

voix
1

Je suppose que, vous pouvez essayer Entity Framework.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}
Créé 05/09/2012 à 20:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more