如何使用 DataReader 以逻辑方式循环访问记录,然后在每次迭代时执行某些操作



请耐心等待,因为我对此很陌生。

我正在尝试使用 DataReader 对象循环访问记录集,并在每次迭代时执行某些操作,但它似乎没有传递第一条记录。我基本上想查看每条记录,然后根据记录集中列中的数据将特定图像分配给指定位置。

我正在使用Visual Studio 2019并使用OleDataReader来读取Access表。我让命令对象正常工作,只是似乎无法传递第一条记录。

这是我类中的方法定义

//Giving string variable names to the virtual paths of the images
private string whitePallet = "~/images/White.jpg";
private string redPallet = "~/images/Red.jpg";
private string bluePallet = "~/images/Blue.jpg";
private string blackPallet = "~/images/Black.jpg";
private string greenPallet = "~/images/Green.jpg";
private string racetrack = "~/images/Racetrack.jpeg";
public string Racetrack { get => racetrack; set => racetrack = value; }

public string OpenConnection(string connectString, String selectString)
{
using (OleDbConnection cn = new OleDbConnection(connectString))
{
cn.Open();  //Open the connection.
OleDbCommand cmd = new OleDbCommand(selectString, cn); 
OleDbDataReader reader = cmd.ExecuteReader();  
while (reader.Read())
{
string pallet;
if (reader["Status"].ToString() == "Blocked Location")
{
pallet = blackPallet;
return pallet;
}

if (reader["Status"].ToString() == "AP Purge")
{
pallet = redPallet;
return pallet;
}

if (reader["Status"].ToString() == "Open")
{
pallet = whitePallet;
return pallet;
}

if (reader["Status"].ToString() == "Order Complete")
{
pallet = greenPallet;
return pallet;
}

if (reader["Status"].ToString() == "Pallet Full")
{
pallet = bluePallet;
return pallet;
}
}

//Close the reader and the related connection.
reader.Close();
return null;
}
}

这是类/方法
的实例化'''

Definitions defs = new Definitions();

Image imgRacetrack = Image.FromFile(Server.MapPath(defs.Racetrack));
//Creating image panel to draw upon using w/h of racetrack image
Image img = new Bitmap(imgRacetrack.Width, imgRacetrack.Height);

using (Graphics gr = Graphics.FromImage(img))
{
//Background image
gr.DrawImage(imgRacetrack, new Point(0, 0));
//Defining the points on the left side:
Point p1 = new Point(125, 50);
Image imgPallet = Image.FromFile(Server.MapPath(defs.OpenConnection(connectString,selectString)));
gr.DrawImage(imgPallet, p1);               
Point p2 = new Point(125, 100);
Image imgPallet2 = enter code hereImage.FromFile(Server.MapPath(defs.OpenConnection(connectString, selectString)));
gr.DrawImage(imgPallet2, p2);
}

我希望遍历每条记录,然后将具有正确颜色的图像放置在正确的位置,但它仅根据第一条记录为每个点/位置提供结果。我的逻辑怎么了??

您声明托盘string pallet;然后有几个if语句,您可以在其中return pallet;.

首先,你想返回一个字符串,但你正在做

pallet = blackPallet; // pallet will not be a string.
pallet = "blackPallet"; // pallet will be a string.

其次,当你说return...时,你离开了方法;在那之后你不再继续,你说你已经完成了 - 返回这个值并停止。

因此,您需要从每一行读取值并存储它们,然后返回值的集合。然后,您可以遍历集合并根据需要插入每个值。

这是一种方式。我没有完全详细地研究你所拥有的东西,所以可能有更好的方法。希望现在就足够了。

最新更新