0

データベースからのデータを保持する DataReader にいくつか問題があります..または少なくとも、これがどのように機能するかだと思います。

ComboBox があり、プログラムの開始時に、その項目に次のデータを入力します。

Connect.Open();
Command.Connection = Connect;
Command.CommandText = "Select * from Department";
OleDbDataReader dr;
dr = Command.ExecuteReader();
if (dr.HasRows)
{
    while (dr.Read())
    {
        cmbDepartment.Items.Add(dr[0].ToString());
    }
}
Connect.Close();

ユーザーがコンボボックスから1つの項目を選択すると、プログラムの開始時に正常に機能し、ComboBox にデータが入力されます。

ユーザーが最初のコンボ ボックスで選択した部門に基づいて、次の ComboBox の項目を設定したいと思います。

Connect.Open();

Command.CommandText = "select JobTitle from Position where Department ='"+cmbDepartment.Text + "'";

OleDbDataReader dr2;
dr2 = Command.ExecuteReader();

if (dr2.HasRows)
{
    while (dr2.Read())
    {
        cmbPosition.Items.Add(dr2[0]);
    }
}

問題は、クラスメートと完全に似たコードを持っていて、デバッグできない異常に長いエラー メッセージがあることです。

cmbDepartment から何かを選択すると、エラーが発生します。try/catch を使用すると、次のエラー メッセージが表示されました。

System.Data.OleDb.OleDbException (0x80004005): IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.OleDb.OleDbCommand.ExecuteReader()
   at katapusan.Employee.cmbDepartment_TextChanged(Object sender, EventArgs e) in c:\Users\Matt\Documents\Visual Studio 2012\Projects\katapusan\katapusan\Employee.cs:line 423
4

3 に答える 3

0

dataReader をDataSourceプロパティに設定し、クエリの列を設定して、comboBox の値とテキストを表示できます。サンプル:

cmbDepartment.DataSource = Command.ExecuteReader()
cmbDepartment.DisplayMember = "Name";
cmbDepartment.ValueMember = "Id"; 

また、SQL クエリを変更して、サンプルとして必要な列のみを取得します。

Command.CommandText = "Select Id, Name from Department";

2番目のケースでは、列のタイプを確認して使用してくださいParameters

Command.CommandText = "select JobTitle from [Position] where Department = @Departament";
Command.Parameters.Add("@Departament", SqlDbType.VarChar).Value = cmbDepartment.Text;

2 番目の ComboBox に適用するロジックは同じで、必要な列を選択し、DisplayMember と ValueMemeber に設定します。

于 2014-10-20T16:22:22.150 に答える