Wie verbinde ich mich mit einer Datenbank und führe eine Schleife über ein Recordset in C# durch?

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

  •  08-06-2019
  •  | 
  •  

Frage

Was ist der einfachste Weg, eine Datenbank in C# zu verbinden und nach einer Reihe von Datensätzen abzufragen?

War es hilfreich?

Lösung

@Goyuix – das ist hervorragend für etwas, das aus dem Gedächtnis geschrieben wurde.Habe es hier getestet und festgestellt, dass die Verbindung nicht geöffnet wurde.Ansonsten sehr schön.

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

Andere Tipps

Ganz grob und aus dem Gedächtnis, da ich auf diesem Laptop keinen Code habe:

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

Das ist auf jeden Fall eine gute Möglichkeit.Aber wenn Sie zufällig eine Datenbank verwenden, die LINQ to SQL unterstützt, kann es viel mehr Spaß machen.Es kann etwa so aussehen:

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

Dies ist ein alternativer Weg (DataReader ist schneller als dieser):

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

Wenn Sie vorhaben, eine große Anzahl von Spalten oder Datensätzen zu lesen, lohnt es sich auch, die Ordnungszahlen zwischenzuspeichern und auf die stark typisierten Methoden zuzugreifen, z. B.

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

Wenn Sie eine SQL Server-Datenbank (Version 7 und höher) abfragen, sollten Sie die OleDb-Klassen durch entsprechende Klassen in ersetzen System.Data.SqlClient Namensraum (SQLConnection, SqlCommand Und SqlDataReader), da diese Klassen für die Arbeit mit SQL Server optimiert wurden.

Beachten Sie außerdem, 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 daraus entfernen.

Ich denke, Sie können das Entity Framework ausprobieren.

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

Laden Sie die Bibliotheken auf

using MySql.Data.MySqlClient;

Das ist der Zusammenhang:

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;
            }
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top