您好,我通过以下代码从 SQL 创建控件:
string query = "SELECT * FROM [schema] WHERE idSch=@id";
SqlCommand com = new SqlCommand(query, con);
com.Parameters.AddWithValue("@id", result);
con.Open();
SqlDataReader read= com.ExecuteReader();
while (read.Read())
{
createLabelCmd((int)read["x"], (int)read["y"]);
}
con.Close();
问题是createLabelCmd
包含SqlCommand
并且它需要一个开放的SqlConnection
里面createLabelCmd
String ResultSitting
private void createLabelCmd(int x, int y)
{
for (int i = 0; i < 1; i++)
{
var newLabel = new Label();
newLabel.Location = new Point(x, y);
newLabel.Text = realpocsed.ToString();
string sitting = newLabel.Name;
string sittingSearch = (sitting).Substring(3, 1);
if (sittingSearch != null && kzajezdu == "kZajezdu")
{
string querySitting = "SELECT name, surname FROM klient WHERE sitting = @sitting AND event=@event AND year=@year";
SqlCommand cmdSitting = new SqlCommand(querySitting, spojeni);
cmdSitting.Parameters.AddWithValue("@sitting", sittingSearch);
cmdSitting.Parameters.AddWithValue("@event", idEvent);
cmdSitting.Parameters.AddWithValue("@year", klientClass.Year());
ResultSitting = cmdSitting.ExecuteScalar().ToString().Trim(); //This might be the issue
}
if (kzajezdu == "kZajezdu")
{
newLabel.MouseHover += delegate(object sender, EventArgs e)
{
ToolTip ToolTip1 = new ToolTip();
ToolTip1.ShowAlways = true;
if (sittingSearch != null)
{
ToolTip1.Show(ResultSitting, newLabel);
}
else { ToolTip1.Show("This sitting is Empty!", newLabel); }
};
}
panel1.Controls.Add(newLabel);
}
我得到一个例外:InvalidOpearationException: There is already an open DataReader associated with this Command which must be closed first.
你能帮我解决这个问题吗?
按照 Soner Gönül 的建议进行编辑:
try
{
string query = "SELECT * FROM [schema] WHERE idSch=@id";
SqlCommand com = new SqlCommand(query, con);
com.Parameters.AddWithValue("@id", idSch);
con.Open();
SqlDataReader read= com.ExecuteReader();
while (precti.Read())
{
createLabelCmd((int)read["x"], (int)read["y"]);
}
con.Close();
}