private void startPoll()
{
System.Diagnostics.Debug.WriteLine("dbForm created");
timer = new Timer(int.Parse(Properties.Settings.Default.DbPoll) * 1000);
// ElapsedEventHandler OnEventExecution = null;
timer.Elapsed += OnEventExecution;
timer.Start();
System.Diagnostics.Debug.WriteLine("Timer Started " + Properties.Settings.Default.DbPoll + " secs");
string connectionString;
// MySqlConnection conn;
connectionString = "server=" + Properties.Settings.Default.DbServer + ";database=digital_passports;uid=" + Properties.Settings.Default.DbUser + ";pwd=" + Properties.Settings.Default.DbPass ;
try
{
using (conn = new MySqlConnection(connectionString))
{
try
{
conn.Open();
System.Diagnostics.Debug.WriteLine("Database Connection Connected");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("Database Connection Failed..." + ex);
}
var stm = "SELECT * from vtokenpool limit 10";
using (var cmd = new MySqlCommand(stm, conn))
{
// var version = cmd.ExecuteScalar().ToString();
// System.Diagnostics.Debug.WriteLine($"MySQL version: {version}");
stateText.Text = "Running";
stateText.ForeColor = System.Drawing.Color.Green; ;
try
{
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
System.Diagnostics.Debug.WriteLine(rdr[0] + " -- " + rdr[1]);
/*
object[] tempRow = new object[rdr.FieldCount];
for (int i = 0; i < rdr.FieldCount; i++)
{
tempRow[i] = rdr[i];
}
dataList.Add(tempRow);
*/
}
rdr.Close();
System.Diagnostics.Debug.WriteLine("Reader Closed");
conn.Close();
System.Diagnostics.Debug.WriteLine("Connection Closed");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
}
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
嗨
我轮询一个数据库视图,我得到这个错误沿着
当另一个读取操作挂起时,无法调用ReadAsync方法。
我在代码中关闭了datareader和连接,并使用了using语句,但我在重复查询时得到了这些错误。
关于Aidan
2条答案
按热度按时间643ylb081#
问题(或至少是“a”)在这里:
这将创建一个新的连接对象,但不会创建一个新的变量。这段代码只是在其他地方声明的现有
conn
变量之上进行赋值,在可能与其他代码共享的更高范围内。ReadAsync
注解还表明我们正在使用异步代码(即使它不是本示例的一部分),这意味着其他代码可以与此代码同时运行-所有代码都查看相同的conn
变量,但引用的连接对象从我们下面更改。更糟糕的是,孤立的连接对象可能会一直处于打开状态,直到GC在将来某个不确定的时间赶上它们。
相反,每次都应该创建一个新变量:
完成后,* 您甚至不需要手动调用
conn.Close()
*。using
块将为您处理它。tgabmvqs2#
您好,谢谢,这修复了错误消息,谢谢。但另一个问题是,消息的输出不同步,就像下面的任何想法,为什么在几轮之后?下面放出来