Как подключиться к базе данных и перебрать набор записей в 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 d 02:31
источник пользователем

голоса
16

Очень грубо и из памяти, так как у меня нет кода на этом ноутбуке:

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 d 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 d 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 d 15:17
источник пользователем

голоса
4

Если Вы планируете на чтение большого количества столбцов или записываете это также стоит кэширования порядковых и доступа к строго типизированным методам, например,

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 d 20:07
источник пользователем

голоса
3

Если вы запрашиваете базу данных SQL Server (версия 7 и выше) , вы должны заменить классы OleDb с соответствующими классами в System.Data.SqlClient имен ( SqlConnection , SqlCommand и SqlDataReader ) , поскольку эти классы были оптимизированы для работы с SQL Server.

Другое дело, следует отметить, что вы не должны «никогда» выбрать все, так как это может привести к неожиданным результатам позже, если добавить или удалить столбцы этой таблицы.

Ответил 21/08/2008 d 15:19
источник пользователем

голоса
1

Я думаю, вы можете попробовать рамки сущности.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}
Ответил 05/09/2012 d 20:11
источник пользователем

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