DBFファイルとインデックスファイルがあります。インデックスファイルを読みたいのですが、検索レコードが条件を満たしています。(例:Student.DBFとStudentName.idxを使用して、StudentNameが「A」で始まるレコードを検索します)
これをプログラムで行うにはどうすればよいですか?
私は頭のてっぺんからコードを持っていませんが、ODBCを使用したくない場合は、ESRIシェープファイルの読み取りを検討する必要があります。これらのファイルは、3つの部分(またはそれ以上)の.DBF(探しているもの)で構成されています。 )、PRJファイルおよび.SHPファイル。多少の作業が必要になる場合がありますが、コードを掘り下げることができるはずです。codeplexのSharpmapを見てください。ODBCなしでdbfを読み取るのは簡単な作業ではありませんが、それは可能であり、これを行うためのコードはたくさんあります。ビッグエンディアンとリトルエンディアンの値、およびさまざまなファイルバージョンも処理する必要があります。
ここに行く と、dbfファイルを読み取るためのコードが見つかります。具体的には、このpublic void ReadAttributes( Stream stream )
方法に興味があります。
OleDB 接続を介してクエリを実行するのが最も簡単です
using System.Data.OleDb;
using System.Data;
OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\PathToYourDataDirectory");
OleDbCommand oCmd = new OleDbCommand();
oCmd.Connection = oConn;
oCmd.Connection.Open();
oCmd.CommandText = "select * from SomeTable where LEFT(StudentName,1) = 'A'";
// Create an OleDBAdapter to pull data down
// based on the pre-built SQL command and parameters
OleDbDataAdapter oDA = new OleDbDataAdapter(oCmd);
DataTable YourResults
oDA.Fill(YourResults);
oConn.Close();
// then you can scan through the records to get whatever
String EachField = "";
foreach( DataRow oRec in YourResults.Rows )
{
EachField = oRec["StudentName"];
// but now, you have ALL fields in the table record available for you
}