我收到下一个错误:
System.InvalidOperationException:操作已在进行中.
我无法理解它的原因.如果我评论阻止该开始端的所有工作正常.如果不是我打赌错误.有任何想法吗?
public void PGConnect()
{
List<UserData> uds = new List<UserData>();
UserData ud;
List<string> dblist = GetListDBsList();
if (dblist.Contains(config.PGdbName))
{
Console.WriteLine("Data Base exists: {0}", config.PGdbName);
}
else
{
Console.WriteLine("Data Base DO NOT exists: {0}", config.PGdbName);
return;
}
NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=" + config.PGLogin + ";" +
"Password=" + config.PGPass + ";Database=" + config.PGdbName + ";");
//select datname from pg_database;
try
{
conn.Open();
Console.WriteLine("PG Connected");
}
catch(SocketException e)
{
Console.WriteLine(e.Message);
}
//start
string tablesListRequestSQL = @"SELECT table_name FROM information_schema.tables WHERE table_schema='public'";
NpgsqlCommand commandGetDBTables = new NpgsqlCommand(tablesListRequestSQL, conn);
NpgsqlDataReader drGetDBTables = commandGetDBTables.ExecuteReader();
//tr.Commit();
while (drGetDBTables.Read())
{
existsInDBTables.Add(drGetDBTables[0].ToString());
}
foreach (string table in requireTablesList) //
{
if (!existsInDBTables.Contains(table)) // if element from requireTablesList do not found -> DB have not simmilar Tables!
{
notFoundedTables.Add(table);
}
}
if (notFoundedTables.Count != 0) // if not empty
{
Console.WriteLine("Next tables are marked as reqired for Sync, but can't be found in DataBase: ");
foreach (var table in notFoundedTables)
{
Console.WriteLine(table);
}
}
// end
Console.ReadKey();
NpgsqlCommand command = new NpgsqlCommand("SELECT city, state FROM cities", conn);
try
{
NpgsqlDataReader dr = command.ExecuteReader(); // VS show error here
while (dr.Read())
{
// UserData ud = new UserData();
ud.id = Int32.Parse(dr[0].ToString());
ud.guid = (dr[1].ToString());
ud.name = (dr[2].ToString());
ud.userblob = (byte[])dr[3];
uds.Add(ud);
//File.WriteAllBytes("outputimg.jpg", ud.userblob);
//Console.ReadKey();
}
}
finally
{
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
Windows 7. VS2015.PG 9.5
更多图片在这里:
http://img.ctrlv.in/img/16/04/20/5717882d0b968.png
您应该在使用下一个DbDataReader之前关闭它.不关闭它会导致此异常.
...
if (notFoundedTables.Count != 0) // if not empty
{
...
}
// end
/** IMPORTANT **/
/** Closing Data Reader **/
drGetDBTables.Close();
Console.ReadKey();
NpgsqlCommand command = new NpgsqlCommand("SELECT city, state FROM cities", conn);
...
Run Code Online (Sandbox Code Playgroud)
小智 0
尝试将“Preload Reader=true”添加到您的连接字符串中。
根据此更新 Asp.net 应用程序到 Npgsql 3 并删除预加载读取器,它可能会帮助您,因为它将允许数据库驱动程序释放连接。
| 归档时间: |
|
| 查看次数: |
8032 次 |
| 最近记录: |