[英]Executing query using OleDbDataReader, getting OleDbException (0x80004005)
我在DataReader從數據庫中保存一些數據時遇到了一些問題。或者至少我認為這是這樣工作的。
我有一個ComboBox,在程序開始時,我用以下數據填充了Items:
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();
現在,當用戶從組合框中選擇一項時,它可以正常工作並在程序開始時填充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中選擇某些內容后,將發生錯誤。 使用嘗試/捕獲,我收到此錯誤消息:
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
您可以將dataReader設置為DataSource
屬性,並設置查詢的列以顯示comboBox的值和文本。 樣品:
cmbDepartment.DataSource = Command.ExecuteReader()
cmbDepartment.DisplayMember = "Name";
cmbDepartment.ValueMember = "Id";
還要更改您的sql查詢以僅獲取所需的列,例如:
Command.CommandText = "Select Id, Name from Department";
在第二種情況下,只需確定列類型並使用Parameters
Command.CommandText = "select JobTitle from [Position] where Department = @Departament";
Command.Parameters.Add("@Departament", SqlDbType.VarChar).Value = cmbDepartment.Text;
應用於第二個ComboBox的邏輯是相同的,選擇所需的列並在DisplayMember和ValueMemeber上進行設置。
我相信“位置”實際上可能是保留字。 將其括在方括號中:
Command.CommandText =
"select JobTitle from [Position] where Department ='"+cmbDepartment.Text + "'";
FWIW,您可能需要研究其他一些設計問題:
將方括號放在位置,這是保留字。
Command.CommandText =
"select JobTitle from [Position] where Department ='"+cmbDepartment.Text + "'";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.