データベース内のレコードを検索する最初の試み。ロード イベント時に Access データベースの名前をテキスト ボックスに表示する Windows フォーム プロジェクトがあります。フォームにはこれ以外にもありますが、実用的な目的のために、[前へ]、[次へ]、および [検索] のボタンがあります。データベースに 4 つの名前があるとします: 1-Atlas、2-Benson、3-Lane、4-Smith。フォームが読み込まれ、アトラスが表示されます。Lane を検索すると、Lane がフォームに表示されます。「次へ」を押すと、Smith の代わりに Benson が表示されます。その理由はわかっています。検索ではレコードが DataRow の 'returnedRow' に配置されますが、フォームの読み込みと 'Previous' および 'Next' に表示されるすべてのレコードは DataRow の 'dRow' からのものです。dRow 内のクエリからレコードを取得するにはどうすればよいですか?
OleDbConnection myConn = new OleDbConnection();
DataSet myDS;
int MaxRows = 0
int inc = 0;
private void Form1_Load(object sender, EventArgs e)
{
myConn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\Testing\TestDatabase.accdb";
myConn.Open();
myDS = new DataSet();
string sql = "SELECT * From Test";
OleDbDataAdapter myDA = new OleDbDataAdapter(sql, myConn);
myDA.Fill(myDS, "People");
NavigateRecords();
MaxRows = myDS.Tables["People"].Rows.Count;
myConn.Close();
}
private void NavigateRecords()
{
DataRow dRow = myDS.Tables["People"].Rows[inc];
txtName.Text = dRow.ItemArray.GetValue(1).ToString();
txtAddress.Text = dRow.ItemArray.GetValue(2).ToString();
txtCity.Text = dRow.ItemArray.GetValue(3).ToString();
txtState.Text = dRow.ItemArray.GetValue(4).ToString();
txtZip.Text = dRow.ItemArray.GetValue(5).ToString();
}
private void btnNext_Click(object sender, EventArgs e)
{
if (inc != MaxRows - 1)
{
inc++;
NavigateRecords();
}
else
{
MessageBox.Show("No more rows");
}
}
private void btnFind_Click(object sender, EventArgs e)
{
string searchFor = txtFind.Text;
int results = 0;
if (txtFind.Text.Trim() == "")
{
MessageBox.Show("Nothing to search for");
return;
}
DataRow[] returnedRows;
string expression;
expression = "Name1='" + searchFor + "'";
returnedRows = myDS.Tables["People"].Select(expression);
results = returnedRows.Length;
if (results > 0)
{
DataRow dr1;
dr1 = returnedRows[0];
txtName.Text = dr1[1].ToString();
txtAddress.Text = dr1[2].ToString();
txtCity.Text = dr1[3].ToString();
txtState.Text = dr1[4].ToString();
txtZip.Text = dr1[5].ToString();
}
else
{
MessageBox.Show("No record found");
}
}