下面的代码没有异常错误,这可能意味着我的sql语句没有问题。但是,在尝试验证它是否返回任何值时,我将返回的项传递给一个字符串值,并尝试将其显示在一个消息框中。
我面临的问题是,消息框只显示列的名称,而不显示从表中请求的数据。
可能的问题是什么?如果有更好的方法来解决这个问题,请给我建议。
public void DisplayPurchase(OleDbConnection mDB)
{
openDB();
string sqlQuery;
OleDbCommand cmd;
OleDbDataReader rdr;
sqlQuery = "SELECT CustomerTable.[Youth ID], CustomerTable.Firstname, " +
"CustomerTable.Lastname, Youth.Purchaseid, Youth.NumbersOfSport, " +
"Youth.Price, Youth.TotalCostOfTraining, Youth.PercentageDiscount, " +
"Youth.AmountDue, Youth.DatePurchased" +
" FROM CustomerTable, Youth WHERE Youth.YouthID = CustomerTable.[Youth ID]" +
" AND CustomerTable.[Youth ID] = 7";
try
{
cmd = new OleDbCommand(sqlQuery, mDB);
rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
qtyInt1 = (int)rdr["Youth.NumbersOfSport"];
youthInt1 = (int)rdr["CustomerTable.[Youth ID]"];
firstStr1 = (string)rdr["CustomerTable.Firstname"];
purStr1 = (string)rdr["Youth.Purchaseid"];
lastStr1 = (string)rdr["CustomerTable.Lastname"];
priceStr1 = (string)rdr["Youth.Price"];
totalCstStr1 = (string)rdr["Youth.TotalCostOfTraining"];
discountStr1 = (string)rdr["Youth.PercentageDiscount"];
amtDueStr1 = (string)rdr["Youth.AmountDue"];
//purDate1 = (DateTime)rdr["Youth.DatePurchased"];
MessageBox.Show(firstStr1.ToString());
closeDB();
}
else
{
MessageBox.Show("Reader has no rows");
closeDB();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}谢谢
发布于 2009-12-17 02:59:53
我确信您必须先调用rdr.Read(),然后才能访问其中的任何数据。因此,将其作为if(rdr.HasRows())之后的第一行添加
发布于 2009-12-17 03:00:24
您需要在读取器上调用Read()来读取第一行。
if(rdr.HasRows) {
rdr.Read();
...谨致问候,
Fabian
发布于 2009-12-17 03:01:22
您是否尝试过:
firstStr1 = (string)rdr["Firstname"];datareader中的字段名通常不包括表名前缀。
https://stackoverflow.com/questions/1916848
复制相似问题