私は、Access データベースを OleDb 経由でレコードの追加、削除、編集などのさまざまな機能に接続する、比較的単純な C# プロジェクトに取り組んでいます。これで、データベース検索を実装しようとするまで、すべてがうまくいきました。
次の行 (検索ボックス コード内) では、デバッグ中に例外がスローされますが、実際に null 値が何であるかがわかりません。
ReturnedResults = DBDataSet.Tables["Movies"].Select("Title like '%" + Search + "%'");
したがって、目標は、データベース内の「映画」テーブルを検索し、ユーザーの入力 (「検索」文字列に格納されている) に基づいて映画を見つけることです。
検索ボックスのコードは以下にあり、データベースの初期化と接続は下部にあります。
private void SearchTextBox_Changed(object sender, EventArgs e)
{
string SearchString = SearchTextBox.Text.ToString();
int Results = 0;
DataRow[] ReturnedResults;
ReturnedResults = DataSet.Tables["Movies"].Select("Title like '%" + SearchString + "%'");
Results = ReturnedResults.Length;
if (Results > 0)
{
SearchResultsBox.Items.Clear();
for (int i = 0; i <= Results; i++)
{
DataRow Row;
Row = ReturnedResults[i];
SearchResultsBox.Items.Add(Row["Title"].ToString());
}
}
else
{
SearchResultsBox.Items.Clear();
MessageBox.Show("Error! No items found.");
}
}
コンテキストの一部として、メイン データベースの初期化/接続とフォーム ロード イベントを次に示します。
public partial class BaseForm : Form
{
System.Data.OleDb.OleDbConnection Connection;
DataSet DataSet;
System.Data.OleDb.OleDbDataAdapter DataAdapter;
int MaxRows = 0;
int CurrentRow = 0;
public BaseForm()
{
InitializeComponent();
}
private void BaseForm_Load(object sender, EventArgs e)
{
Connection = new System.Data.OleDb.OleDbConnection();
Connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=Movies.accdb";
Connection.Open();
DataSet = new DataSet();
string sq1 = "SELECT * From Movies";
DataAdapter = new System.Data.OleDb.OleDbDataAdapter(sq1, DBConnection);
DataAdapter.Fill(DBDataSet);
MaxRows = DataSet.Tables[0].Rows.Count;
DisplayRecord();
}