MySQL에 연결하기 위해 .NET Connector를 사용하고 있습니다.MySQL - 여러 결과 집합
There is already an open DataReader associated with this Connection which must be closed first.
이제까지 여러 MySQL의에서 지원이있을 것입니다 :이 내 응용 프로그램에서 MySQLDataReader 아직 닫혀 있지 않는 경우에도 동일한 연결을 사용하여 몇 개의 스레드가, 그리고 어떤 스레드가 쿼리를 실행하려고 그것은 그 오류를 제공 결과 집합이나 그것은?
내 데이터베이스 관리 클래스 :
public class DatabaseConnection
{
private MySqlConnection conn;
public void Connect(string server, string user, string password, string database, int port = 3306)
{
string connStr = String.Format("server={0};user={1};database={2};port={3};password={4};charset=utf8",
server, user, database, port, password);
conn = new MySqlConnection(connStr);
conn.Open();
}
private MySqlCommand PrepareQuery(string query, object[] args)
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
for (int i = 0; i < args.Length; i++)
{
string param = "{" + i + "}";
string paramName = "@DBVar_" + i;
query = query.Replace(param, paramName);
cmd.Parameters.AddWithValue(paramName, args[i]);
}
cmd.CommandText = query;
return cmd;
}
public List<Dictionary<string, object>> Query(string query, params object[] args)
{
MySqlCommand cmd = PrepareQuery(query, args);
MySqlDataReader reader = cmd.ExecuteReader();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
while (reader.Read())
{
Dictionary<string, object> row = new Dictionary<string, object>();
for (int i = 0; i < reader.FieldCount; i++)
{
row.Add(reader.GetName(i), reader.GetValue(i));
}
rows.Add(row);
}
reader.Close();
return rows;
}
public object ScalarQuery(string query, params object[] args)
{
MySqlCommand cmd = PrepareQuery(query, args);
return cmd.ExecuteScalar();
}
public void Execute(string query, params object[] args)
{
MySqlCommand cmd = PrepareQuery(query, args);
cmd.ExecuteNonQuery();
}
public void Close()
{
conn.Close();
}
}
나는이 사용하는 방법의 예 :
DatabaseConnection Conn = new DatabaseConnection();
Conn.Connect("localhost", "root", "", "foogle");
var rows = conn.Query("SELECT * FROM `posts` WHERE `id` = {0}", postID);
foreach (var row in rows)
{
Console.WriteLine(row["title"]); // Writes the post's title (example)
}
나는 이것이 MySQL 때문인 것은 아닙니다. MySQLDataReader 컨트롤의 한계와 더 비슷하게 보입니다. –
MySQL이 이것을 지원한다면, 나는이 웹 사이트에서이 기능을 발견 할 수 있습니다. : \ –
코드를 게시 할 수 있습니까? –