好吧,所以我有一部分正在编写的脚本,如果它已经在一个表中,它将插入新地址,但是问题是我遇到了一个我似乎无法解决的异常,我调试了很多次,并说
System.InvalidOperationException:'已经有一个与此Connection关联的打开的DataReader,必须先关闭它。'
我在Google上搜索过,没有什么真正的帮助,因此这是给我错误的代码块
try
{
_conn.Open();
string compare =
"SELECT address, COUNT(*) FROM melena_edws m " +
"WHERE EXISTS (SELECT address FROM actuals a WHERE m.address = a.address) " +
"GROUP BY address ";
CtreeSqlCommand cmd = new CtreeSqlCommand(compare, _conn);
CtreeSqlDataReader reader = cmd.ExecuteReader();
int count = (int)cmd.ExecuteScalar();//<------Error is here
if(count > 0)
{
while (reader.Read())
{
Console.WriteLine(string.Format("{0,12}", reader["address"]));
//cmd2.ExecuteNonQuery();
reader.Close();
Compare($"{reader["address"]} ");
}
reader.Dispose();
_conn.Close();
}
else
{
Console.WriteLine("Address already within table");
}
}
catch (CtreeSqlException ctsqlEx)
{
Console.WriteLine(ctsqlEx + " error running command script ");
}
答案 0 :(得分:0)
如果使用该连接打开了DataReader,则该连接对象不能用于其他命令。替代方法是使用不同的连接,但是在您的上下文中,您实际上不需要执行任何操作即可对sql文本返回的记录进行计数。
如果没有行,则DataReader.Read将立即返回false。或者,您可以仅使用DataReader.HasRows属性来发现此事实,而无需进入循环并显示正确的错误消息。
因此您可以使用
重写代码for col in table.columns:
for cell in col.cells:
for par in cell.paragraphs:
par.style = 'My Center Aligned Style'