¿Cómo me conecto a una base de datos y recorro un conjunto de registros en C #?

votos
36

¿Cuál es la forma más sencilla de conectar y consultar una base de datos para un conjunto de registros en C #?

Publicado el 04/08/2008 a las 01:47
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
30

@Goyuix: eso es excelente para algo escrito desde la memoria. lo probé aquí: descubrí que la conexión no se había abierto. De lo contrario, muy agradable.

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"]);
            }
        }
    }
}
Respondida el 04/08/2008 a las 02:31
fuente por usuario

votos
16

Muy aproximadamente y de memoria ya que no tengo el código en esta computadora portátil:

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);
      }
    }
  }
}
Respondida el 04/08/2008 a las 02:07
fuente por usuario

votos
11

Esa es definitivamente una buena manera de hacerlo. Pero si usa una base de datos que admita LINQ to SQL, puede ser mucho más divertido. Puede verse algo como esto:

MyDB db = new MyDB("Data Source=...");
var q = from db.MyTable
        select c;
foreach (var c in q)
  Console.WriteLine(c.MyField.ToString());
Respondida el 04/08/2008 a las 05:45
fuente por usuario

votos
7

Esta es una forma alternativa (DataReader es más rápido que este):

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);
Respondida el 05/08/2008 a las 15:17
fuente por usuario

votos
4

Si tiene la intención de leer una gran cantidad de columnas o registros, también vale la pena almacenar en caché los ordinales y acceder a los métodos fuertemente tipados, por ej.

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());
  }
}
Respondida el 15/09/2008 a las 20:07
fuente por usuario

votos
3

Si está consultando una base de datos de SQL Server (Versión 7 y superior) debe reemplazar las clases OleDb con las clases correspondientes en el espacio de nombres System.Data.SqlClient ( SqlConnection , SqlCommand y SqlDataReader ) ya que esas clases se han optimizado para trabajar con SQL Server.

Otra cosa a tener en cuenta es que nunca debe seleccionar todo, ya que esto podría generar resultados inesperados más adelante si agrega o quita columnas a esta tabla.

Respondida el 21/08/2008 a las 15:19
fuente por usuario

votos
1

Supongo, puede intentar marco de la entidad.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}
Respondida el 05/09/2012 a las 20:11
fuente por usuario

votos
0

Cargar las bibliotecas

using MySql.Data.MySqlClient;

Esta es la conexión:

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;
            }
        }
Respondida el 17/05/2019 a las 06:40
fuente por usuario

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