0

autocomplete在 c# 中尝试了文本,并尝试了这段代码,

try
{
   textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
   textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
   AutoCompleteStringCollection col = new AutoCompleteStringCollection();
   sqlconn.Open();
   string query = "select id from cmp_det where id =" + textBox1.Text;
   SqlCommand command = new SqlCommand(query, sqlconn);
   SqlDataReader sdr = command.ExecuteReader();
   while (sdr.Read())
   {
       col.Add(sdr["Column_Name"].ToString());    
   }
   sdr.Close();
   textBox1.AutoCompleteCustomSource = col;
   sqlconn.Close();
}
catch(Exception ex)
{
    Console.WriteLine("exception=="+ex);
}

when ) 执行代码出现如下错误:

exception==System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
4

3 回答 3

1

尝试替换您的代码:

SqlDataReader sdr = command.ExecuteReader();
while (sdr.Read())
{
   col.Add(sdr["Column_Name"].ToString());    
}
sdr.Close();

对此:

using(SqlDataReader sdr = command.ExecuteReader())
{
   while (sdr.Read())
   {
       col.Add(sdr.GetValue(0).ToString());    
   }
}

其中 0 是查询的从零开始的列序号

于 2013-07-12T10:17:04.870 回答
0

启用 MARS 会解决这个问题吗?添加"MultipleActiveResultSets=True"到您的连接字符串应该可以解决该类型的错误。

http://msdn.microsoft.com/en-us/library/h32h3abf(v=vs.80).aspx

于 2013-07-12T09:53:37.320 回答
0

这是由于 MAR 的默认设置发生了变化。它过去是默认开启的,我们在 RC1 之后将其默认关闭。因此,只需更改您的连接字符串以将其添加回来(将 MultipleActiveResultSets=True 添加到连接字符串)。

于 2013-07-12T10:01:09.647 回答