【发布时间】:2022-11-29 12:00:56
【问题描述】:
我正在尝试使用循环将数据对象列表输入到我的表中。但是在循环期间,逻辑突然停止并出现此错误:
已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。
这是我的代码:
List<TransactionAccount> accounts = new List<TransactionAccount>(); try { using (con = new SqlConnection(connectionString)) { string query = "INSERT INTO Accounts (name, category) VALUES (@name, @category)"; cmd = new SqlCommand(query, con); con.Open(); foreach (TransactionAccount account in accounts) { cmd.Parameters.AddWithValue("@name", account.name); cmd.Parameters.AddWithValue("@category", account.category); int exec = cmd.ExecuteNonQuery(); } con.Close(); } } catch (Exception ex) { }该错误没有意义,因为我在循环结束时关闭了连接。我应该在这里改变什么?
【问题讨论】:
-
你什么时候看到这个错误?在 foreach 循环内?或者在 foreach 循环期间?在错误之前循环迭代了多少次?
-
错误消息清楚地表明数据阅读器是开放的并引起力的干扰,这可能意味着一个在其他地方是开放的。
AddWithValue无法在循环中正常工作。空捕获也是一个坏主意 -
cmd在哪里以及如何声明?
标签: c# sql-server