認証 - どのようにデータベースに接続し、C#でレコードセットをループするのですか?




visual studio c# データベース 接続 (5)

C#で一連のレコードをデータベースに接続して照会する最も簡単な方法は何ですか?


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

SQL Serverデータベース(バージョン7以上)を照会する場合は、OleDbクラスをSystem.Data.SqlClient名前空間( SqlConnectionSqlCommand 、およびSqlDataReader )の対応するクラスに置き換える必要があります。これらのクラスはSQL Serverで動作するように最適化されています。

この表に列を追加または削除すると、後で予期しない結果につながる可能性があるため、「すべてを選択しないでください」ということに注意してください。


それは間違いなくそれを行う良い方法です。 しかし、LINQ to SQLをサポートするデータベースを使用している場合は、もっと楽しいことがあります。 それは次のように見ることができます:

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

大量の列やレコードを読み込もうと思っている場合は、序数をキャッシュし、強く型付けされたメソッドにアクセスする価値があります。

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

私はこのノートパソコンにコードを持っていないので、非常におおよそとメモリから:

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




connection