Wie kann ich auf eine Datenbank und eine Schleife über einen Re-Cord in C # verbinden?

stimmen
36

Was ist der einfachste Weg, um eine Datenbank für eine Reihe von Datensätzen in C # zu verbinden und abfragen?

Veröffentlicht am 04/08/2008 um 01:47
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
30

@Goyuix - das ist ausgezeichnet für etwas aus dem Gedächtnis geschrieben. hier getestet - gefunden wurde die Verbindung nicht geöffnet. 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"]);
            }
        }
    }
}
Beantwortet am 04/08/2008 um 02:31
quelle vom benutzer

stimmen
16

Sehr grob und aus dem Gedächtnis, da ich Code nicht auf diesem Laptop:

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);
      }
    }
  }
}
Beantwortet am 04/08/2008 um 02:07
quelle vom benutzer

stimmen
11

Das ist auf jeden Fall ein guter Weg, es zu tun. Aber Sie, wenn Sie eine Datenbank passieren zu verwenden, die LINQ to SQL unterstützt, kann es viel mehr Spaß machen. Es kann wie folgt aussehen:

MyDB db = new MyDB("Data Source=...");
var q = from db.MyTable
        select c;
foreach (var c in q)
  Console.WriteLine(c.MyField.ToString());
Beantwortet am 04/08/2008 um 05:45
quelle vom benutzer

stimmen
7

Dies ist eine alternative Art und Weise (Datareader ist schneller als diese):

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);
Beantwortet am 05/08/2008 um 15:17
quelle vom benutzer

stimmen
4

Wenn Sie beabsichtigen, eine große Anzahl von Spalten beim Lesen oder zeichnet es auch wert ist die ordinals Caching und den Zugriff auf die stark typisierte Methoden, zB

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());
  }
}
Beantwortet am 15/09/2008 um 20:07
quelle vom benutzer

stimmen
3

Wenn Sie eine SQL Server - Datenbank (Version 7 und höher) abfragt , sollten Sie die OleDb Klassen mit entsprechenden Klassen in der ersetzen System.Data.SqlClient Namespace ( SqlConnection , SqlCommand und SqlDataReader ) , da diese Klassen optimiert wurden mit SQL Server zu arbeiten.

Eine andere Sache zu beachten ist, dass Sie sollten ‚nie‘ alles wie diese wählen könnte später zu unerwarteten Ergebnissen führen, wenn Sie Spalten zu dieser Tabelle hinzufügen oder entfernen.

Beantwortet am 21/08/2008 um 15:19
quelle vom benutzer

stimmen
1

Ich denke, können Sie Entity Framework versuchen.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}
Beantwortet am 05/09/2012 um 20:11
quelle vom benutzer

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