Πώς μπορώ να συνδέσω σε μια βάση δεδομένων και βρόχο πάνω από ένα σύνολο εγγραφών σε C #;

ψήφοι
36

Ποιος είναι ο πιο απλός τρόπος για να συνδέσετε και να αναζητήσετε μια βάση δεδομένων για ένα σύνολο εγγραφών σε C #;

Δημοσιεύθηκε 04/08/2008 στις 01:47
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
30

@Goyuix - αυτό είναι εξαιρετικό για κάτι γραμμένο από τη μνήμη. δοκιμαστεί εδώ - βρέθηκε η σύνδεση δεν άνοιξε. Διαφορετικά, πολύ ωραία.

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"]);
            }
        }
    }
}
Απαντήθηκε 04/08/2008 στις 02:31
πηγή χρήστη

ψήφοι
16

Πολύ χονδρικά και από τη μνήμη δεδομένου ότι δεν έχω κώδικα για αυτό το 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);
      }
    }
  }
}
Απαντήθηκε 04/08/2008 στις 02:07
πηγή χρήστη

ψήφοι
11

Αυτό είναι σίγουρα ένας καλός τρόπος για να το κάνει. Αλλά αν τύχει να χρησιμοποιεί μια βάση δεδομένων που υποστηρίζει LINQ σε SQL, μπορεί να είναι πολύ πιο διασκεδαστικό. Μπορεί να είναι κάπως έτσι:

MyDB db = new MyDB("Data Source=...");
var q = from db.MyTable
        select c;
foreach (var c in q)
  Console.WriteLine(c.MyField.ToString());
Απαντήθηκε 04/08/2008 στις 05:45
πηγή χρήστη

ψήφοι
7

Αυτός είναι ένας εναλλακτικός τρόπος (DataReader είναι πιο γρήγορα από αυτό):

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);
Απαντήθηκε 05/08/2008 στις 15:17
πηγή χρήστη

ψήφοι
4

Αν σκοπεύετε να διαβάζουν ένα μεγάλο αριθμό στηλών ή καταγράφει είναι επίσης αξίζει να την προσωρινή αποθήκευση των ordinals και πρόσβαση στα έντονα-δακτυλογραφημένο μεθόδους, π.χ.

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());
  }
}
Απαντήθηκε 15/09/2008 στις 20:07
πηγή χρήστη

ψήφοι
3

Εάν είστε ρωτώντας μια βάση δεδομένων SQL Server (έκδοση 7 και πάνω) θα πρέπει να αντικαταστήσει τις τάξεις OLEDB με τις αντίστοιχες τάξεις του System.Data.SqlClient namespace ( SqlConnection , SqlCommand και SqlDataReader ) όπως έχουν αυτές οι κατηγορίες έχουν βελτιστοποιηθεί ώστε να λειτουργεί με τον SQL Server.

Ένα άλλο πράγμα που πρέπει να σημειωθεί είναι ότι θα πρέπει «ποτέ» επιλογή όλων, καθώς αυτό μπορεί να οδηγήσει σε μη αναμενόμενα αποτελέσματα αργότερα αν προσθέσετε ή να καταργήσετε στήλες στον πίνακα αυτό.

Απαντήθηκε 21/08/2008 στις 15:19
πηγή χρήστη

ψήφοι
1

Υποθέτω, μπορείτε να δοκιμάσετε πλαίσιο οντότητα.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}
Απαντήθηκε 05/09/2012 στις 20:11
πηγή χρήστη

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