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

StackOverflow https://stackoverflow.com/questions/930

  •  08-06-2019
  •  | 
  •  

Question

Quel est le moyen le plus simple de se connecter et d'interroger une base de données pour un ensemble d'enregistrements en C# ?

Était-ce utile?

La solution

@Goyuix - c'est excellent pour quelque chose écrit de mémoire.je l'ai testé ici - j'ai découvert que la connexion n'était pas ouverte.Sinon très sympa.

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"]);
            }
        }
    }
}

Autres conseils

Très grossièrement et de mémoire puisque je n'ai pas de 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);
      }
    }
  }
}

C'est certainement une bonne façon de procéder.Mais si vous utilisez une base de données prenant en charge LINQ to SQL, cela peut être beaucoup plus amusant.Cela 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());

Il s'agit d'une méthode alternative (DataReader est plus rapide que celle-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);

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 ex.

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());
  }
}

Si vous interrogez une base de données SQL Server (version 7 et ultérieure), vous devez remplacer les classes OleDb par les classes correspondantes dans le fichier Système.Data.SqlClient espace de noms (Connexion SQL, Commande SQL et SQLDataReader) car ces classes ont été optimisées pour fonctionner avec SQL Server.

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

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

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

Charger les bibliothèques

using MySql.Data.MySqlClient;

Voici la connexion :

public static MySqlConnection obtenerconexion()
        {
            string server = "Server";
            string database = "Name_Database";
            string Uid = "User";
            string pwd = "Password";
            MySqlConnection conect = new MySqlConnection("server = " + server + ";" + "database =" + database + ";" + "Uid =" + Uid + ";" + "pwd=" + pwd + ";");

            try
            {
                conect.Open();
                return conect;
            }
            catch (Exception)
            {
                MessageBox.Show("Error. Ask the administrator", "An error has occurred while trying to connect to the system", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return conect;
            }
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top