簡體   English   中英

另一個“已經有一個開放的DataReader關聯......”

[英]Another “There is already an open DataReader associated…”

有關如何關閉DataReader任何提示? 我使用postgresql而MARS僅用於SQL。 或許我不需要MARS來解決這個問題,我不知道。 錯誤顯示在foreach循環中。 謝謝你的提示。

var months = (from month in connector.PositionInstance where month.FeeNoticeMonth >= DateTime.Now.Month select month);

foreach (PositionInstance p in months)
{
    System.Windows.MessageBox.Show("" + p.First().Position.Name);
}

編輯:我有兩個表PositionInstance和位置:

CREATE TABLE "Position"
(
"PositionId" integer NOT NULL DEFAULT,
"Name" character varying(30) NOT NULL,
CONSTRAINT "PK_Position" PRIMARY KEY ("PositionId")
)

CREATE TABLE "PositionInstance"
(
"PositionInstanceId" integer NOT NULL DEFAULT,
"FeeNoticeYear" integer NOT NULL,
"FeeNoticeMonth" integer NOT NULL,
CONSTRAINT "PK_PositionInstance" PRIMARY KEY ("PositionInstanceId"),
CONSTRAINT "FK_Position_PositionInstance" FOREIGN KEY ("PositionId")
REFERENCES "Position" ("PositionId") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION 
)

由於延遲加載(在foreach循環內部發生),您的情況可能會發生此問題。 它試圖在循環的每次迭代中從DB加載每個Position

解決此問題的一種方法是使用預先加載來在查詢中立即獲取所有Positions 然后,如果您在查詢結束時也使用諸如ToList()類的貪婪操作,則執行DB並一次性拉出所有內容。 在你的情況下嘗試類似的東西

var months = 
    (from month in connector.PositionInstance 
     where month.FeeNoticeMonth >= DateTime.Now.Month 
     select month).Include("Position").ToList();

或一些變化。 在查詢之后使用ToList()將輸入變量months作為包含來自DB的填充結果的List (這是一個IEnumerable ); 否則months將是尚未執行的數據庫查詢的IQueryable

嘗試在連接字符串中添加:

MultipleActiveResultSets =真

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM