Jak se mohu připojit k databázi a smyčky přes sadu záznamů v C #?

hlasů
36

Co je to nejjednodušší způsob, jak připojit a dotaz databáze pro sadu záznamů v C #?

Položena 04/08/2008 v 01:47
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
30

@Goyuix - to je vynikající pro něco písemné z paměti. zkouší to tady - našli spojení nebyl otevřen. Jinak velmi pěkné.

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"]);
            }
        }
    }
}
Odpovězeno 04/08/2008 v 02:31
zdroj uživatelem

hlasů
16

Velmi hrubě a zpaměti, protože nemám kód na tomto notebooku:

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);
      }
    }
  }
}
Odpovězeno 04/08/2008 v 02:07
zdroj uživatelem

hlasů
11

To je určitě dobrý způsob, jak to udělat. Ale ty, když se stalo, že se pomocí databáze, která podporuje LINQ to SQL, to může být mnohem zábavnější. To může vypadat nějak takto:

MyDB db = new MyDB("Data Source=...");
var q = from db.MyTable
        select c;
foreach (var c in q)
  Console.WriteLine(c.MyField.ToString());
Odpovězeno 04/08/2008 v 05:45
zdroj uživatelem

hlasů
7

Jedná se o alternativní způsob (DataReader je rychlejší, než je tento):

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);
Odpovězeno 05/08/2008 v 15:17
zdroj uživatelem

hlasů
4

Pokud máte v úmyslu na čtení velký počet sloupců nebo zaznamenává data je to také stojí za to cache řadové a přístup k silnými metodami, např

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());
  }
}
Odpovězeno 15/09/2008 v 20:07
zdroj uživatelem

hlasů
3

Pokud jste dotazování databáze SQL Server (verze 7 a vyšší), které by měly nahradit třídy OLEDB s odpovídajícími tříd v System.data.SqlClient oboru názvů ( SqlConnection , SqlCommand a SqlDataReader ), jak tyto třídy byly optimalizovány pro práci s SQL Server.

Další věc, kterou si uvědomit, je, že byste měli ‚nikdy‘ vybrat vše, jak by to mohlo vést k neočekávaným výsledkům později, pokud budete přidávat nebo odebírat sloupce v této tabulce.

Odpovězeno 21/08/2008 v 15:19
zdroj uživatelem

hlasů
1

Myslím, že si můžete vyzkoušet Entity Framework.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}
Odpovězeno 05/09/2012 v 20:11
zdroj uživatelem

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